MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como fazer backup e restaurar o ClusterControl


ClusterControl 1.7.1 introduziu um novo recurso que permite fazer backup de seu servidor ClusterControl e restaurá-lo (junto com metadados sobre seus bancos de dados gerenciados) em outro servidor. Ele faz backup do aplicativo ClusterControl, bem como de todos os seus dados de configuração. Migrar o ClusterControl para um novo servidor costumava ser uma dor, mas não é mais.

Esta postagem do blog orienta você por esse novo recurso.

Iremos migrar o ClusterControl de um servidor para outro, preservando todas as configurações e ajustes.

Também mostraremos como transferir o gerenciamento de um cluster de uma instância do ClusterControl para outra.

Nossa arquitetura de exemplo começou com dois clusters de produção (mostrado na captura de tela abaixo):
  • ID do cluster 1:3 nós Galera (PXC) + 1 HAProxy + 1 ProxySQL (5 nós)
  • ID do cluster 2:1 MySQL master + 2 MySQL slaves + 1 ProxySQL (4 nós)

Introdução


ClusterControl CLI (s9s) é uma ferramenta de interface de linha de comando para interagir, controlar e gerenciar clusters de banco de dados usando a Plataforma ClusterControl. A partir da versão 1.4.1, o script do instalador instalará automaticamente este pacote no nó ClusterControl.

