RAIDing com LVM vs MDRAID - prós e contras?

51

Em sua resposta à pergunta "tipos de ataque misto" , HBruijn sugere o uso do LVM para implementar o RAID vs o MDRAID mais padrão.

Após uma pequena investigação, parece que o LVM também suporta a funcionalidade RAID. No passado, eu usei o LVM em cima do MDRAID e não sabia até agora que o LVM também suporta a funcionalidade RAID. Este parece ser um desenvolvimento relativamente recente, mas ainda não descobri exatamente quando isso foi implementado.

Portanto, essas são maneiras alternativas de implementar o RAID de software no Linux. Quais são os prós e os contras dessas duas abordagens diferentes? Estou procurando comparações de recursos entre as duas abordagens para que as pessoas possam decidir qual é melhor para elas. Conclusões baseadas em experimentação (como em, esse recurso não funciona tão bem quanto esse recurso e aqui está o porquê) também são válidas, desde que você inclua seus dados na resposta.

Alguns problemas específicos a serem abordados:

  1. Suponha que eu queira fazer swid RAID + LVM (um cenário comum). Devo usar o suporte do LVM para sw RAID e, portanto, usar um utilitário em vez de dois? Essa abordagem mais integrada tem vantagens?
  2. O suporte a LVMs para sw RAID tem deficiências significativas em comparação com o MDADM mais maduro? Especificamente, quão estável / livre de erros é o suporte LVM para sw RAID? Parece que esse suporte remonta apenas a 2011 (veja abaixo), enquanto o MDADM é muito mais antigo. Além disso, como ele se compara em termos de conjunto de recursos? Possui deficiências significativas de recursos em comparação com o MDADM? Por outro lado, ele oferece suporte a recursos RAID sw que o MDADM não possui?

NOTAS:

  1. Há uma discussão detalhada em http://www.olearycomputers.com/ll/linux_mirrors.html, mas não consegui descobrir em que data foi escrita.

    Pergunta semelhante sobre Serverfault: linux LVM mirror vs. MD mirror . No entanto, essa pergunta foi feita em 2010 e as respostas podem estar desatualizadas.

  2. A entrada do registro de alterações da versão 2.02.87 - 12 de agosto de 2011 foi

    Adicione configure --with-raid para o novo segtype 'raid' para suporte ao MD RAID 1/4/5/6

    Portanto, parece que o suporte a RAID no LVM tem cerca de 3 anos.

Faheem Mitha
fonte
Uma vantagem em que consigo pensar é usar funções relacionadas a HA disponíveis para LVM.
Bratchley
11
@JoelDavis Você pode elaborar? Não sei o que significam funções relacionadas a HA.
Faheem Mitha
Além disso, há a vantagem de trabalhar com volumes lógicos em vez de mdvolumes. Então você tem lvextende está pvmovedisponível para a movimentação entre dispositivos, enquanto que com mdo processo é muito mais manual sem benefícios claros.
Bratchley
@JoelDavis talvez escreva uma resposta?
Faheem Mitha
2
O LVM sempre suportou raid1 e raid0. Foi mais recentemente que eles abandonaram sua própria implementação e, em vez disso, usaram internamente o código de personalidade de ataque do md, abrindo os outros níveis de ataque.
Psusi

Respostas:

55

Qual é a maturidade e a funcionalidade do LVM RAID?

LVM-RAID é realmente mdraid debaixo das cobertas. Funciona basicamente criando dois volumes lógicos por dispositivo RAID (um para dados, chamado "rimage"; outro para metadados, chamado "rmeta"). Em seguida, passa-os para os drivers mdraid existentes. Portanto, coisas como lidar com erros de leitura de disco, balanceamento de carga de E / S etc. devem estar bem maduras.

Essa é a boa notícia.

Ferramentas

Você não pode usá mdadm-lo (pelo menos, não de maneira fácil¹) e as ferramentas LVM RAID não estão nem tão maduras. Por exemplo, no Debian Wheezy, lvsnão posso dizer o status da sincronização RAID5. Duvido muito que o reparo e a recuperação (especialmente de situações "o que nunca deveria acontecer!") Sejam tão bons quanto o mdadm (e acidentalmente encontrei um deles nos meus testes e finalmente desisti de recuperá-lo - recuperação com MDADM teria sido fácil).

Especialmente se você não estiver usando as versões mais recentes de todas as ferramentas, as coisas pioram.

