MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como automatizar o cluster Galera usando a CLI do ClusterControl


Como administradores de sistemas e desenvolvedores, passamos muito tempo em um terminal. Então trouxemos o ClusterControl para o terminal com nossa ferramenta de interface de linha de comando chamada s9s. O s9s fornece uma interface fácil para a API ClusterControl RPC v2. Você achará muito útil ao trabalhar com implantações de grande escala, pois a CLI permite que você projete recursos e fluxos de trabalho mais complexos.

Esta postagem de blog mostra como usar o s9s para automatizar o gerenciamento do Galera Cluster for MySQL ou MariaDB, bem como uma configuração simples de replicação mestre-escravo.

Configuração


Você pode encontrar instruções de instalação para seu sistema operacional específico na documentação. O que é importante notar é que, se você usar as ferramentas s9s mais recentes, do GitHub, haverá uma pequena mudança na maneira como você cria um usuário. O comando a seguir funcionará bem:
s9s user --create --generate-key --controller="https://localhost:9501" dba

Em geral, há duas etapas necessárias se você deseja configurar a CLI localmente no host ClusterControl. Primeiro, você precisa criar um usuário e depois fazer algumas alterações no arquivo de configuração - todas as etapas estão incluídas na documentação.

Implantação


Depois que a CLI tiver sido configurada corretamente e tiver acesso SSH aos hosts de banco de dados de destino, você poderá iniciar o processo de implantação. No momento da escrita, você pode usar a CLI para implantar clusters MySQL, MariaDB e PostgreSQL. Vamos começar com um exemplo de como implantar o Percona XtraDB Cluster 5.7. Um único comando é necessário para fazer isso.
s9s cluster --create --cluster-type=galera --nodes="10.0.0.226;10.0.0.227;10.0.0.228"  --vendor=percona --provider-version=5.7 --db-admin-passwd="pass" --os-user=root --cluster-name="PXC_Cluster_57" --wait

A última opção “--wait” significa que o comando aguardará até que o trabalho seja concluído, mostrando seu progresso. Você pode ignorá-lo se quiser - nesse caso, o comando s9s retornará imediatamente ao shell após registrar um novo trabalho em cmon. Isso está perfeitamente bem, pois cmon é o processo que lida com o trabalho em si. Você sempre pode verificar o andamento de um trabalho separadamente, usando:
[email protected]:~# s9s job --list -l
--------------------------------------------------------------------------------------
Create Galera Cluster
Installing MySQL on 10.0.0.226                                           [██▊       ]
                                                                                                                                                                                                         26.09%
Created   : 2017-10-05 11:23:00    ID   : 1          Status : RUNNING
Started   : 2017-10-05 11:23:02    User : dba        Host   :
Ended     :                        Group: users
--------------------------------------------------------------------------------------
Total: 1

Vejamos outro exemplo. Desta vez vamos criar um novo cluster, replicação MySQL:par simples mestre-escravo. Novamente, um único comando é suficiente:
[email protected]:~# s9s cluster --create --nodes="10.0.0.229?master;10.0.0.230?slave" --vendor=percona --cluster-type=mysqlreplication --provider-version=5.7 --os-user=root --wait
Create MySQL Replication Cluster
/ Job  6 FINISHED   [██████████] 100% Cluster created

Agora podemos verificar se ambos os clusters estão funcionando:
[email protected]:~# s9s cluster --list --long
ID STATE   TYPE        OWNER GROUP NAME           COMMENT
 1 STARTED galera      dba   users PXC_Cluster_57 All nodes are operational.
 2 STARTED replication dba   users cluster_2      All nodes are operational.
Total: 2

Claro, tudo isso também é visível através da GUI:

Agora, vamos adicionar um balanceador de carga ProxySQL:
[email protected]:~# s9s cluster --add-node --nodes="proxysql://10.0.0.226" --cluster-id=1
WARNING: admin/admin
WARNING: proxy-monitor/proxy-monitor
Job with ID 7 registered.

Desta vez não usamos a opção '--wait' então, se quisermos verificar o progresso, temos que fazer por conta própria. Observe que estamos usando um ID de trabalho que foi retornado pelo comando anterior, portanto, obteremos informações apenas sobre esse trabalho específico:
[email protected]:~# s9s job --list --long --job-id=7
--------------------------------------------------------------------------------------
Add ProxySQL to Cluster
Waiting for ProxySQL                                                     [██████▋   ]
                                                                            65.00%
Created   : 2017-10-06 14:09:11    ID   : 7          Status : RUNNING
Started   : 2017-10-06 14:09:12    User : dba        Host   :
Ended     :                        Group: users
--------------------------------------------------------------------------------------
Total: 7

Escalando para fora


