Restaurando vários snapshots do EBS para volumes maiores em um único volume lógico

2

A situação: nós temos um servidor MySQL no AWS usando três volumes do EBS em um volume lógico distribuído para armazenar os dados do banco de dados. O volume lógico está quase cheio, então precisamos expandi-lo de alguma forma. Uma opção seria relançar o servidor e anexar novos volumes EBS maiores e, em seguida, restaurar a partir de um instantâneo existente do servidor antigo. (Nós precisaremos fazer isso eventualmente da próxima vez que precisarmos substituir o servidor por outras razões, e é por isso que estou pulando as opções que mudam o servidor existente no local.)

Minha pergunta é: se temos três snapshots do EBS de (digamos) 50 GB cada um que compõem o volume lógico, posso restaurar esses snapshots para um novo servidor com três volumes do EBS maiores (digamos, 75 GB ou 100 GB ou tanto faz)? Ou isso é uma receita para o desastre? Há alguma medida especial que eu precise para assumir o nosso processo atual? Se, em vez disso, eu quisesse adicionar um quarto volume de 50 GB do EBS, eu poderia restaurar os três instantâneos para o novo grupo de quatro volumes?

    
por wesley.fok 23.11.2018 / 19:46

2 respostas

4

Você pode simplesmente aumentar o tamanho do volume atual ( mais detalhes aqui ). Eu sei que você disse que você descontou essa opção porque precisará de uma nova instância, mas pode facilmente montar esses mesmos volumes em uma nova instância. Se você precisar que as instâncias antigas e novas funcionem ao mesmo tempo sem interrupção (você não disse), isso não funcionará.

NB: estou explicitamente não vou copiar uma grande página da web para aqui. A documentação da AWS é razoavelmente estável e atualizada regularmente. Não quero que respostas desatualizadas causem problemas.

Solução alternativa

Basta restaurar seus instantâneos para três novos volumes, montá-los em uma nova instância e usá-los.

    
por 23.11.2018 / 20:23
3

Como é o LVM, o Volume Lógico pode ser estendido simplesmente adicionando mais discos ( Volumes Físicos = volumes EBS) ao Grupo de Volumes .

  1. Crie uma AMI a partir do seu servidor atual, para que você tenha um caminho de volta se as coisas derem errado.
  2. Crie 3 novos volumes do EBS (por exemplo, 3x 50 GB)
  3. Crie uma partição LVM em cada uma delas e pvcreate da partição
  4. Adicione os volumes ao Grupo de volumes usando vgextend
  5. Estenda o volume lógico do MySQL com lvresize e depois estenda o sistema de arquivos (depende do seu tipo de fs, por exemplo, resize2fs ).
  6. Feito.

Você pode tentar expandir os volumes atuais do EBS ao invés de adicionar 3 novos, mas então você ainda precisará expandir todas as partições, atualizar o VG, expandir o LV e redimensionar o sistema de arquivos. É um pouco mais propenso a um erro, mas deve funcionar da mesma forma.

O benefício de usar vários volumes do EBS é que a largura de banda de IOPS é por volume. Ou seja mais volumes fornecem mais largura de banda de E / S. Pode não ser relevante se o seu servidor MySQL é apenas levemente carregado, mas ainda é bom saber.

Ou use o Amazon Aurora no lugar

Se eu fosse você, migraria seu banco de dados para Amazon Aurora , que é um Banco de dados gerenciado compatível com o MySQL. Não há praticamente necessidade de executar o MySQL auto-gerenciado no EC2, a menos que você faça algo muito especial. Com Aurora você terá:

  • Gerenciamento automático de espaço em disco (não há mais falta de espaço, não há mais gerenciamento de volumes do EBS)
  • Correção automática de SO e MySQL
  • Failover automático em caso de falha do host físico subjacente (como você lida com isso na sua instância atual?)
  • Backups automáticos com recuperação point-in-time (ótimo se você acidentalmente TRUNCATE wrong_table_oops; ;)
  • Tudo isso enquanto fornece quase 100% de compatibilidade com o padrão de estoque MySQL

Eu migrei muitos bancos de dados MySQL para o Aurora e, em quase todos os casos, era tão simples quanto mysqldump do banco de dados antigo e carreguei isso no Aurora (alternativamente use AWS DMS ) e altere o nome do host do banco de dados no aplicativo. Simples assim e você economizará muita sobrecarga de gerenciamento MySQL daqui para frente.

Espero que ajude:)

    
por 23.11.2018 / 23:47