Recursos ausentes

As versões atuais do LVM-RAID não suportam a redução ( lvreduce) de um volume lógico RAID. Eles também não suportam a alteração do número de discos ou do nível RAID ( lvconvertuma mensagem de erro informando que ainda não há suporte). lvextendfunciona e pode até aumentar os níveis de RAID aos quais recentemente tive suporte, como o RAID10. Na minha experiência, estender LVs é muito mais comum do que reduzi-los, então isso é realmente razoável.

Alguns outros recursos do mdraid não estão presentes e, especialmente, você não pode personalizar todas as opções possíveis com o mdadm.

Nas versões mais antigas (como encontradas, por exemplo, no Debian Wheezy), o LVM RAID também não suporta crescimento. Por exemplo, no Wheezy:

root@LVM-RAID:~# lvextend -L+1g vg0/root
Extending logical volume root to 11.00 GiB
Internal error: _alloc_init called for non-virtual segment with no disk space.

Em geral, você não deseja executar as versões do Wheezy.

O acima é uma vez que você instalá-lo. Esse também não é um processo trivial.

Problemas da ferramenta

Brincando com minha Jessie VM, desconectei (virtualmente) um disco. Isso funcionou, a máquina continuou funcionando. lvs, no entanto, não deu indicação de que as matrizes estavam degradadas. Voltei a conectar o disco e removi um segundo. Permaneceu em execução (este é o raid6). Reconectado, ainda não há indicação de lvs. Corri lvconvert --repairno volume, ele me disse que estava tudo bem. Então eu puxei um terceiro disco ... e a máquina morreu. Reinsira-o, reinicie-o e agora não tenho certeza de como corrigir. mdadm --force --assembleconsertaria isso; nem vgchangenem lvchangeparece ter essa opção (lvchange aceita --force, mas não parece fazer nada). Mesmo tentando dmsetupalimentar diretamente a tabela de mapeamento no kernel, não consegui descobrir como recuperá-lo.

Além disso, mdadmé uma ferramenta dedicada apenas para gerenciar RAID. O LVM faz muito mais, mas parece (e admito que isso é bastante subjetivo) que a funcionalidade RAID foi meio que empurrada para lá; não se encaixa bem.

Como você realmente instala um sistema com LVM RAID?

Aqui está um breve resumo de como instalá-lo no Debian Jessie ou Wheezy. Jessie é muito mais fácil; observe se você vai tentar isso no Wheezy, leia tudo primeiro…

  1. Use uma imagem de CD completa para instalar, não uma imagem netinst.

  2. Prossiga normalmente, acesse o particionamento de disco, configure seus volumes físicos do LVM. Você pode colocar o /bootLVM-RAID (no Jessie e no Wheezy com alguns trabalhos detalhados abaixo).

  3. Crie seu (s) grupo (s) de volumes. Deixe-o no menu LVM.

  4. Primeiro divertido: o instalador não tem o dm-raid.komódulo carregado ou disponível! Então você pode pegá-lo no pacote linux-image que será instalado. Alterne para um console (por exemplo, Alt- F2) e:

    cd /tmp
    dpkg-deb --fsys-tarfile /cdrom/pool/main/l/linux/linux-image-*.deb | tar x
    depmod -a -b /tmp
    modprobe -d /tmp dm-raid
    
  5. O instalador não sabe como criar LVM-RAID LVs, então você precisa usar a linha de comando para fazer isso. Observe que eu não fiz nenhum benchmarking; o tamanho da faixa ( -I) abaixo é totalmente um palpite para a minha configuração da VM:

    lvcreate --type raid5 -i 4 -I 256 -L 10G -n root vg0
    
  6. Em Jessie, você pode usar o RAID10 para troca. No Wheezy, o RAID10 não é suportado. Portanto, você pode usar duas partições de troca, cada RAID1. Mas você precisa dizer exatamente em quais volumes físicos os colocar ou coloca as duas metades do espelho no mesmo disco . Sim. A sério. De qualquer forma, isso se parece com:

    lvcreate --type raid1 -m1 -L 1G -n swap0 vg0 /dev/vda1 /dev/vdb1
    lvcreate --type raid1 -m1 -L 1G -n swap1 vg0 /dev/vdc1 /dev/vdd1
    
  7. Por fim, volte ao instalador e pressione 'Concluir' no menu LVM. Agora você será apresentado a vários volumes lógicos. Esse é o instalador que não entende o que está acontecendo; ignore tudo com rimageou rmetaem seu nome (veja o primeiro parágrafo acima para obter uma explicação do que são).

  8. Vá em frente e crie sistemas de arquivos, troque partições, etc. normalmente. Instale o sistema base, etc., até chegar ao prompt do grub.

  9. No Jessie, o grub2 funcionará se instalado no MBR (ou provavelmente com o EFI, mas ainda não testei). No Wheezy, a instalação falhará e a única solução é fazer o backport do grub2 de Jessie. Isso é realmente bastante fácil, ele compila de forma limpa no Wheezy. De alguma forma, obtenha seus pacotes grub com backport /target(ou faça isso em um segundo, após o chroot) e:

    chroot /target /bin/bash
    mount /sys
    dpkg -i grub-pc_*.deb grub-pc-bin_*.deb grub-common_*.deb grub2-common_*.deb 
    grub-install /dev/vda … grub-install /dev/vdd # for each disk
    echo 'dm_raid' >> /etc/initramfs-tools/modules
    update-initramfs -kall -u
    update-grub # should work, technically not quite tested²
    umount /sys
    exit
    
  10. Na verdade, no meu mais recente Jessie VM o grub-install travou. Mudar para F2 e fazer while kill $(pidof vgs); do sleep 0.25; done, seguido pelo mesmo para lvs, conseguiu através do grub-install. Ele apareceu para gerar uma configuração válida, apesar disso, mas apenas no caso eu fiz um chroot /target /bin/bash, certificou-se /proce /sysforam montadas, e fez um update-grub. Naquele tempo, completou. Fiz então um dpkg-reconfigure grub-pcpara selecionar a instalação do grub nos MBRs de todos os discos virtuais.

  11. No Wheezy, depois de fazer o acima, selecione 'continuar sem um gerenciador de inicialização'.

  12. Conclua a instalação. Vai arrancar. Provavelmente.