Os nós podem ser adicionados ao nosso cluster Galera por meio de um único comando:
s9s cluster --add-node --nodes 10.0.0.229 --cluster-id 1
Job with ID 8 registered.
[email protected]:~# s9s job --list --job-id=8
ID CID STATE  OWNER GROUP CREATED  RDY  TITLE
 8   1 FAILED dba   users 14:15:52   0% Add Node to Cluster
Total: 8

Algo deu errado. Podemos verificar o que exatamente aconteceu:
[email protected]:~# s9s job --log --job-id=8
addNode: Verifying job parameters.
10.0.0.229:3306: Adding host to cluster.
10.0.0.229:3306: Testing SSH to host.
10.0.0.229:3306: Installing node.
10.0.0.229:3306: Setup new node (installSoftware = true).
10.0.0.229:3306: Detected a running mysqld server. It must be uninstalled first, or you can also add it to ClusterControl.

Certo, esse IP já é usado para nosso servidor de replicação. Deveríamos ter usado outro IP gratuito. Vamos tentar isso:
[email protected]:~# s9s cluster --add-node --nodes 10.0.0.231 --cluster-id 1
Job with ID 9 registered.
[email protected]:~# s9s job --list --job-id=9
ID CID STATE    OWNER GROUP CREATED  RDY  TITLE
 9   1 FINISHED dba   users 14:20:08 100% Add Node to Cluster
Total: 9

Gerenciando


Digamos que queremos fazer um backup do nosso mestre de replicação. Podemos fazer isso a partir da GUI, mas às vezes podemos precisar integrá-lo a scripts externos. ClusterControl CLI faria um ajuste perfeito para esse caso. Vamos verificar quais clusters temos:
[email protected]:~# s9s cluster --list --long
ID STATE   TYPE        OWNER GROUP NAME           COMMENT
 1 STARTED galera      dba   users PXC_Cluster_57 All nodes are operational.
 2 STARTED replication dba   users cluster_2      All nodes are operational.
Total: 2

Então, vamos verificar os hosts em nosso cluster de replicação, com cluster ID 2:
[email protected]:~# s9s nodes --list --long --cluster-id=2
STAT VERSION       CID CLUSTER   HOST       PORT COMMENT
soM- 5.7.19-17-log   2 cluster_2 10.0.0.229 3306 Up and running
soS- 5.7.19-17-log   2 cluster_2 10.0.0.230 3306 Up and running
coC- 1.4.3.2145      2 cluster_2 10.0.2.15  9500 Up and running

Como podemos ver, existem três hosts que o ClusterControl conhece - dois deles são hosts MySQL (10.0.0.229 e 10.0.0.230), o terceiro é a própria instância do ClusterControl. Vamos imprimir apenas os hosts MySQL relevantes:
[email protected]:~# s9s nodes --list --long --cluster-id=2 10.0.0.2*
STAT VERSION       CID CLUSTER   HOST       PORT COMMENT
soM- 5.7.19-17-log   2 cluster_2 10.0.0.229 3306 Up and running
soS- 5.7.19-17-log   2 cluster_2 10.0.0.230 3306 Up and running
Total: 3

Na coluna “STAT” você pode ver alguns caracteres lá. Para obter mais informações, sugerimos consultar a página de manual dos nós s9s (man s9s-nodes). Aqui vamos apenas resumir as partes mais importantes. O primeiro caractere nos informa sobre o tipo do nó:“s” significa que é um nó MySQL regular, “c” - controlador ClusterControl. O segundo caractere descreve o estado do nó:“o” nos diz que está online. Terceiro personagem - papel do nó. Aqui “M” descreve um mestre e “S” - um escravo enquanto “C” significa controlador. O quarto caractere final nos informa se o nó está em modo de manutenção. “-” significa que não há manutenção programada. Caso contrário, veríamos “M” aqui. Então, a partir desses dados podemos ver que nosso mestre é um host com IP:10.0.0.229. Vamos fazer um backup dele e armazená-lo no controlador.
[email protected]:~# s9s backup --create --nodes=10.0.0.229 --cluster-id=2 --backup-method=xtrabackupfull --wait
Create Backup
| Job 12 FINISHED   [██████████] 100% Command ok

Podemos então verificar se de fato foi concluído ok. Observe a opção “--backup-format” que permite definir quais informações devem ser impressas:
[email protected]:~# s9s backup --list --full --backup-format="Started: %B Completed: %E Method: %M Stored on: %S Size: %s %F\n" --cluster-id=2
Started: 15:29:11 Completed: 15:29:19 Method: xtrabackupfull Stored on: 10.0.0.229 Size: 543382 backup-full-2017-10-06_152911.xbstream.gz
Total 1
Vários noves Guia de DevOps para gerenciamento de banco de dadosSaiba mais sobre o que você precisa saber para automatizar e gerenciar seus bancos de dados de código abertoBaixe gratuitamente Recursos relacionados Automação de banco de dados:integrando a CLI do ClusterControl com seu ChatBot Como usar o s9s -A interface de linha de comando para o ClusterControl

