Para melhor visualização, recomendo resolução de no mínimo 1024 x 768 e navegadores Mozilla Firefox ou Google Chrome


quarta-feira, 19 de março de 2008

Descomplicando RAID 01 (0+1) e RAID 10 (1+0)

Por Eduardo Legatti

Olá,
 

Quando falamos em bancos de dados, a primeira coisa que vêem em nossas mentes é a preocupação com a performance, mas segurança para mim, realmente é fundamental. Neste artigo irei comentar um pouco sobre o uso da tecnologia RAID, mais especificamente sobre o RAID 0, RAID 1 e a junção dos dois que é um híbrido entre RAID 0 e RAID 1. Outra coisa que irei comentar é sobre a diferença entre RAID 10 (1+0) e RAID 01 (0+1) que são implementações completamente diferentes e que às vezes muitos profissionais de TI não percebem. Em resumo, mostrarei porque uma configuração em RAID 10 (1+0) tem uma certa superioridade em relação a uma configuração em RAID 01 (0+1).

O que é RAID?
  • RAID por hardware é sempre uma controladora de disco, isto é, um dispositivo que pode através de um cabo conectar os discos. Geralmente ele vem na forma de uma placa adaptadora que pode ser "plugada". O conceito básico do RAID (Redundant Array of Independent Disks) que, traduzido para o português, seria algo como Matriz Redundante de Discos Independentes é combinar vários discos em uma disposição que se obtenha não só alta performance, mas também segurança no que se refere a tolerância à falhas de disco. Na verdade ele visa primariamente a proteção contra falha de disco às custas do uso de mais espaço em disco. Entretanto, as implementações do RAID têm diferenças importantes em suas características de E/S, as quais têm impacto sobre o desempenho e limitam ou ampliam sua adequação às diferentes situações. Cada nível do RAID difere na forma como a redundância é implementada no nível de hardware. Existem vários tipos de RAID e foram definidos inicialmente cinco tipos de arquiteturas de disposição de discos, RAID 1 até RAID 5, cada qual com tolerância a falhas, porém com diferentes propostas de características e performance. Além destas cinco arquiteturas, tornou-se comum referir-se a uma disposição não redundante como RAID 0.
  • RAID por software é uma configuração de módulos do kernel, juntamente com utilitários de administração que implementam RAID puramente por software, e não requer um hardware especializado. RAID por software, por ter sua natureza no software, tende a ser muito mais flexível que uma solução por hardware. O lado negativo é que ele em geral requer mais ciclos e capacidade de CPU para funcionar bem, quando comparado a um sistema de hardware.
Em resumo, comparando as duas soluções e no meu ponto de vista, o RAID via hardware é transparente para o sistema operacional, e isto tende a simplificar o gerenciamento, já que via software mesmo que tenha mais opções e escolhas de configurações, pode fazer com que o gerenciamento se torne mais complexo.



RAID 0 (STRIPING – SEGMENTAÇÃO DE DADOS)


O RAID 0 não é realmente um array redundante. Como dito anteriormente, eu tiraria o R (Redundante) e deixaria apenas o AID (Array de discos Independentes) pelo fato de mesmo não proporcionar nenhuma tolerância contra falhas de disco. O uso de RAID 0 é mais indicado quando custo e performance são críticos e a integridade de dados pode ficar em segundo plano, ou seja, abrir mão da segurança em detrimento da performance. Chamamos de "striping" a combinação de vários discos em apenas uma única unidade lógica de armazenamento que particiona o espaço de armazenamento de cada disco em faixas. O striping busca melhorar o desempenho de disco distribuindo a atividade de E/S através de várias unidades de disco e reduzindo ou eliminando um gargalo de E/S. Como exemplo, é possível usar de dois a quatro discos rígidos em RAID 0, onde os mesmos serão acessados como se fosse um único disco, aumentando o desempenho do acesso aos dados. Os dados gravados são divididos em partes e são gravados por todos os discos. Na hora de ler, os discos são acessados ao mesmo tempo. De acordo com algumas pesquisas, teremos um aumento de desempenho de cerca de 97% usando dois discos, 179% usando 3 discos e algo próximo a 249% usando 4 discos. As capacidades dos discos são somadas e usando 4 discos de 80 GB, por exemplo, passaríamos a ter um único grande disco de 320 GB.

Obs: O tamanho do disco virtual criado a partir do RAID 0 é igual ao dobro do tamanho do menor disco. Isso possibilita utilizarmos discos de diferentes capacidades, porém perderemos espaço no disco de maior tamanho e o desempenho também ficará limitado ao desempenho do disco mais lento.