Conhecimento da comunidade

Há um número razoável de pessoas que conhecem mdadme têm muita experiência em implantação. É provável que o Google responda à maioria das perguntas sobre o assunto. Geralmente, você pode esperar uma pergunta sobre o assunto aqui para obter respostas, provavelmente dentro de um dia.

O mesmo não pode ser dito para o LVM RAID. É difícil encontrar guias. A maioria das pesquisas do Google que eu realizava me ensinou a usar matrizes mdadm como PVs. Para ser honesto, isso provavelmente ocorre principalmente porque é mais recente e menos usado. De certa forma, parece injusto manter isso contra isso - mas se algo der errado, a comunidade existente muito maior em torno do mdadm tornará mais provável a recuperação dos meus dados.

Conclusão

O LVM-RAID está avançando rapidamente. No Wheezy, ele não é realmente utilizável (pelo menos, sem fazer backports do LVM e do kernel). No início de 2014, nos testes do Debian, parecia uma ideia interessante, mas inacabada. Os testes atuais, basicamente o que se tornará Jessie, parecem algo que você realmente pode usar, se frequentemente precisar criar pequenas fatias com diferentes configurações de RAID (algo que é um pesadelo administrativo mdadm).

Se suas necessidades forem atendidas adequadamente por algumas matrizes RAID mdadm grandes, divididas em partições usando LVM, sugiro continuar usando isso. Se, em vez disso, você tiver que criar muitas matrizes (ou mesmo matrizes de volumes lógicos), considere alternar para LVM-RAID. Mas mantenha bons backups.

Muitos dos usos do LVM RAID (e até do mdadm RAID) estão sendo adotados por coisas como armazenamento em cluster / sistemas de objetos, ZFS e btrfs. Eu recomendo também investigar aqueles, eles podem atender melhor às suas necessidades.


Obrigado

Gostaria de agradecer à psusi por me fazer revisitar o estado do LVM-RAID e atualizar esta publicação.

Notas de rodapé

  1. Suspeito que você possa usar o mapeador de dispositivos para colar os metadados e dados de uma maneira que mdadm --assembleos leve a sério. Claro, você pode rodar mdadmem volumes lógicos muito bem ... e isso seria mais saudável.

  2. Ao fazer a instalação do Wheezy, não consegui fazer isso pela primeira vez e acabei sem nenhuma configuração do grub. Eu tive que inicializar o sistema digitando todas as informações no prompt do grub. Uma vez inicializado, funcionou, então acho que funcionará bem no instalador. Se você terminar no prompt do grub, aqui estão as linhas mágicas para digitar:

    linux /boot/vmlinuz-3.2.0-4-amd64 root=/dev/mapper/vg0-root
    initrd /boot/initrd.image-3.2.0-4-amd64
    boot
    