Monitoramento


Todos os bancos de dados devem ser monitorados. O ClusterControl usa orientadores para observar algumas das métricas no MySQL e no sistema operacional. Quando uma condição é atendida, uma notificação é enviada. O ClusterControl também fornece um extenso conjunto de gráficos, tanto em tempo real quanto históricos para post-mortem ou planejamento de capacidade. Às vezes, seria ótimo ter acesso a algumas dessas métricas sem precisar passar pela GUI. A CLI do ClusterControl torna isso possível por meio do comando s9s-node. Informações sobre como fazer isso podem ser encontradas na página de manual do s9s-node. Mostraremos alguns exemplos do que você pode fazer com a CLI.

Antes de tudo, vamos dar uma olhada na opção “--node-format” para o comando “s9s node”. Como você pode ver, há muitas opções para imprimir conteúdo interessante.
[email protected]:~# s9s node --list --node-format "%N %T %R %c cores %u%% CPU utilization %fmG of free memory, %tMB/s of net TX+RX, %M\n" "10.0.0.2*"
10.0.0.226 galera none 1 cores 13.823200% CPU utilization 0.503227G of free memory, 0.061036MB/s of net TX+RX, Up and running
10.0.0.227 galera none 1 cores 13.033900% CPU utilization 0.543209G of free memory, 0.053596MB/s of net TX+RX, Up and running
10.0.0.228 galera none 1 cores 12.929100% CPU utilization 0.541988G of free memory, 0.052066MB/s of net TX+RX, Up and running
10.0.0.226 proxysql  1 cores 13.823200% CPU utilization 0.503227G of free memory, 0.061036MB/s of net TX+RX, Process 'proxysql' is running.
10.0.0.231 galera none 1 cores 13.104700% CPU utilization 0.544048G of free memory, 0.045713MB/s of net TX+RX, Up and running
10.0.0.229 mysql master 1 cores 11.107300% CPU utilization 0.575871G of free memory, 0.035830MB/s of net TX+RX, Up and running
10.0.0.230 mysql slave 1 cores 9.861590% CPU utilization 0.580315G of free memory, 0.035451MB/s of net TX+RX, Up and running

Com o que mostramos aqui, você provavelmente pode imaginar alguns casos de automação. Por exemplo, você pode observar a utilização da CPU dos nós e, se atingir algum limite, pode executar outro trabalho s9s para ativar um novo nó no cluster Galera. Você também pode, por exemplo, monitorar a utilização da memória e enviar alertas se ela ultrapassar algum limite.

A CLI pode fazer mais do que isso. Em primeiro lugar, é possível verificar os gráficos a partir da linha de comando. Claro, eles não são tão ricos em recursos quanto os gráficos na GUI, mas às vezes basta ver um gráfico para encontrar um padrão inesperado e decidir se vale a pena investigar mais.
[email protected]:~# s9s node --stat --cluster-id=1 --begin="00:00" --end="14:00" --graph=load 10.0.0.231
[email protected]:~# s9s node --stat --cluster-id=1 --begin="00:00" --end="14:00" --graph=sqlqueries 10.0.0.231

Durante situações de emergência, convém verificar a utilização de recursos no cluster. Você pode criar uma saída tipo top que combina dados de todos os nós do cluster:
[email protected]:~# s9s process --top --cluster-id=1
PXC_Cluster_57 - 14:38:01                                                                                                                                                               All nodes are operational.
4 hosts, 7 cores,  2.2 us,  3.1 sy, 94.7 id,  0.0 wa,  0.0 st,
GiB Mem : 2.9 total, 0.2 free, 0.9 used, 0.2 buffers, 1.6 cached
GiB Swap: 3 total, 0 used, 3 free,

PID   USER       HOST       PR  VIRT      RES    S   %CPU   %MEM COMMAND
 8331 root       10.0.2.15  20   743748    40948 S  10.28   5.40 cmon
26479 root       10.0.0.226 20   278532     6448 S   2.49   0.85 accounts-daemon
 5466 root       10.0.0.226 20    95372     7132 R   1.72   0.94 sshd
  651 root       10.0.0.227 20   278416     6184 S   1.37   0.82 accounts-daemon
  716 root       10.0.0.228 20   278304     6052 S   1.35   0.80 accounts-daemon
22447 n/a        10.0.0.226 20  2744444   148820 S   1.20  19.63 mysqld
  975 mysql      10.0.0.228 20  2733624   115212 S   1.18  15.20 mysqld
13691 n/a        10.0.0.227 20  2734104   130568 S   1.11  17.22 mysqld
22994 root       10.0.2.15  20    30400     9312 S   0.93   1.23 s9s
 9115 root       10.0.0.227 20    95368     7192 S   0.68   0.95 sshd