Atenção: a desvantagem do RAID 0 é que ele não é tolerante a falhas, ou seja, caso um disco (onde os arquivos do Oracle estão segmentados) falhe, todo o array de armazenamento falhará e conseqüentemente a instância Oracle abortará.
 
Exemplificando, em uma configuração RAID 0 com dois discos, um arquivo de 1 MB estaria repartido (512 KB em um setor de um disco e 512 KB em outro setor de outro disco) e a leitura dos dois setores seria feita ao mesmo tempo (um setor em cada disco), dobrando, teoricamente, a velocidade de leitura e escrita, já que o acesso aos discos tanto para escrita quanto leitura dos dados será feito em paralelo.



RAID 1 (MIRRORING - ESPELHAMENTO)

O RAID 1 consiste nos mirrors (espelhamento) de disco que mantém cópias completas e idênticas dos dados de cada mirror de disco. Todas as alterações feitas nos dados de um disco são simultaneamente feitas no mirror de disco correspondente. As leituras de disco, por outro lado, podem ser executadas em um dos mirrors de disco (a controladora de disco seleciona o mirror de disco menos ocupado) ou simultaneamente nos dois discos pelo fato da operação de E/S estar distribuída nos dois discos. Em resumo, a operação com dados neste nível possuem tendência de serem gravados mais lentamente (mas realmente acredito que a performance se mantém a mesma), porém com leitura rápida já que o sistema terá dois ponteiros para achar os arquivos. É importante salientar que o sistema mostrará apenas 1 disco, pois o segundo será um clone do primeiro. Imagine que tenhamos dois discos com 80 GB cada. Para o sistema, existirá apenas uma unidade com 80 GB, pois os dados estarão sendo duplicados (espelhados) no segundo disco, e por esse motivo passamos a ter tolerância a falhas, pois se um disco falhar o conjunto continua em operação e, se os discos suportarem a tecnologia de hot-swap (troca à quente), o disco defeituoso poderá ser substituído e o sistema fará o sincronismo sem a necessidade de parada do equipamento. No meu ponto de vista, o RAID 1 geralmente (mas nem sempre) é um tipo de array de discos adequado para os arquivos do Oracle. Se eu tivesse que escolher apenas um tipo de array de discos para o Oracle, o RAID 1 seria a melhor opção.


Obs: O RAID 1 não pode ser considerado como um substituto para backup porque neste nível os dados são replicados em discos, e no caso de deletarmos o conteúdo do primeiro disco, automaticamente os dados do disco-espelho também serão deletados.



Multiplexing e Mirroring são a mesma coisa?

Não. À primeira vista, o mirroring (espelhamento) e o multiplexing (multiplexação) parecem ser duas maneiras de fazer exatamente a mesma coisa. Por que se importar com o mirroring de hardware quando o arquivo está multiplexado, ou por outro lado, por que multiplexar quando o arquivo está no disco espelho? Na verdade, o multiplexing e os mirroring têm diferenças sutis no tipo de proteção que eles fornecem. O multiplexing é implementado no nível de software. Cada arquivo é gravado pelas operações de gravação lógica. Se uma operação de gravação lógica em uma cópia de um arquivo multiplexado em outro disco gravar dados corrompidos, os outros arquivos ainda estarão intactos, porque serão feitas gravações diferentes neles. Esse tipo de proteção não é conseguido pelo mirroring porque uma gravação corrupta nos arquivos vai corromper todas as cópias de espelho simultaneamente. Entretanto, o mirroring oferece uma vantagem diferente. Se o control file (arquivo de controle) for multiplexado em outro disco, mas não estiver espelho, a perda de uma única cópia muliplexada do arquivo de controle fará com que uma instância Oracle em execução dê pane porque o Oracle são conseguirá acessar o arquivo perdido. Neste caso, a instância deverá ser reinicializada depois que a localização do arquivo multiplexado estiver novamente disponível para o Oracle, ou após a cópia do arquivo de controle que está faltando tiver sido removida do parâmetro CONTROL_FILES no arquivo de inicialização da instância. Portanto, a perda de um arquivo de controle que é multiplexado mas não tem um espelho, causará paralisação devido à pane da instância. Entretanto, se o arquivo de controle tiver espelho, a instância Oracle não terá pane e continuará sendo executada mesmo depois que um disco espelho se perder, porque o espelho no nível de hardware é transparente para o servidor Oracle.
 

Mesclando mirroring e striping
 