PS: Já faz um tempo desde que eu realmente fiz os experimentos originais. Fiz minhas anotações originais disponíveis. Observe que agora fiz outras mais recentes, abordadas nesta resposta, e não nessas anotações.

derobert
fonte
2
Na verdade, você está recebendo esse erro devido à versão do lvm in wheezy ser extremamente antiga e com erros; ele funciona muito bem para mim aqui no Ubuntu 14.04 com lvm versão 2.02.98 (acredito que Jessie seja pelo menos essa novidade). Em segundo lugar, o comando que você mostrou falhando é um redimensionamento - remodelar é algo completamente diferente. Remodelar significa mudar de raid1 para raid5 ou de 3 discos RAID5 para 4 discos RAID5. Isso ainda não é suportado, mas simplesmente alterar o tamanho funciona bem.
Psusi
@psusi Ah, eu pensei que eles consideravam o redimensionamento uma reformulação também (uma vez que altera a geometria do RAID, dada em nada tão próximo quanto a alteração do número de discos). Eu pensei que antes de receber um erro ao tentar Jessie também, vou testá-lo novamente. (É necessário criar uma nova VM Jessie LVM-RAID, para que demore um pouco.) Obrigado.
Derobert
dpkg-debfornece uma maneira mais limpa de extrair arquivos de pacotes deb, sem a necessidade de pular etapas.
Muru
O @muru está dpkg-debdisponível no ambiente do instalador? Não costumava ser ... Verifique também o Wheezy.
Derobert # 25/15
O @derobert também ar -xdeve funcionar para descompactar os arquivos deb, embora seja mais desajeitado. Além disso, que tal atualizar sua resposta com o status atual?
Faheem Mitha
7

Também não sabia que o LVM poderia fazer RAID. Pessoalmente, eu continuaria com o mdadm, pois é um software muito mais maduro que faz a mesma coisa. Se algo romper com o LVM RAID, você provavelmente não poderá obter tanto suporte quanto se tivesse usado o mdadm. Além disso, eu não confiaria no LVM RAID, já que o LVM demonstrou historicamente não ser o software mais robusto.

ZFS e BTRFS são o futuro. Os benefícios que eles oferecem vão além do que é possível na camada de blocos. A menos que eu busque compatibilidade, não usarei mais o LVM / mdadm. O ZFS e o BTRFS têm muitos recursos, como compactação, desduplicação e cópia na gravação, mas não vou abordar isso aqui, pois seria um pouco fora do escopo.

No final, faça sua pesquisa e use o que for mais adequado às suas necessidades / desejos.

Balas grátis
fonte
Obrigado pela resposta. Considere expandir um pouco sobre por que você não confia no LVM.
Faheem Mitha
2
"ZFS e BTRFS são o futuro" Não necessariamente. Que eu saiba, o ZFS no Linux ainda é baseado em FUSE, por isso é usado principalmente para obter recursos do ZFS sem usar o Solaris ou o FreeBSD. O BTRFS é incrível, mas não é necessariamente o futuro. Por exemplo, o Red Hat parece estar se movendo mais na direção do LVM+XFSque no BTRFS. Eles suportam BTRFS, mas isso é mais uma coisa do Oracle / SuSE.
Bratchley
Para não dizer que não gosto de btrfs por algum motivo (na verdade, gosto muito). É que não é a direção em que uma grande distribuição como a Red Hat está indo, e não consigo pensar em nada que o BTRFS possa fazer que o LVM / XFS não possa pelo menos aproximar-se razoavelmente bem.
Bratchley
Eu também diria que o BTRFS será bom, mas o LVM pode fazer muitas coisas que o BTRFS ainda não pode fazer (ainda). Por exemplo, você pode fazer volumes híbridos e capturas instantâneas de provisionamento dinâmico, nenhum dos quais (AFAIK) BTRFS pode fazer.
Bratchley
9
"Que eu saiba, o ZFS no Linux ainda é baseado em FUSE" isso está incorreto há mais de cinco anos. O ZoL é um módulo do kernel e totalmente pronto para produção. Eu tenho usado extensivamente desde o início de 2010.
Jim Salter