Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como implantar o Percona XtraDB Cluster 8 para alta disponibilidade

Percona XtraDB Cluster 8.0 é baseado no Percona Server para MySQL 8.0 incorporado com API de replicação de conjunto de escrita Galera e biblioteca de replicação Galera, para formar uma replicação multimestre altamente disponível para servidor de banco de dados baseado em MySQL. O Percona XtraDB Cluster vem com o mecanismo de armazenamento XtraDB (uma substituição imediata do InnoDB) e segue muito de perto as versões upstream do Oracle MySQL (incluindo todas as correções de bugs), com algumas variáveis ​​adicionais e status específicos para esta compilação.

Nesta postagem de blog, veremos como implantar um Percona XtraDB Cluster 8.0 para alta disponibilidade usando o modo manual e automatizado.

Recursos notáveis


Antes de prosseguirmos com as etapas de implantação, vale a pena mencionar recursos notáveis ​​e melhorias significativas nesta versão principal que é baseada no Percona Server para MySQL 8.0 (sem plugin de replicação de grupo) e Galera 4:
  • Replicação de streaming - permite que a replicação do conjunto de gravações processe grandes transações de dados em fragmentos menores e mais gerenciáveis, minimizando conflitos de dados.
  • As funções de sincronização do MySQL para coordenação de ações (wsrep_last_seen_gtid, wsrep_last_written_gtid, wsrep_sync_wait_upto_gtid).
  • Novas tabelas de sistema Galera, que ajudarão a monitorar o estado do cluster sob o esquema "mysql" - wsrep_cluster, wsrep_cluster_members e wsrep_streaming_log.
  • Criptografia Gcache.
  • A infraestrutura wsrep do Galera 4 é mais robusta que a do Galera 3. Ela apresenta uma execução mais rápida de código com melhor manipulação de estado, previsibilidade e manipulação de erros aprimoradas.

Para obter uma lista completa de alterações, confira as notas de versão.

Implantação manual do Percona XtraDB Cluster 8.0

Etapas de instalação


Para o cluster Percona XtraDB, precisamos de pelo menos três nós:
  • db1 (192.168.20.61)
  • db2 (192.168.20.62)
  • db3 (192.168.20.63)

As etapas descritas nesta seção devem ser executadas em todos os nós do banco de dados (db1, db2 e db3) em execução no CentOS 8. Primeiro, desabilite o SELinux (caso contrário, o processo IST falharia):
$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux

Instale o pacote de repositório Percona:

$ yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

A última versão estável neste momento é o Percona XtraDB Cluster 8.0, mas por padrão, o pacote de repositório é configurado até a versão 5.7. O pacote percona-release contém um script que pode habilitar repositórios adicionais para os produtos mais recentes. Vamos executar esse script e habilitar o repositório específico do pxc80:

$ percona-release setup pxc80
* Disabling all Percona Repositories

On RedHat 8 systems it is needed to disable dnf mysql module to install Percona-Server
Do you want to disable it? [y/N]

Escolha "y" para desabilitar o módulo mysql DNF. Isso é necessário para priorizar o repositório Percona para pacotes relacionados ao MySQL.

Em seguida, instale o Percona XtraDB Cluster e o Percona Xtrabackup mais recentes:

$ dnf -y install percona-xtradb-cluster percona-xtrabackup-80

Neste momento, você deve ter um Percona XtraDB Cluster 8.0.0-11.3 instalado. Todos os pacotes de dependência serão instalados como pacotes compartilhados, compartilhados e clientes. Podemos então iniciar o serviço MySQL para configuração inicial:

$ systemctl start mysql

Uma nova senha de root será gerada durante a primeira inicialização. Precisamos recuperar as informações de senha de root primeiro do log de erros do MySQL (o padrão é /var/log/mysqld.log em sistemas baseados em RHEL):

