Estou prestes a substituir uma matriz RAID5 de hardware antiga por uma matriz RAID1 de software Linux. Eu estava conversando com um amigo e ele afirmou que o RAID5 era mais robusto que o RAID1.
Ele afirmou que, com o RAID5, na leitura, os dados de paridade foram lidos para garantir que todas as unidades retornassem os dados corretos. Ele alegou ainda que, no RAID1, os erros ocorridos em uma unidade passam despercebidos porque essa verificação não é feita com o RAID1.
Eu posso ver como isso pode ser verdade, mas também posso ver que tudo depende de como os sistemas RAID em questão são implementados. Certamente, um sistema RAID5 não precisa ler e verificar os dados de paridade em uma leitura, e um sistema RAID1 poderia facilmente ler de todas as unidades na leitura para verificar se estavam mantendo os mesmos dados e, portanto, atingir o mesmo nível de robustez ( com uma perda de desempenho correspondente).
Portanto, a questão é: o que os sistemas RAID5 / RAID1 no mundo real realmente fazem? Os sistemas RAID5 verificam os dados de paridade nas leituras? Existem sistemas RAID1 que lêem de todas as unidades e comparam os dados na leitura?
fonte
Com o RAID-5, a paridade geralmente é lida apenas na reconstrução da matriz, e não na leitura geral. Isso significa que as leituras podem ser mais aleatórias e rápidas (já que você não precisa ler e calcular a paridade de uma faixa inteira toda vez que quiser 1K de dados da matriz).
Com o RAID-1, geralmente as leituras são passadas pelas unidades, sempre que possível, para aumentar o desempenho da leitura. Como você observou, se o subsistema RAID tentar ler as duas unidades e elas diferirem, o subsistema não terá como saber qual unidade estava errada.
A maioria dos subsistemas RAID depende da unidade para informar o controlador ou o computador quando estiver com problemas.
Então o RAID-5 é "mais robusto"? A resposta é: depende. O RAID-5 permite obter armazenamento mais eficaz para um determinado número de discos do que o RAID-1; embora, para oferecer armazenamento eficaz além de um disco, o RAID-1 precise ser combinado com o RAID-0, como uma faixa de matrizes RAID-1 ou como um RAID-1 em duas faixas RAID-0.
(Eu prefiro o primeiro, pois uma única falha de unidade removerá um único elemento RAID-1, o que significa que apenas uma única unidade precisará ser reconstruída. Com o último, uma única falha de unidade mata um elemento RAID-0, o que significa que os discos estarão envolvidos na reconstrução quando a unidade for substituída.)
Isso também leva a discussões sobre "gravações fantasmas", nas quais uma gravação é relatada como bem-sucedida pelos componentes eletrônicos da unidade, mas por qualquer motivo, a gravação nunca chega ao disco. Isso acontece. Considere que, para uma matriz RAID-5, quando houver uma falha na unidade, a matriz DEVE ler TODOS OS setores em TODAS as unidades sobreviventes PERFEITAMENTE para recuperar. A NetApp afirma que o tamanho grande das unidades e o tamanho dos grupos de invasões significa que, em alguns casos, suas chances de falhar durante uma reconstrução podem ser tão ruins quanto uma em cada dez. Portanto, eles recomendam que discos grandes em grandes grupos RAID usem paridade dupla (o que eu acho que está relacionado ao RAID-6).
Aprendi isso em uma discussão técnica da NetApp apresentada por alguns de seus engenheiros.
fonte
Nenhuma implementação comum de RAID normalmente verifica a paridade no acesso a dados. Eu nunca vi um. Algumas implementações de RAID5 leem dados de paridade para leituras de streaming para evitar buscas desnecessárias (mais barato jogar fora a enésima quadra do que fazer com que a unidade procure por cada enésima quadra). As implementações de RAID1 não podem ser verificadas porque elas leem o desempenho dos dois discos (bem, na grande maioria das implementações de RAID1. Um punhado permite que você escolha, o que pode ser útil se um disco for muito mais lento que o outro e não exigir muita gravação carga.)
Alguns verificam com um 'esfregar' de fundo. Nesse caso, o RAID6 vence porque pode recuperar os dados e o RAID5 e o RAID1 estão na mesma situação, é possível identificar, mas não corrigir. (Isso não é estritamente verdadeiro, pois a unidade pode detectar um CRC incorreto, retornar um erro e permitir que você reescreva o bloco com paridade. Isso acontece com bastante frequência).
Se você deseja integridade dos dados, armazene um hash em cada bloco (ou registro, ou no entanto, ele está dividido) na camada de aplicativo. A Sybase e a Oracle fazem isso (acredito no nível da página) e já vi várias vezes salvar um banco de dados gigantesco. (por exemplo, o controlador começa a retornar dados incorretos, o sybase trava com um erro claro; portanto, nenhuma gravação foi feita quando o banco de dados estava em execução no hardware com um estado inconsistente).
A única solução de sistema de arquivos e a única solução RAID que faz isso por você é o ZFS.
fonte
Seu amigo está falando sobre o bit de paridade envolvido em alguns níveis de RAID ou a soma de verificação dos dados gravados no disco?
Se eles estão sobre a paridade, o RAID1 não possui um bit de paridade - você tem duas cópias dos mesmos dados. Deve haver uma soma de verificação executada pelo disco para garantir que o que foi gravado no disco corresponda ao que veio ao fio
O RAID5 tem um pouco de paridade. Isso significa que você pode perder um disco no seu conjunto RAID e continuar como se nada tivesse acontecido. Ainda assim, deve haver uma soma de verificação dos dados gravados no disco para garantir que eles correspondam ao que veio à tona
Nesse caso, as somas de verificação são totalmente independentes do RAID que pode ou não ser executado com vários discos
Editado para adicionar: você mencionou a mudança do RAID de hardware para o RAID de software. A preferência é sempre RAID de hardware sobre RAID de software. Se você pode adquirir o hardware necessário para fornecer o nível RAID que deseja implementar, sugiro que você faça isso. Isso permitirá que todos os cálculos de paridade sejam executados pela placa RAID, e não pelo host. Portanto, liberando recursos no host. Não há dúvida de outros benefícios, mas eles me escapam no momento
fonte
Isso dependeria do tipo de implementação de invasão (hw / sw), dos discos, do controlador de invasão, se houver, e de seus recursos.
faz algum sentido, mas não realmente :) o que acontece é - se dados errados forem gravados, em um espelho, eles serão enviados para as duas unidades e, na paridade raid5, serão gerados e espalhados pelas unidades. a verificação de leitura / gravação de dados é feita pelo firmware do disco e do controlador e não tem nada a ver com os níveis de invasão.
como eu disse, as verificações não fazem parte do algoritmo de invasão, embora alguns controladores possam ter algo adicional implementado.
a robustez da matriz está de acordo com a qualidade das unidades (unidades de 2,5 "tendem a viver mais de 3,5" devido à redução das taxas de RV; na minha experiência NUNCA compre unidades maxtor SCSI / SAS - elas têm falhas horríveis de firmware), o ambiente (controle de temperatura e umidade), o próprio controlador (possui uma BBU? o firmware está atualizado? é um ataque real ou fakeraid?), a quantidade de PSUs no servidor, a qualidade da UPS etc.
fonte
Não sei disso, mas me parece improvável que sim. Lembre-se de que, para calcular a paridade, ele precisará ler o bloco de todas as unidades em seu conjunto RAID e, em seguida, fazer cálculos para determinar a exatidão, enquanto que, se não o fizer, apenas fará a leitura de uma unidade.
Além disso, se sua leitura for inferior a um bloco, uma leitura de verificação de paridade teria que expandi-la para um bloco completo, enquanto uma leitura regular não seria. (Supondo, é claro, que o bloco RAID seja maior que o bloco dos discos. Acho que as leituras do disco devem ser de blocos completos. Caso contrário, meu argumento é ainda mais válido.)
Portanto, do meu ponto de vista, sim, poderia fazer isso, mas, se o fizesse, seria ineficiente e duvido que alguma seja implementada dessa maneira.
Novamente, porém, não tenho conhecimento pessoal de implementações reais.
fonte
Realmente não faz sentido. O que você faz quando encontra uma incompatibilidade de paridade? (Como você sabe qual bloco está errado?)
Para leituras aleatórias, verificar a paridade seria caro. Normalmente, você pode atender a uma leitura aleatória apenas olhando para um único disco, mas se quiser verificar a paridade, precisará ler todos os discos em cada leitura. (Isso ainda pode fazer sentido se houver algo que você possa fazer sobre isso!)
Observe que o RAID-1 também tem esse problema - o que faz sentido quando você olha para um RAID-1 como um RAID-5 de dois discos.
fonte
Eu estive pensando um pouco sobre a afirmação de que o RAID-1 deve ser mais rápido nas leituras do que o RAID-5, pois ele lê nas duas unidades ao mesmo tempo.
Agora, como a paridade não é lida no RAID-5, a menos que a matriz precise de uma reconstrução, na verdade é igual a uma matriz RAID-0 em termos de leitura, estou correto?
O RAID-0 é geralmente considerado o nível mais rápido (embora deva ser chamado de "AID", pois não há redundância). :-D
Falando em software RAID para Linux, um teste simples - usando o hdparm - confirma esta teoria: minhas matrizes RAID-5 sempre mostram uma velocidade de leitura mais alta que minhas matrizes RAID-1.
MAS: Parece que uma matriz degradada é muito mais lenta que uma matriz em execução normal! Acabei de testar isso com o Fedora 9, executando em unidades de 4 WD 1 TB com diferentes níveis de RAID. Aqui estão os resultados:
RAID-5 degradado: velocidade de leitura 43 MB / seg RAID-5 normal: velocidade de leitura 240 MB / seg (!) RAID-1: velocidade de leitura 88 MB / seg
Como a perda permitida de discos é a mesma no RAID-1 e RAID-5 (ou seja, um), acho que o RAID-5 deve superar o RAID-1 em todos os aspectos - fornecendo mais capacidade em relação ao número de discos usados na matriz e no mesmo tolerância ao erro. Isso leva a uma conclusão que afirma que o RAID-6 supera todos os outros níveis de RAID, já que é tão rápido quanto o RAID-0 na leitura normal (sem leitura de paridade nos dois discos de paridade) e ainda é tolerante a falhas em caso de perda de um membro da matriz. ;-)
fonte
Pessoalmente, acho que o teste final de um sistema RAID é como ele pode suportar falhas. Nesse caso, o RAID5 e o RAID1 podem lidar com falhas de unidade única, mas nenhum deles sobreviverá mais do que isso.
Quanto à sua pergunta sobre o bit de paridade, acho que depende dos drivers RAID. Definitivamente, será lido durante a reconstrução, mas no uso normal, não faria muito sentido fazê-lo, pois a largura de banda seria desperdiçada.
fonte
afaik, eu não sou profissional de armazenamento 24/7, o controlador sempre verifica o que está gravado e lido nos discos. ou seja, com o raid1, você tem gravações um pouco piores do que em um único disco, mas suas leituras são um pouco mais rápidas (precisam gravar um arquivo em dois discos, mas podem ler uma parte do disco um e a outra parte do disco dois).
Talvez você possa desativar a verificação de dados para um nível de invasão, mas qual é o objetivo disso? Todos os níveis de invasão (exceto 0) existem para fornecer redundância de dados.
Com o RAID 5, você precisa de pelo menos 3 discos e pode usar discos N-1 para dados. Com o RAID 1, você sempre precisa de um número par de discos e pode usar discos N / 2 para dados.
Assim, em ataques maiores, o nível 5 oferece mais armazenamento, enquanto o ataque 1 oferece mais redundância.
Se por mais robusto você quer dizer que oferece mais redundância, então é o ataque 1.
Dependendo do tamanho da invasão, você também deve considerar o tempo de reconstrução em caso de erro (quantos discos existem, qual o tamanho de um disco, que tipo de invasão (soft, fake, hardware)), qual nível etc. )
Portanto, não é realmente possível dizer que um ataque é mais robusto que outro (talvez o ataque 6 seja sempre mais robusto que o ataque 5, com o custo de perder espaço de armazenamento)
fonte