Existem basicamente 4 novas opções introduzidas no comando "s9s backup", que podem ser usadas para atingir nosso objetivo:
Sinalização Descrição
--save-controller Salva o estado do controlador em um tarball.
--restore-controller Restaura todo o controlador de um tarball criado anteriormente (criado usando o --save-controller
--save-cluster-info Salva as informações que o controlador tem sobre um cluster.
--restore-cluster-info Restaura as informações que o controlador tem sobre um cluster de um arquivo morto criado anteriormente.

Esta postagem de blog abordará casos de uso de exemplo sobre como utilizar essas opções. No momento, eles estão em estágio de release candidate e estão disponíveis apenas através da ferramenta ClusterControl CLI.

Fazendo backup do ClusterControl


Para fazer isso, o servidor ClusterControl deve estar pelo menos na v1.7.1 e posterior. Para fazer backup do controlador ClusterControl, basta executar o seguinte comando no nó ClusterControl como usuário root (ou com sudo):
$ s9s backup \
--save-controller \
--backup-directory=$HOME/ccbackup \
--output-file=controller.tar.gz \
--log

O --output-file deve ser um nome de arquivo ou caminho físico (se você quiser omitir o sinalizador --backup-directory), e o arquivo não deve existir antes. O ClusterControl não substituirá o arquivo de saída se ele já existir. Ao especificar --log, ele aguardará até que o trabalho seja executado e os logs de trabalho serão mostrados no terminal. Os mesmos logs podem ser acessados ​​via ClusterControl UI em Activity -> Jobs -> Save Controller :

O trabalho 'Salvar Controlador' basicamente executa os seguintes procedimentos:
  1. Recupere a configuração do controlador e exporte-a para JSON
  2. Exportar banco de dados CMON como arquivo de despejo MySQL
  3. Para cada cluster de banco de dados:
    1. Recupere a configuração do cluster e exporte-a para JSON

Na saída, você pode notar que o trabalho encontrado é N + 1 cluster, por exemplo "Encontrou 3 cluster(s) para salvar", mesmo que tenhamos apenas dois clusters de banco de dados. Isso inclui o ID de cluster 0, que tem um significado especial no ClusterControl como o cluster inicializado global. No entanto, ele não pertence ao componente CmonCluster, que é o cluster de banco de dados sob o gerenciamento do ClusterControl.

Restaurando o ClusterControl para um novo ClusterControl Server


Supondo que o ClusterControl já esteja instalado no novo servidor, gostaríamos de migrar os clusters de banco de dados para serem gerenciados pelo novo servidor. O diagrama a seguir ilustra nosso exercício de migração:

Em primeiro lugar, transfira o backup do servidor antigo para o novo servidor:
$ scp $HOME/ccbackup/controller.tar.gz 192.168.0.190:~

Antes de realizar a restauração, precisamos configurar o SSH sem senha para todos os nós do novo servidor ClusterControl:
$ ssh-copy-id 192.168.0.11 #proxysql cluster 1
$ ssh-copy-id 192.168.0.12 #proxysql cluster 1
$ ssh-copy-id 192.168.0.21 #pxc cluster 1
$ ssh-copy-id 192.168.0.22 #pxc cluster 1
$ ssh-copy-id 192.168.0.23 #pxc cluster 1
$ ssh-copy-id 192.168.0.30 #proxysql cluster 2
$ ssh-copy-id 192.168.0.31 #mysql cluster 2
$ ssh-copy-id 192.168.0.32 #mysql cluster 2
$ ssh-copy-id 192.168.0.33 #mysql cluster 2

Em seguida, no novo servidor, execute a restauração:
$ s9s backup \
--restore-controller \
--input-file=$HOME/controller.tar.gz \
--debug \
--log

Em seguida, temos que sincronizar o cluster na interface do usuário acessando Configurações globais -> Registros de cluster -> Sincronizar cluster . Então, se você voltar ao painel principal do ClusterControl, verá o seguinte:

Não entrar em pânico. A nova interface do usuário do ClusterControl não pode recuperar os dados de monitoramento e gerenciamento devido ao token de API RPC incorreto. Só precisamos atualizá-lo de acordo. Primeiro, recupere o valor rpc_key para os respectivos clusters:
$ cat /etc/cmon.d/cmon_*.cnf | egrep 'cluster_id|rpc_key'
cluster_id=1
rpc_key=8fgkzdW8gAm2pL4L
cluster_id=2
rpc_key=tAnvKME53N1n8vCC

Na interface do usuário, clique no link "aqui" na linha "Alterar o token da API RPC aqui". Irá aparecer a seguinte caixa de diálogo:

Cole o respectivo valor rpc_key no campo de texto e clique em Salvar. Repita para o próximo cluster. Aguarde um momento e a lista de clusters deve ser atualizada automaticamente.

A última etapa é corrigir os privilégios de usuário do MySQL cmon para as novas alterações de endereço IP do ClusterControl, 192.168.0.190. Faça login em um dos nós PXC e execute o seguinte:
$ mysql -uroot -p -e 'GRANT ALL PRIVILEGES ON *.* TO [email protected]"192.168.0.190" IDENTIFIED BY "<password>" WITH GRANT OPTION';

** Substitua por uma senha MySQL cmon idêntica à do valor mysql_password dentro de /etc/cmon.cnf. Repita a mesma etapa no segundo cluster, replicação do MySQL, mas execute-a apenas uma vez no nó mestre.

Depois que o privilégio estiver configurado, você verá que a lista de clusters está em verde, semelhante à antiga:

Vale ressaltar que, por padrão, o ClusterControl desabilitará a recuperação automática do cluster (como você pode ver o ícone vermelho ao lado da palavra 'Cluster') para evitar a condição de corrida com outra instância do ClusterControl. É recomendável habilitar esse recurso (clicando no ícone verde) assim que o servidor antigo for desativado.

Nossa migração está concluída. Todas as configurações e configurações do servidor antigo são preservadas e transferidas para o novo servidor.

Migrando o gerenciamento de um cluster para outro servidor ClusterControl

Fazendo backup das informações do cluster


Trata-se de fazer backup de metadados e informações do cluster para que possamos transferi-los para outro servidor ClusterControl, também conhecido como backup parcial. Caso contrário, temos que executar "Importar Servidor/Cluster Existente" para reimportá-los para o novo ClusterControl, o que significa que você perderia os dados de monitoramento do servidor antigo. Se você tiver balanceadores de carga ou instâncias escravas assíncronas, isso deverá ser importado assim que o cluster for importado, um nó por vez. Portanto, é um pouco incômodo se você tiver um conjunto completo de configuração de produção.

O exercício de migração do "gerente" do cluster é ilustrado no diagrama a seguir:

Basicamente, queremos migrar nossa Replicação MySQL (ID do cluster:2) para ser gerenciada por outra instância do ClusterControl. Vamos usar as opções --save-cluster-info e --restore-cluster-info para este. A opção --save-cluster-info exportará as informações de cluster correspondentes para serem salvas em outro lugar. Vamos exportar nosso MySQL Replication Cluster (ID do cluster:2). No servidor ClusterControl atual, faça:
$ s9s backup \
--save-cluster-info \
--cluster-id=2 \
--backup-directory=$HOME/ccbackup \
--output-file=cc-replication-2.tar.gz \
--log

Você verá várias novas linhas impressas no terminal, indicando que o trabalho de backup está sendo executado (a saída também pode ser acessada via ClusterControl -> Activity -> Jobs ):

Se você observar os logs de trabalho com atenção, perceberá que o trabalho estava tentando exportar todas as informações e metadados relacionados para o ID de cluster 2. A saída é armazenada como um arquivo compactado e localizada no caminho que especificamos usando --backup -sinalizador de diretório. Se este sinalizador for ignorado, o ClusterControl salvará a saída no diretório de backup padrão, que é o diretório inicial do usuário SSH, em $HOME/backups.

Restaurando informações do cluster


As etapas explicadas aqui são semelhantes às etapas de restauração do backup completo do ClusterControl. Transfira o backup do servidor atual para o outro servidor ClusterControl:
$ scp $HOME/ccbackup/cc-replication-2.tar.gz 192.168.0.190:~

Antes de realizar a restauração, precisamos configurar o SSH sem senha para todos os nós do novo servidor ClusterControl:
$ ssh-copy-id 192.168.0.30 #proxysql cluster 2
$ ssh-copy-id 192.168.0.31 #mysql cluster 2
$ ssh-copy-id 192.168.0.32 #mysql cluster 2
$ ssh-copy-id 192.168.0.33 #mysql cluster 2
$ ssh-copy-id 192.168.0.19 #prometheus cluster 2

Em seguida, no novo servidor, execute a restauração das informações do cluster para nossa Replicação MySQL:
$ s9s backup \
--restore-cluster-info \
--input-file=$HOME/cc-replication-2.tar.gz \
--log

Você pode verificar o progresso em Atividade -> Trabalhos -> Restaurar cluster :

Se você observar atentamente as mensagens de trabalho, poderá ver que o ClusterControl reatribui automaticamente o ID do cluster a 1 nesta nova instância (era o ID do cluster 2 na instância antiga).

Em seguida, sincronize o cluster na interface do usuário acessando Configurações globais -> Registros de cluster -> Sincronizar cluster . Se você voltar ao painel principal do ClusterControl, verá o seguinte:

O erro significa que a nova IU do ClusterControl não consegue recuperar os dados de monitoramento e gerenciamento devido ao token de API RPC incorreto. Só precisamos atualizá-lo de acordo. Em primeiro lugar, recupere o valor rpc_key para nosso ID de cluster 1:
$ cat /etc/cmon.d/cmon_1.cnf | egrep 'cluster_id|rpc_key'
cluster_id=1
rpc_key=tAnvKME53N1n8vCC

Na interface do usuário, clique no link "aqui" na linha "Alterar o token da API RPC aqui". Irá aparecer a seguinte caixa de diálogo:

Cole o respectivo valor rpc_key no campo de texto e clique em Salvar. Aguarde um momento e a lista de clusters deve ser atualizada automaticamente.

A última etapa é corrigir os privilégios de usuário do MySQL cmon para as novas alterações de endereço IP do ClusterControl, 192.168.0.190. Faça login no nó mestre (192.168.0.31) e execute a seguinte instrução:
$ mysql -uroot -p -e 'GRANT ALL PRIVILEGES ON *.* TO [email protected]"192.168.0.190" IDENTIFIED BY "<password>" WITH GRANT OPTION';

** Substitua por uma senha MySQL cmon idêntica à do valor mysql_password dentro de /etc/cmon.cnf.

Você também pode revogar os privilégios do usuário antigo (revogar não excluirá o usuário) ou simplesmente descartar o usuário antigo:
$ mysql -uroot -p -e 'DROP USER [email protected]"192.168.0.19"'

Depois que o privilégio estiver configurado, você verá que tudo está verde:

Neste ponto, nossa arquitetura está mais ou menos assim:

Nosso exercício de migração está concluído.

Considerações finais


Agora é possível realizar backups completos e parciais de suas instâncias ClusterControl e dos clusters que elas gerenciam, permitindo que você as mova livremente entre hosts com pouco esforço. Sugestões e comentários são bem-vindos.