$ cat /var/log/mysqld.log | grep 'temporary password'
2020-11-27T06:53:05.929661Z 6 [Note] [MY-010454] [Server] A temporary password is generated for [email protected]: <eqo+jXNw2lk

Como você pode ver, a senha gerada é "

$ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:
LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Using existing password for root.
Estimated strength of the password: 100

Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

Estimated strength of the password: 100

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Success.

All done!

A senha de root gerada expirará imediatamente após o primeiro login de root. O script auxiliar acima nos ajuda a configurar uma nova senha de root do MySQL, definir a política de validação de senha, desabilitar o login remoto para root, remover banco de dados de teste e usuários anônimos e também recarregar as tabelas de privilégios.

O arquivo de configuração padrão (/etc/my.cnf) é configurado com uma string de conexão gcomm:// vazia na variável wsrep_cluster_address, conforme mostrado abaixo:
wsrep_cluster_address=gcomm://

A linha acima deve ser definida com uma lista de endereços IP de todos os nós participantes do cluster. Se você perder esta etapa, um novo cluster Galera será criado em cada nó (3 clusters separados de 1 nó) após o início do serviço em todos os nós. Portanto, as seguintes linhas devem ser modificadas de acordo com a seção [mysqld]:

wsrep_cluster_address=gcomm://192.168.20.51,192.168.20.52,192.168.20.53
wsrep_node_address=192.168.20.51 # IP address of this DB host
wsrep_node_name=db1 # any name to identify this DB host
pxc-encrypt-cluster-traffic=OFF

Espere que wsrep_cluster_address seja idêntico em todos os hosts de banco de dados, enquanto wsrep_node_address e wsrep_node_name devem ser distintos em cada host de banco de dados. A última linha pxc-encrypt-cluster-traffic=OFF significa que gostaríamos de desabilitar a criptografia para o tráfego do cluster. Observe que isso é intencional para simplificar nossas etapas de implantação ou, caso contrário, teríamos que executar etapas de gerenciamento de chave/certificado. Se você quiser habilitar a criptografia, consulte este artigo.

Repita as etapas acima para os nós de banco de dados restantes antes de prosseguir com a inicialização do cluster.

Bootstrapping de cluster


O Galera requer que você inicie um nó em um cluster como um ponto de referência antes que os nós restantes possam se unir e formar o cluster. Esse processo é conhecido como bootstrap de cluster. Bootstrapping é uma etapa inicial para introduzir um nó de banco de dados como o componente principal antes que outros o vejam como um ponto de referência para sincronizar dados.

Neste exemplo, vamos usar db1 como o nó de referência e iniciá-lo com o comando bootstrap (você também pode escolher outros nós, já que este é um novo cluster sem dados):
$ systemctl stop mysql
$ systemctl start [email protected]
$ systemctl status [email protected]

Uma vez iniciado, podemos iniciar os outros nós (db2 e db3) com o comando start padrão (um nó por vez):

$ systemctl stop mysql
$ systemctl start mysql

Você pode verificar com a seguinte linha dentro de /var/log/mysqld.log:

2020-11-27T08:09:01.964152Z 2 [Note] [MY-000000] [WSREP] Synchronized with group, ready for connections

Neste ponto, nosso serviço Percona XtraDB Cluster foi iniciado e a implantação manual está concluída. Para obter mais informações sobre o processo de bootstrapping do Percona XtraDB Cluster, confira esta postagem do blog How to Bootstrap MySQL or MariaDB Galera Cluster.

Implantação automática com ClusterControl


Há duas maneiras de implantar um Percona XtraDB Cluster 8.0 usando o ClusterControl. Você pode usar o ClusterControl UI (GUI baseada na web) ou ClusterControl CLI chamado s9s. Mostraremos as duas maneiras nesta seção. ClusterControl deve residir em um host separado, longe de seu cluster de banco de dados. Portanto, nossa arquitetura pode ser ilustrada assim:

Instalando o ClusterControl


SSH no servidor ClusterControl e instale o ClusterControl com os seguintes comandos:
$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 744 install-cc
$ ./install-cc