Este tipo de RAID é um híbrido do RAID 0 e RAID 1 que usa tanto o mirroring quanto o striping. Ele combina os benefícios de alta disponibilidade oferecidos pelo RAID 1 com os benefícios de desempenho relacionados ao striping do RAID 0. Existem duas combinações que podem ser escolhidas ao utilizar a técnica de striping e mirroring juntas a qual eu chamo de nível duplo de RAID. Observe que é preciso no mínimo quatro discos para montar este tipo de configuração.


RAID 01 (ou RAID 0+1) – Striping e Mirroring


Em uma implementação RAID 0+1, os dados são espelhados através de grupos de discos segmentados, isto é, os dados são primeiro segmentados e para cada segmento criados é feito um espelho, como demonstrado na figura abaixo:
 
Na figura acima vemos que o discos 1 e 2 formam um RAID 0 sendo após espelhados pelo discos 3 e 4 também em RAID 0, formando assim RAID 1 sobre RAID 0. Apesar de ser uma configuração que proporciona alta performance, se perdermos um disco em um dos lados, praticamente teremos uma configuração em RAID 0, porque em uma configuração RAID 0 se um disco falha todo o conjunto falhará. Neste caso, se o disco 1 falhar, então o disco 2 que está intacto ficará inutilizado, restando assim os discos 3 e 4 em RAID 0.


RAID 10 (ou RAID 1+0) – Mirroring e Striping


Em uma implementação RAID 1+0, os dados são segmentados através de grupos de discos espelhados, isto é, os dados são primeiro espelhados e para depois serem segmentados como demonstrado na figura abaixo:


Na figura acima vemos que o discos 1 e 2 formam um RAID 1 e os discos 3 e 4 também sendo após segmentados em RAID 0, formando assim RAID 0 sobre RAID 1. Além de ser uma configuração que proporciona o mesmo nível de performance proporcionado pelo RAID 01, o RAID 10 proporciona mais tolerância à falhas que o RAID 01 porque poderíamos ter uma falha simultânea dos discos 1 e 3 e ainda assim o conjunto estaria intacto, pois teríamos os espelhos em perfeito funcionamento. No meu ponto de vista, este conjunto é o mais indicado nos casos onde necessitamos aliar performance e redundância, como é o caso, por exemplo, de bancos de dados Oracle de alta performance.


Conclusão

Nos dois casos (0+1 ou 1+0), a perda de um único disco não resultará na falha do sistema RAID. A diferença aparece no caso da perda de um segundo disco que dependendo do disco, o sistema RAID 0+1 ficaria em desvantagem sobre o sistema RAID 1+0. Uma outra diferença é na velocidade de recuperação, porque caso ocorra uma falha de disco, no sistema RAID 1+0 será necessário apenas re-espelhar um disco, ao contrário do sistema RAID 0+1 que será necessário espelhar todo um conjunto segmentado. Portanto não se esqueça que RAID 01 é diferente de RAID 10.

RAID 01 (0+1)
RAID 10 (1+0)
 Em resumo, para bancos de dados de produção de alta disponibilidade, escolha os arrays de disco hot swappable que permitem substituir um disco falho sem precisar desligar todo o array. Se eu não estiver enganado, esse recurso é quase que um padrão atualmente. Melhor ainda que os discos hot swappable é o recurso standby disk, no qual um disco substituto já está contido no array, pronto para assumir caso um disco falhe.

 
Gerenciamento Automático de Armazenamento no Oracle (ASM)
 
A constante evolução da tecnologia Oracle busca melhorar a resposta e simplificar a gestão da plataforma tecnológica. Como resultado, surgiu o revolucionário Automatic Storage Manager, ou ASM, componente da nova versão do banco de dados Oracle 10g. O ASM possibilita que o usuário não se preocupe com RAID. Com ele, é possível aproveitar não apenas os recursos do hardware de armazenamento, mas também todas as decisões de stripping e espelhamento adequados à configuração de dados e sua dinâmica de utilização, mas é importante salientar que o ASM não substitui o RAID, mas aproveita os recursos do hardware e aplica de maneira automática e transparente para o administrador a configuração de stripping e mirroring mais adequada, de acordo com o número de dispositivos disponíveis e com as características de uso e volume do banco de dados em questão. Esse esclarecimento é importante para evitar confusões, já que o ASM usa as capacidades de RAID do hardware.

Para maiores detalhes sobre RAID com Oracle, visite a página da Oracle:
http://www.oracle.com/technology/deploy/availability/htdocs/hafaq.html
http://www.oracle.com/technology/deploy/availability/techlisting.html


Google+

11 comentários:

André Santos disse...

Eduardo
Ótimo artigo, além da informação técnica explicada com propriedade, foi claro e objetivo!
Parabéns e obrigado!

Eduardo Legatti disse...

Olá André,

