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 é " 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]: 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. Uma vez iniciado, podemos iniciar os outros nós (db2 e db3) com o comando start padrão (um nó por vez): Você pode verificar com a seguinte linha dentro de /var/log/mysqld.log: 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. 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. Agora gere uma chave SSH para o usuário root: 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: Digite a senha de root dos respectivos hosts quando solicitado. Agora estamos prontos para implantar nosso cluster usando o ClusterControl UI ou CLI, conforme mostrado nas próximas seções. 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. Quando o processo for concluído, você verá que o cluster está listado no Painel : É isso. A implantação agora está concluída. $ 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://
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
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]
$ systemctl stop mysql
$ systemctl start mysql
2020-11-27T08:09:01.964152Z 2 [Note] [MY-000000] [WSREP] Synchronized with group, ready for connections
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
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
$ ssh-keygen -t rsa # press Enter on all prompts
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
Teste-o com o seguinte comando e certifique-se de obter uma resposta correta:
$ ssh [email protected] "ls /root"
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:
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:
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.