Siga o assistente de instalação até que a instalação termine. Após a conclusão da instalação, abra o navegador da Web e acesse http://192.168.20.19/clustercontrol . Crie um usuário administrador e a licença será instalada automaticamente. Todas as novas instalações vêm com uma licença de avaliação para edição corporativa por 30 dias. Quando esta licença de avaliação expirar, ela retornará à edição da comunidade, que é gratuita para sempre.

SSH sem senha


O ClusterControl requer que o SSH sem senha seja configurado do servidor ClusterControl para todos os nós gerenciados. Para conseguir isso, primeiro precisamos gerar uma chave SSH no servidor ClusterControl. O usuário SSH deve ter um privilégio de superusuário (sudo ou root). Neste caso, vamos usar o usuário root:
$ whoami
root

Agora gere uma chave SSH para o usuário root:

$ ssh-keygen -t rsa # press Enter on all prompts

Em seguida, copie a chave pública para todos os nós do banco de dados que vamos implantar e gerenciar. Neste caso, todos os 3 nós Galera:

$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]

Digite a senha de root dos respectivos hosts quando solicitado.

Teste-o com o seguinte comando e certifique-se de obter uma resposta correta:

$ ssh [email protected] "ls /root"

Agora estamos prontos para implantar nosso cluster usando o ClusterControl UI ou CLI, conforme mostrado nas próximas seções.

Implantação de PXC usando a interface de usuário do ClusterControl


É praticamente fácil implantar um cluster Percona XtraDB com ClusterControl e, por padrão, o ClusterControl configurará o cluster com a criptografia Galera habilitada. Depois que o SSH sem senha for configurado, vá para ClusterControl -> Deploy -> MySQL Galera e especifique os detalhes necessários conforme abaixo:

Em seguida, clique em "Continuar" para prosseguir para a próxima etapa onde configuramos a especificação do MySQL:

Escolha "Percona" para o fornecedor e 8.0 como a versão. Mantenha o resto como padrão e digite a senha de root do MySQL. Especifique o endereço IP ou o nome do host dos hosts do banco de dados um por um e certifique-se de obter os ícones verdes após cada inserção. Isso indica que o ClusterControl é capaz de alcançar os hosts correspondentes via SSH sem senha com o usuário e a chave SSH fornecidos conforme definido na etapa 1. Clique no botão "Implantar" para iniciar a implantação.

ClusterControl então aciona um trabalho de implantação onde você pode monitorar o progresso da implantação indo para ClusterControl -> Activity -> Jobs -> Create Cluster -> Full Job Details, conforme mostrado na captura de tela a seguir:

Quando o processo for concluído, você verá que o cluster está listado no Painel :

É isso. A implantação agora está concluída.

Implantação de PXC usando CLI do ClusterControl


Se você preferir implantar o cluster usando a linha de comando, podemos simplesmente usar a ferramenta cliente de linha de comando ClusterControl chamada "s9s". Essa ferramenta enviará um trabalho de implantação para o controlador ClusterControl e executará todas as etapas necessárias para implantar o cluster.

Execute o seguinte comando no servidor ClusterControl:
$ s9s cluster --create \
--cluster-type=galera \
--nodes="192.168.20.51;192.168.20.52;192.168.20.53" \
--vendor=percona \
--provider-version=8.0 \
--db-admin-passwd='P4ssw0rdSecr3t' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='My Percona XtraDB Cluster 8.0' \
--log

Você verá que as mensagens de trabalho devem aparecer e você pode monitorar o progresso da implantação lá e também pode monitorar o progresso do trabalho de ClusterControl UI -> Activity -> Jobs . Aguarde de 15 a 20 minutos (dependendo da conexão com a Internet) até ver a notificação de conclusão do trabalho. Nosso Percona XtraDB Cluster 8.0 agora está implantado e você pode vê-lo listado na interface do usuário do ClusterControl.