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:
- Recupere a configuração do controlador e exporte-a para JSON
- Exportar banco de dados CMON como arquivo de despejo MySQL
- Para cada cluster de banco de dados:
- 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
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
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.