terça-feira, 4 de junho de 2013

PostgreSQL - Aumentando um LVM em RAID na AWS

   Hoje tive a experiência de aumentar um LVM com RAID0 na AWS, a situação foi que um PostgreSQL warm-standby parou de funcionar em função de não ter mais espaço no PGDATA para consumir WALs, então o pg_standby caiu. 

   Detalhes da situação:

1 - Instância apenas com uma tablespace;
2 - Sistema de arquivos em XFS; 
3 - 3 discos dedicados para o PGDATA em RAID0.

   Não vou dar grandes explicações, vamos ao procedimento:

1 - Adição do novo disco e vinculação a instância na Amazon;

2 - Adição do novo disco no array do RAID(mdadm --detail /dev/md0 ; mdadm --grow /dev/md0 --raid-devices=3 --add /dev/xvdi);

   Observe que no parâmetro '--raid-devices' você tem que preencher o número de discos/partições que seu RAID será composto. Em caso de dúvida rode um 'cat /proc/mdstat'.

IMPORTANTE: Considere neste passo o nível de RAID, pois alguns tipos de RAID não podem crescer sem que o novo disco fique em spare, então se este caso é o seu minha sugestão é criar um novo array de RAID e depois  vincular ao LVM, claro que para isso você precisará de mais discos. 

3 - Desativar o LVM(umount /var/lib/pgsql/data/ ; swapoff -a ; lvchange -an  /dev/vg_dados/lv_swap ; lvchange -an  /dev/vg_dados/lv_pgdata);

  Aqui desativei o LV do swap também, pois no mesmo LVM está a swap do sistema operacional, talvez isso não se aplica ao seu caso. 

4 - Aguardar até que o novo disco seja sincronizado com os demais(watch -n1 "mdadm --detail /dev/md0);

    Com este comando você verá o percentual de execução do sincronismo do novo disco do RAID, quando todos estiverem sincronizados vá para o passo 8. 

    Mentira, é o 5. 

5 - Após fazer um resize do LVM(pvresize /dev/md0 ; vgextend vg_dados /dev/md0 ; lvextend -L+120G /dev/vg_dados/lv_pgdata ; lvchange -ay /dev/vg_dados/lv_pgdata ; lvchange -ay /dev/vg_dados/lv_swap ; swapon -a);

   Aqui estou fazendo um resize no PV e LV, no parâmetro '-L' utilize o tamanho do seu novo HD do RAID. 

6 - Aumentar o XFS(xfs_growfs /dev/mapper/vg_dados-lv_pgdata);

   Como meu sistema de arquivos é XFS utilizei o comando acima. 

7 - Reparar o XFS(xfs_repair -v /dev/mapper/vg_dados-lv_pgdata ; mount -a);

   Quando tentei iniciar o PostgreSQL sem executar o passo atual, o pg_ctl retornou que não conseguia gravar o 'postmaster.pid' em função da estrutura não estar limpa, então procurando na Internet descobri que era coisa do sistema de arquivos, o comando corrente resolveu o problema. 

8 - Aguardar o PostgreSQL consumir os WALs(tail -f /var/log/pgsql.log); 

   Chegou a hora de subir o PGSQL, se tudo deu certo é só alegria. Que foi o meu caso, tomara que seja o seu leitor. 

Nenhum comentário:

Postar um comentário