Obrigado pela visita ;-)

Abraços e até mais ...

Ranieri disse...

Excelente material!

Anônimo disse...

Olá meu amigo. Só uma dúvida: no RAID 0+1 se falharem os discos 1 e 4, não é a mesma tolerância do RAID 1+0? Você recomenda alguma literatura ou url sobre o tema?

Sds.

Eduardo Legatti disse...

Olá Anônimo,

O RAID 10 proporciona mais tolerância à falhas que o RAID 01 porque poderemos ter uma falha simultânea dos discos 1 e 4 e ainda assim o conjunto estaria intacto, pois teríamos os espelhos (2 e 3) em perfeito funcionamento. No caso do RAID 01, se perdermos um disco em um dos lados, praticamente teremos uma configuração em RAID 0, porque em uma configuração RAID 0 se um disco falha todo o conjunto falhará. Neste caso, se o disco 1 falhar, então o disco 2 que está intacto ficará inutilizado, restando assim os discos 3 e 4 em RAID 0. Se os discos 1 e 4 falharem, então todo o array falhará, inutilizando os 4 discos.

Acredito que um link interessante seria o http://pt.wikipedia.org/wiki/RAID

Abraços e até mais ...

Anônimo disse...

Olá Eduardo,

muito interessante esse artigo.

Você recomenda utilizar o ASM entregando os discos em raw, deixando que o oracle gerencie o mirror e stripe, (nesse cenário, não precisaria de hot spare), ou usar a abordagem tradicional, criar o RAID pelo storage entregando LUNs para o ASM ?

Eduardo Legatti disse...

Olá Anônimo,

ASM é um recurso que praticamente ainda não tenho uma experiência forte. Eu acho que a questão é uma preferência administrativa de quem vai gerenciar, mas em questão de ASM eu escolheria a 1ª opção. O ASM possibita a utilização de recursos dos discos de forma que não tenhamos que se preocupar com RAID e isso é fato. Eu ainda trabalho com muitos bancos que usam o RAID tradicional sem ASM ;) Realmente, eu vejo que a grande vantagem do Oracle em gerenciar o mirror e stripe com o ASM é essa baixa intervenção do DBA em ficar gerenciando a carga de I/O entre os recursos (discos) disponíveis, etc... O ASM assume o controle e pronto. No mais, pra mim, raw devices é uma caixa preta e que inclusive vai ser descontinuada pela Oracle nas futuras versões ;-)

Abraços e obrigado pela visita ...

Fábio Prado disse...

Eduardo, ótimo artigo. Só para complementar quero adicionar 2 comentários:

1- Pelos motivos que vc explicou muito bem, a Oracle recomenda RAID 10 para datafiles;

2- Uma grande vantagem do RAID 10 em relação ao RAID 01 é o MTTR em caso de desastres.

[]s

Fábio Prado
www.fabioprado.net

Eduardo Legatti disse...

Olá Fábio,

Concordo plenamente! ;-)

Obrigado pela visita e até mais

Legatti

ADMMAN Informática disse...

Olá,

> o RAID 10 proporciona mais tolerância à falhas que o RAID 01 porque poderíamos ter uma falha simultânea dos discos 1 e 3 e ainda assim o conjunto estaria intacto, pois teríamos os espelhos em perfeito funcionamento. No meu ponto de vista, este conjunto é o mais indicado nos casos onde necessitamos aliar performance e redundância, como é o caso, por exemplo, de bancos de dados Oracle de alta performance

Apesar de configurar os discos de um servidor usando RAID-10, também pude observar que havia uma opção para a inicialização desta estrutura, algo como se fosse um "Quick Init" ou algo parecido. E como normalmente é regra "ir logo para os finalmentes" e sendo esta opção algo como um "default" (padrão), acaba-se "adotando" o que foi "sugerido" e o resto da instalação prossegue normalmente.

Só que de uns tempos para cá, me deparei com um comentário em outro fórum, de que seria mais apropriado deixar o servidor concluir o procedimento de inicialização "mais longo", onde toda a estrutura RAID-10 seria concluída e que isto resultaria em um ganho de aproximadamente 50%. Mas, como muita coisa disponível na Internet não é suficientemente detalhada de forma que seja possível reproduzir, eu gostaria de saber se já chegou a reparar neste "sintoma" de falta de performance se a estrutura RAID-10 for inicializada de forma "mais rápida" ao invés da "completa"...

Grato desde já,
Sven

Eduardo Legatti disse...

Olá Sven,

Nunca cheguei a testar esse tipo de de procedimento, Realmente não sei se isso faz algum sentido.

Abraços e até mais

Legatti

Postagens populares