23768 root       10.0.0.228 20    95372     7160 S   0.67   0.94 sshd
15690 mysql      10.0.2.15  20  1102012   209056 S   0.67  27.58 mysqld
11471 root       10.0.0.226 20    95372     7392 S   0.17   0.98 sshd
22086 vagrant    10.0.2.15  20    95372     4960 S   0.17   0.65 sshd
 7282 root       10.0.0.226 20        0        0 S   0.09   0.00 kworker/u4:2
 9003 root       10.0.0.226 20        0        0 S   0.09   0.00 kworker/u4:1
 1195 root       10.0.0.227 20        0        0 S   0.09   0.00 kworker/u4:0
27240 root       10.0.0.227 20        0        0 S   0.09   0.00 kworker/1:1
 9933 root       10.0.0.227 20        0        0 S   0.09   0.00 kworker/u4:2
16181 root       10.0.0.228 20        0        0 S   0.08   0.00 kworker/u4:1
 1744 root       10.0.0.228 20        0        0 S   0.08   0.00 kworker/1:1
28506 root       10.0.0.228 20    95372     7348 S   0.08   0.97 sshd
  691 messagebus 10.0.0.228 20    42896     3872 S   0.08   0.51 dbus-daemon
11892 root       10.0.2.15  20        0        0 S   0.08   0.00 kworker/0:2
15609 root       10.0.2.15  20   403548    12908 S   0.08   1.70 apache2
  256 root       10.0.2.15  20        0        0 S   0.08   0.00 jbd2/dm-0-8
  840 root       10.0.2.15  20   316200     1308 S   0.08   0.17 VBoxService
14694 root       10.0.0.227 20    95368     7200 S   0.00   0.95 sshd
12724 n/a        10.0.0.227 20     4508     1780 S   0.00   0.23 mysqld_safe
10974 root       10.0.0.227 20    95368     7400 S   0.00   0.98 sshd
14712 root       10.0.0.227 20    95368     7384 S   0.00   0.97 sshd
16952 root       10.0.0.227 20    95368     7344 S   0.00   0.97 sshd
17025 root       10.0.0.227 20    95368     7100 S   0.00   0.94 sshd
27075 root       10.0.0.227 20        0        0 S   0.00   0.00 kworker/u4:1
27169 root       10.0.0.227 20        0        0 S   0.00   0.00 kworker/0:0
  881 root       10.0.0.227 20    37976      760 S   0.00   0.10 rpc.mountd
  100 root       10.0.0.227  0        0        0 S   0.00   0.00 deferwq
  102 root       10.0.0.227  0        0        0 S   0.00   0.00 bioset
11876 root       10.0.0.227 20     9588     2572 S   0.00   0.34 bash
11852 root       10.0.0.227 20    95368     7352 S   0.00   0.97 sshd
  104 root       10.0.0.227  0        0        0 S   0.00   0.00 kworker/1:1H

Quando você der uma olhada na parte superior, verá estatísticas de CPU e memória agregadas em todo o cluster.
[email protected]:~# s9s process --top --cluster-id=1
PXC_Cluster_57 - 14:38:01                                                                                                                                                               All nodes are operational.
4 hosts, 7 cores,  2.2 us,  3.1 sy, 94.7 id,  0.0 wa,  0.0 st,
GiB Mem : 2.9 total, 0.2 free, 0.9 used, 0.2 buffers, 1.6 cached
GiB Swap: 3 total, 0 used, 3 free,

Abaixo, você pode encontrar a lista de processos de todos os nós do cluster.
PID   USER       HOST       PR  VIRT      RES    S   %CPU   %MEM COMMAND
 8331 root       10.0.2.15  20   743748    40948 S  10.28   5.40 cmon
26479 root       10.0.0.226 20   278532     6448 S   2.49   0.85 accounts-daemon
 5466 root       10.0.0.226 20    95372     7132 R   1.72   0.94 sshd
  651 root       10.0.0.227 20   278416     6184 S   1.37   0.82 accounts-daemon
  716 root       10.0.0.228 20   278304     6052 S   1.35   0.80 accounts-daemon
22447 n/a        10.0.0.226 20  2744444   148820 S   1.20  19.63 mysqld
  975 mysql      10.0.0.228 20  2733624   115212 S   1.18  15.20 mysqld
13691 n/a        10.0.0.227 20  2734104   130568 S   1.11  17.22 mysqld

Isso pode ser extremamente útil se você precisar descobrir o que está causando a carga e qual nó é o mais afetado.

Esperamos que a ferramenta CLI facilite a integração do ClusterControl com scripts externos e ferramentas de orquestração de infraestrutura. Esperamos que você goste de usar esta ferramenta e, se tiver algum feedback sobre como melhorá-la, sinta-se à vontade para nos informar.