ZFS no Linux e no Amazon EC2

5

Eu tenho uma situação em que preciso de espaço de armazenamento expansível dinamicamente em uma máquina Linux em execução no Amazon EC2, e o ZFS veio à mente. Se bem me lembro, o ZFS oferece suporte a uma maneira de expandir dinamicamente uma matriz semelhante a JBOD não redundante.

Eu tenho alguns requisitos para um projeto em que estou trabalhando:

  1. Eu seria capaz de mover a matriz para outra instância do EC2, se necessário.
  2. Eu deveria ser capaz de expandir dinamicamente o array ZFS, adicionando novas "drives" ao volume do ZFS sem qualquer tempo de inatividade.

Isso é possível? Se o ZFS oferecer a capacidade de expandir dinamicamente o array, eu conseguiria executar um script que criaria dinamicamente novos volumes do EBS, os anexaria à instância do EC2 e faria com que o ZFS os adicionasse ao seu pool, tudo dinamicamente, sem tempo de inatividade.

    
por Naftuli Kay 04.04.2013 / 08:09

2 respostas

6

O ZFS no Linux não tem uma massa crítica a seguir, seja qual for. O ZFS bloqueia você efetivamente. O formato subjacente é incompatível com os discos de recuperação e as distribuições para as quais você encontrará o ZFS são raras.

Eu tenderia a ignorar esses limites devido ao meu preconceito em relação ao ZFS. Talvez você queira pesquisar no Google por um provedor de serviços que forneça o suporte para nuvem baseado em SmartOS / ZFS.

Os sistemas de arquivos Linux ext3 / ext4 e provavelmente vários outros permitem crescimento dinâmico. O gerenciador de volume integrado ao Linux, o LVM, também permite expandir dinamicamente volumes para novos discos. Para qualquer coisa além de experimentação, essa teria que ser a melhor recomendação atual do Linux, embora isso mude uma vez que o ZFS tenha uma massa crítica seguindo o Linux.

O processo para o Linux + LVM + ext3 é:

Exemplo: o grupo de volume LVM myvg, o nome do volume montado uservol1 e o dispositivo de disco no Linux é / dev / sdf

  1. Aloque o disco para a VM. (no Amazon Management Console, Criar o volume do EBS, anote seu ID e aloque-o para a instância)
  2. A instância do EC2 deve ter algumas regras do udev para criar o dispositivo nó. Então você deve ver um novo disco em / dev / sd * ... Faça o login no instância e verifique se o volume do EBS é visível, por exemplo, fdisk -l / dev / sdf, cat / proc / partitions, executar blkid.
  3. Crie uma tabela de partições, se necessário: fdisk / sfdisk
  4. Inicializar para uso do LVM: pvcreate /dev/sdf
  5. Adicione o disco (volume físico) ao grupo de volumes LVM vgextend myvg /dev/sdf
  6. Aumentar o tamanho do volume: lvextend -L +1024G /dev/myvg/uservol1
  7. Cresça o sistema de arquivos ext3 / ext4: resize2fs /dev/myvg/uservol1
  8. Verifique ( df -h ) e você verá que o sistema de arquivos montado agora tem mais espaço.

QED.

    
por 04.04.2013 / 09:03
3

Sim, você pode definitivamente expandir automaticamente o array com o ZFS. Você só precisa definir a seguinte propriedade:

# zpool set autoexpand=on pool
# zpool set expandsize=on pool

Essas propriedades lhe trarão dois benefícios.

  1. Ao adicionar qualquer VDEV ao pool, ele será expandido automaticamente
  2. À medida que você substitui as unidades de 1 TB por unidades de 2 TB, quando todas as unidades forem substituídas, o pool será redimensionado automaticamente para acomodar os novos tamanhos de unidade.

Há algumas ressalvas:

  1. Você não pode remover uma unidade nem pode remover um VDEV do pool. Então, enquanto você pode cultivar sua piscina, você não pode reduzi-la. No entanto, você pode desanexar uma unidade somente de um espelho.
  2. Todas as unidades devem ter as mesmas especificações: mesmo tamanho, mesma velocidade, etc. A mesma marca e modelo não são necessários.
  3. Todos os VDEVs devem ser o mesmo VDEV. Se você tem um RAIDZ no seu pool, então todos os VDEVs devem ser o RAIDZ.
  4. Todos os VDEVs devem ter o mesmo tamanho. Se um VDEV é 2TB. Todos os VDEVs devem ter 2 TB.
por 07.05.2013 / 17:33