O MariaDB Cluster consiste no MariaDB Server com Galera Cluster e MariaDB MaxScale. Como solução de replicação multimestre, qualquer MariaDB Server com Galera Cluster pode operar como servidor primário. Isso significa que as alterações feitas em qualquer nó do cluster são replicadas para todos os outros nós do cluster, usando replicação baseada em certificação e ordenação global de transações para o mecanismo de armazenamento InnoDB. O MariaDB MaxScale é um proxy de banco de dados, localizado no topo do MariaDB Server, que estende a alta disponibilidade, escalabilidade e segurança e, ao mesmo tempo, simplifica o desenvolvimento de aplicativos, desacoplando-o da infraestrutura de banco de dados subjacente.
Nesta série de blogs, veremos a administração do MaxScale usando maxctrl para nosso cluster MariaDB. Nesta primeira parte da série de blogs, abordaremos a introdução e alguns conceitos básicos do utilitário de linha de comando maxctrl. Nossa configuração consiste em um servidor MaxScale e um MariaDB 10.4 de 3 nós com Galera 4, conforme ilustrado no diagrama a seguir:
Nosso cluster MariaDB foi implantado e gerenciado pelo ClusterControl, enquanto nosso host MaxScale é um novo host no cluster e não foi implantado pelo ClusterControl para a finalidade deste passo a passo.
Instalação MaxScale
A instalação do MaxScale é bastante simples. Escolha o sistema operacional correto na página de download do MariaDB para MaxScale e faça o download. O exemplo a seguir mostra como instalar o MaxScale em um host CentOS 8:
$ wget https://dlm.mariadb.com/1067156/MaxScale/2.4.10/centos/8/x86_64/maxscale-2.4.10-1.centos.8.x86_64.rpm
$ yum localinstall maxscale-2.4.10-1.centos.8.x86_64.rpm
$ systemctl enable maxscale
$ systemctl start maxscale
Após o daemon ser iniciado, por padrão, os componentes MaxScale serão executados nas seguintes portas:
- 0.0.0.0:4006 - Ouvinte de divisão de leitura e gravação padrão.
- 0.0.0.0:4008 - Ouvinte round-robin padrão.
- 127.0.0.1:8989 - API MaxScale Rest.
As portas acima são mutáveis. É comum que um servidor MaxScale autônomo em produção seja executado com a divisão de leitura/gravação na porta 3306 e round-robin na porta 3307. Essa configuração é o que vamos implantar nesta postagem do blog.
Arquivos importantes e estrutura de diretório
Depois que o pacote estiver instalado, você obterá os seguintes utilitários/programas:
- maxscale - O próprio MaxScale.
- maxctrl - O cliente administrativo de linha de comando para MaxScale que usa a API REST MaxScale para comunicação.
- maxadmin - O cliente administrativo e monitor MaxScale obsoleto. Em vez disso, use maxctrl.
- chaves máximas - Este utilitário grava no arquivo .secrets, no diretório especificado, a chave de criptografia AES e o vetor init que é usado pelo utilitário maxpasswd, ao criptografar as senhas usadas no arquivo de configuração MariaDB MaxScale.
- maxpasswd - Este utilitário cria uma senha criptografada usando um arquivo .secrets que foi criado anteriormente usando maxkeys.
O MaxScale carregará todas as opções de configuração dos seguintes locais, na ordem específica:
- /etc/maxscale.cnf
- /etc/maxscale.cnf.d/*.cnf
- /var/lib/maxscale/maxscale.cnf.d/*.cnf
Para entender melhor a configuração do MaxScale, consulte o Guia de configuração do MaxScale.
Uma vez inicializado o MaxScale, os arquivos e estruturas de diretório padrão são:
- Diretório de dados MaxScale:/var/lib/maxscale
- Arquivo PID MaxScale:/var/run/maxscale/maxscale.pid
- Arquivo de registro MaxScale:/var/log/maxscale/maxscale.log
- Documentação do MaxScale:/usr/share/maxscale
MaxCtrl - A CLI
Uma vez iniciado, podemos usar o cliente de linha de comando MaxCtrl para administrar o MaxScale usando a API REST MaxScale escuta na porta 8989 no host local. As credenciais padrão para a API REST são "admin:mariadb". Os usuários usados pela API REST são os mesmos usados pela interface de rede MaxAdmin. Isso significa que qualquer usuário criado para a interface de rede MaxAdmin deve funcionar com a API REST MaxScale e MaxCtrl.
Podemos usar o utilitário maxctrl no modo interativo, semelhante ao cliente mysql. Basta digitar "maxctrl" e você entrará no modo interativo (onde o prompt mudou do prompt do shell para o prompt do maxctrl), assim como na captura de tela a seguir:
Como alternativa, podemos executar o mesmo comando diretamente no prompt do shell, por exemplo:
As opções do comando MaxCtrl dependem da versão MaxScale que o acompanha. No momento da redação deste artigo, a versão MaxScale é 2.4 e você deve consultar esta documentação para obter uma lista completa de comandos. MaxCtrl utiliza a interface da API REST MaxScale, que explica em detalhes aqui.
Adicionando servidores MariaDB no MaxScale
Quando iniciamos nosso MaxScale, ele irá gerar um arquivo de configuração em /etc/maxscale.cnf com alguns parâmetros e exemplos padrão. Não vamos usar esta configuração e vamos criar a nossa própria. Crie um backup deste arquivo porque queremos esvaziá-lo mais tarde:
$ mv /etc/maxscale.cnf /etc/maxscale.cnf.bak
$ cat /dev/null > /etc/maxscale.cnf # empty the file
Reinicie o MaxScale para começar tudo de novo:
$ systemctl restart maxscale
O termo "servidor" no MaxScale significa basicamente o servidor MariaDB backend, como neste caso, todos os 3 nós do nosso Cluster MariaDB. Para adicionar todos os 3 servidores MariaDB Cluster no runtime MaxScale, use os seguintes comandos:
$ maxctrl create server mariadbgalera1 192.168.0.221 3306
$ maxctrl create server mariadbgalera2 192.168.0.222 3306
$ maxctrl create server mariadbgalera3 192.168.0.222 3306
Para verificar os servidores adicionados, use o comando list:
$ maxctrl list servers
E você deverá ver a seguinte saída:
Adicionando monitoramento ao MaxScale
A próxima coisa é configurar o serviço de monitoramento para uso MaxScale. MaxScale suporta vários módulos de monitoramento dependendo do tipo de banco de dados, a saber:
- Monitor MariaDB
- Monitor Galera
- Monitor Clustrix
- Monitor ColumnStore
- Monitor Aurora
Nesta configuração, vamos usar o módulo Galera Monitor chamado "galeramon". Primeiramente, precisamos criar um usuário de banco de dados para ser usado pelo MaxScale em um dos servidores do Cluster MariaDB. Neste exemplo, escolhemos mariadbgalera1, 192.168.0.221 para executar as seguintes instruções:
MariaDB> CREATE USER [email protected]'192.168.0.220' IDENTIFIED BY 'MaXSc4LeP4ss';
MariaDB> GRANT SELECT ON mysql.* TO 'maxscale_monitor'@'192.168.0.220';
MariaDB> GRANT SHOW DATABASES ON *.* TO 'maxscale_monitor'@'192.168.0.220';
Onde 192.168.0.220 é o endereço IP do nosso servidor MaxScale.
Não é seguro armazenar a senha do usuário maxscale_monitor em texto simples. É altamente recomendável armazenar a senha em um formato criptografado. Para conseguir isso, precisamos gerar uma chave secreta especificamente para esta instância MaxScale. Use o utilitário "maxkeys" para gerar a chave secreta que será usada pelo MaxScale para fins de criptografia e descriptografia:
$ maxkeys
Generating .secrets file in /var/lib/maxscale.
Agora podemos usar o utilitário maxpasswd para gerar o valor criptografado de nossa senha:
$ maxpasswd MaXSc4LeP4ss
D91DB5813F7C815B351CCF7D7F1ED6DB
Sempre usaremos o valor acima ao armazenar nossas credenciais de usuário de monitoramento no MaxScale. Agora estamos prontos para adicionar o serviço de monitoramento Galera ao MaxScale usando maxctrl:
maxctrl> create monitor galera_monitor galeramon servers=mariadbgalera1,mariadbgalera2,mariadbgalera3 user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB
Verifique com o seguinte comando:
Adicionando serviços ao MaxScale
Serviço é basicamente como o MaxScale deve rotear as consultas para os servidores de backend. MaxScale 2.4 suporta vários serviços (ou roteadores), a saber:
- Avrorouter
- Binlogrouter
- Gato
- CLI
- HintRouter
- Readconnroute
- Readwritesplit
- SchemaRouter
- SmartRouter
Para nosso cluster MariaDB, precisamos apenas de dois serviços de roteamento - divisão de leitura e gravação e balanceamento de carga round-robin. Para divisão de leitura-gravação, as consultas de gravação serão encaminhadas para apenas um único servidor MariaDB até que o servidor esteja inacessível, onde MaxScale encaminhará as consultas de gravação para o próximo nó disponível. Para balanceamento round-robin, as consultas serão encaminhadas para todos os nós de back-end de forma round-robin.
Crie um serviço de roteamento para round-robin (ou multi-master):
maxctrl> create service Round-Robin-Service readconnroute user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Crie outro serviço de roteamento para divisão de leitura/gravação (ou mestre único):
maxctrl> create service Read-Write-Service readwritesplit user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Verifique com:
Todos os componentes criados com sucesso pelo MaxCtrl irão gerar seu próprio arquivo de configuração em / var/lib/maxscale/maxscale.cnf.d. Neste ponto, o diretório se parece com isso:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
total 24
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:01 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:00 Round-Robin-Service.cnf
Adicionando ouvintes ao MaxScale
Os ouvintes representam as portas em que o serviço escutará as conexões de entrada. Pode ser um arquivo de porta ou soquete UNIX e o tipo de componente deve ser "ouvinte". Comumente, os ouvintes estão vinculados aos serviços. Em nossa configuração, vamos criar dois listeners - Read-Write Listener na porta 3306 e Round-Robin Listener na porta 3307:
maxctrl> create listener Read-Write-Service Read-Write-Listener 3306 --interface=0.0.0.0 --authenticator=MariaDBAuth
maxctrl> create listener Round-Robin-Service Round-Robin-Listener 3307 --interface=0.0.0.0 --authenticator=MariaDBAuth
Verifique com os seguintes comandos:
Neste ponto, nosso MaxScale está pronto para balancear a carga das consultas para nosso Cluster MariaDB. A partir dos aplicativos, envie as consultas para o host MaxScale na porta 3306, onde as consultas de gravação sempre atingirão o mesmo nó do banco de dados enquanto as consultas de leitura serão enviadas para os outros dois nós. Isso também é conhecido como configuração de gravador único. Se você quiser usar uma configuração de vários gravadores, em que as gravações serão encaminhadas para todos os nós MariaDB de back-end com base em algoritmos de balanceamento round-robin. Você pode ajustar ainda mais o balanceamento usando prioridade e peso.
Novamente, ao alterar as opções de configuração via maxctrl, todos os componentes criados com sucesso terão seu próprio arquivo de configuração dentro de /var/lib/maxscale/maxscale.cnf.d, conforme mostrado na saída a seguir:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 259 Jul 5 16:06 Read-Write-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:06 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 261 Jul 5 16:06 Round-Robin-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:06 Round-Robin-Service.cnf
As opções de configuração acima podem ser modificadas diretamente para atender às suas necessidades, mas requer que o serviço MaxScale seja reiniciado para carregar as novas alterações. Se você quiser começar do zero novamente, poderá limpar tudo neste diretório e reiniciar o MaxScale.
No próximo episódio, veremos os comandos de gerenciamento e monitoramento do MaxCtrl para nosso Cluster MariaDB.