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

Como gerenciar automaticamente o failover do banco de dados MySQL para Moodle

Em nossos blogs anteriores, justificamos por que você precisa de um failover de banco de dados e explicamos como funciona um mecanismo de failover. Estou compartilhando isso caso você tenha dúvidas sobre por que você deve configurar um mecanismo de failover para seu banco de dados MySQL. Se você fizer isso, por favor, leia nossos posts anteriores.

Como configurar o failover automático

A vantagem de usar MySQL ou MariaDB para gerenciar automaticamente seu failover é que existem ferramentas disponíveis que você pode usar e implementar em seu ambiente. Desde soluções de código aberto até soluções de nível empresarial. A maioria das ferramentas não é apenas capaz de failover, existem outros recursos, como alternância, monitoramento e recursos avançados que podem oferecer mais recursos de gerenciamento para seu cluster de banco de dados MySQL. Abaixo, veremos os mais comuns que você pode usar.

Usando MHA (Alta Disponibilidade Mestre)

Abordamos este tópico com MHA com seus problemas mais comuns e como corrigi-los. Também comparamos MHA com MRM ou com MaxScale.

Configurar com MHA para alta disponibilidade pode não ser fácil, mas é eficiente de usar e flexível, pois há parâmetros ajustáveis ​​que você pode definir para personalizar seu failover. O MHA foi testado e usado. Mas à medida que a tecnologia avança, o MHA está ficando para trás, pois não suporta GTID para MariaDB e não tem feito nenhuma atualização nos últimos 2 ou 3 anos.

Ao executar o script masterha_manager,

masterha_manager --conf=/etc/app1.cnf

Onde uma amostra /etc/app1.cnf deve ter a seguinte aparência,

[server default]

user=cmon

password=pass

ssh_user=root

# working directory on the manager

manager_workdir=/var/log/masterha/app1

# working directory on MySQL servers

remote_workdir=/var/log/masterha/app1

[server1]

hostname=node1

candidate_master=1

[server2]

hostname=node2

candidate_master=1

[server3]

hostname=node3

no_master=1

Parâmetros como no_master e candidate_master devem ser cruciais ao definir a lista de permissões de nós desejados como seu mestre de destino e nós que você não deseja que sejam mestres.

Uma vez definido, você está pronto para ter failover para seu banco de dados MySQL caso ocorra uma falha no primário ou no mestre. O script masterha_manager gerencia o failover (automático ou manual), toma decisões sobre quando e onde fazer o failover e gerencia a recuperação do escravo durante a promoção do mestre candidato para aplicação de logs de retransmissão diferencial. Se o banco de dados mestre morrer, o MHA Manager irá coordenar com o agente MHA Node, pois aplica logs de retransmissão diferencial aos escravos que não têm os eventos binlog mais recentes do mestre.

Confira o que o agente MHA Node faz e seus scripts envolvidos. Basicamente, é o script que o MHA Manager invocará quando ocorrer o failover. Ele aguardará seu mandato do MHA Manager enquanto procura o escravo mais recente que contém os eventos de log binário e copia os eventos ausentes do escravo usando scp e os aplica a si mesmo. Conforme mencionado, ele aplica logs de retransmissão, limpa logs de retransmissão ou salva logs binários.

Se você quiser saber mais sobre parâmetros ajustáveis ​​e como personalizar seu gerenciamento de failover, confira a página wiki de Parâmetros para MHA.

Usando o orquestrador

Orchestrator é uma ferramenta de gerenciamento de alta disponibilidade e replicação do MySQL e MariaDB. É lançado por Shlomi Noach sob os termos da Licença Apache, versão 2.0. Este é um software de código aberto e lida com failover automático, mas há muitas coisas que você pode personalizar ou fazer para gerenciar seu banco de dados MySQL/MariaDB além de recuperação ou failover automático.

A instalação do Orchestrator pode ser fácil ou direta. Depois de baixar os pacotes específicos necessários para seu ambiente de destino, você estará pronto para registrar seu cluster e nós a serem monitorados pelo Orchestrator. Ele fornece uma interface do usuário para a qual isso é muito fácil de gerenciar, mas possui muitos parâmetros ajustáveis ​​ou um conjunto de comandos que você pode usar para obter seu gerenciamento de failover.

Vamos considerar que você finalmente configurou e O registro do cluster adicionando nosso nó primário ou mestre pode ser feito pelo comando abaixo,

$ orchestrator -c discover -i pupnode21:3306

2021-01-07 12:32:31 DEBUG Hostname unresolved yet: pupnode21

2021-01-07 12:32:31 DEBUG Cache hostname resolve pupnode21 as pupnode21

2021-01-07 12:32:31 DEBUG Connected to orchestrator backend: orchestrator:[email protected](127.0.0.1:3306)/orchestrator?timeout=1s

2021-01-07 12:32:31 DEBUG Orchestrator pool SetMaxOpenConns: 128

2021-01-07 12:32:31 DEBUG Initializing orchestrator

2021-01-07 12:32:31 INFO Connecting to backend 127.0.0.1:3306: maxConnections: 128, maxIdleConns: 32

2021-01-07 12:32:31 DEBUG Hostname unresolved yet: 192.168.40.222

2021-01-07 12:32:31 DEBUG Cache hostname resolve 192.168.40.222 as 192.168.40.222

2021-01-07 12:32:31 DEBUG Hostname unresolved yet: 192.168.40.223

2021-01-07 12:32:31 DEBUG Cache hostname resolve 192.168.40.223 as 192.168.40.223

pupnode21:3306

Agora, adicionamos nosso cluster.

Se um nó primário falhar (falha de hardware ou travamento encontrado), o orquestrador irá detectar e localizar o nó mais avançado a ser promovido como nó principal ou mestre.

Agora, temos dois nós restantes no cluster enquanto o primário está inativo .

$ orchestrator-client -c topology -i pupnode21:3306

pupnode21:3306 [unknown,invalid,10.3.27-MariaDB-log,rw,ROW,>>,downtimed]

$ orchestrator-client -c topology -i pupnode22:3306

pupnode22:3306   [0s,ok,10.3.27-MariaDB-log,rw,ROW,>>]

+ pupnode23:3306 [0s,ok,10.3.27-MariaDB-log,ro,ROW,>>,GTID]

Usando MaxScale

MariaDB MaxScale tem suporte como um balanceador de carga de banco de dados. Ao longo dos anos, o MaxScale cresceu e amadureceu, ampliado com vários recursos avançados e isso inclui failover automático. Desde que o MariaDB MaxScale 2.2 foi lançado, ele apresenta vários novos recursos, incluindo gerenciamento de failover de cluster de replicação. Você pode ler nosso blog anterior sobre o mecanismo de failover MaxScale.

O uso do MaxScale está sob BSL, embora o software esteja disponível gratuitamente, mas exige que você compre pelo menos o serviço com o MariaDB. Pode não ser adequado, mas caso você tenha adquirido os serviços corporativos MariaDB, isso pode ser uma grande vantagem se você precisar de gerenciamento de failover e seus outros recursos.

A instalação do MaxScale é fácil, mas definir a configuração necessária e definir seus parâmetros não é, e requer que você entenda o software. Você pode consultar o guia de configuração deles.

Para uma implantação rápida e rápida, você pode usar o ClusterControl para instalar o MaxScale para você em seu ambiente MySQL/MariaDB existente.

Uma vez instalado, a configuração do banco de dados Moodle pode ser feita apontando seu host para o IP ou nome do host MaxScale e a porta de leitura e gravação. Por exemplo,

Para qual porta 4008 é sua leitura/gravação para seu ouvinte de serviço. Por exemplo, aqui está a configuração de serviço e ouvinte a seguir para meu MaxScale.

$ cat maxscale.cnf.d/rw-listener.cnf

[rw-listener]

type=listener

protocol=mariadbclient

service=rw-service

address=0.0.0.0

port=4008

authenticator=MySQLAuth



$ cat maxscale.cnf.d/rw-service.cnf

[rw-service]

type=service

servers=DB_123,DB_122,DB_124

router=readwritesplit

user=maxscale_adm

password=42BBD2A4DC1BF9BE05C41A71DEEBDB70

max_slave_connections=100%

max_sescmd_history=15000000

causal_reads=true

causal_reads_timeout=10

transaction_replay=true

transaction_replay_max_size=32Mi

delayed_retry=true

master_reconnection=true

max_connections=0

connection_timeout=0

use_sql_variables_in=master

master_accept_reads=true

disable_sescmd_history=false

Durante a configuração do seu monitor, você não deve esquecer de habilitar o failover automático ou também habilitar o reingresso automático se desejar que o mestre anterior falhe ao reingressar automaticamente ao voltar a ficar online. Fica assim,

$ egrep -r 'auto|^\['  maxscale.cnf.d/replication_monitor.cnf

[replication_monitor]

auto_failover=true

auto_rejoin=1

Observe que as variáveis ​​que declarei não são destinadas ao uso em produção, mas apenas para esta postagem do blog e para fins de teste. A coisa boa com MaxScale, uma vez que o primário ou mestre cai, MaxScale é inteligente o suficiente para promover o candidato ideal ou melhor para assumir o papel de mestre. Portanto, não há necessidade de alterar seu IP e porta, pois usamos o host/IP de nosso nó MaxScale e sua porta como nosso endpoint quando o mestre fica inativo. Por exemplo,

[192.168.40.223:6603] MaxScale> list servers



┌────────┬────────────────┬──────┬─────────────┬─────────────────┬──────────────────────────┐

│ Server │ Address        │ Port │ Connections │ State           │ GTID                     │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_124 │ 192.168.40.223 │ 3306 │ 0           │ Slave, Running  │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_123 │ 192.168.40.221 │ 3306 │ 0           │ Master, Running │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_122 │ 192.168.40.222 │ 3306 │ 0           │ Slave, Running  │ 3-2003-876,5-2001-219541 │

└────────┴────────────────┴──────┴─────────────┴─────────────────┴──────────────────────────┘

O nó DB_123 que aponta para 192.168.40.221 é o mestre atual. Terminar o nó DB_123 acionará o MaxScale para realizar um failover e ficará assim,

[192.168.40.223:6603] MaxScale> list servers



┌────────┬────────────────┬──────┬─────────────┬─────────────────┬──────────────────────────┐

│ Server │ Address        │ Port │ Connections │ State           │ GTID                     │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_124 │ 192.168.40.223 │ 3306 │ 0           │ Slave, Running  │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_123 │ 192.168.40.221 │ 3306 │ 0           │ Down            │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_122 │ 192.168.40.222 │ 3306 │ 0           │ Master, Running │ 3-2003-876,5-2001-219541 │

└────────┴────────────────┴──────┴─────────────┴─────────────────┴──────────────────────────┘

Enquanto, nosso banco de dados Moodle ainda está funcionando, pois nosso MaxScale aponta para o último mestre que foi promovido.

$ mysql -hmaxscale.local.domain -umoodleuser -pmoodlepassword -P4008

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 9

Server version: 10.3.27-MariaDB-log MariaDB Server



Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.



Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



MariaDB [(none)]> select @@hostname;

+------------+

| @@hostname |

+------------+

| 192.168.40.222  |

+------------+

1 row in set (0.001 sec)

Usando ClusterControl

O ClusterControl pode ser baixado gratuitamente e oferece licenças para Community, Advance e Enterprise. O failover automático está disponível apenas no Advance e Enterprise. O failover automático é coberto pelo nosso recurso Auto-Recovery, que tenta recuperar um cluster com falha ou um nó com falha. Se você quiser mais detalhes sobre como fazer isso, confira nosso post anterior Como o ClusterControl executa recuperação automática de banco de dados e failover. Oferece parâmetros ajustáveis ​​que são muito convenientes e fáceis de usar. Leia nosso post anterior também sobre Como automatizar o failover de banco de dados com o ClusterControl.

Gerenciar seu failover automático para seu banco de dados Moodle deve exigir pelo menos um IP virtual (VIP) como seu ponto de extremidade para seu cliente de aplicativo Moodle que faz interface com seu back-end de banco de dados. Para fazer isso, você pode implantar Keepalived com HAProxy (ou ProxySQL -- depende da sua escolha de balanceador de carga) sobre ele. Nesse caso, o endpoint do banco de dados Moodle deve apontar para o IP virtual, que é basicamente atribuído pelo Keepalived depois de implantado, da mesma forma que mostramos anteriormente ao configurar o MaxScale. Você também pode verificar este blog sobre como fazê-lo.

Como mencionado acima, os parâmetros ajustáveis ​​estão disponíveis e você pode simplesmente definir através do seu /etc/cmon.d/cmon_.cnf localizado em seu host ClusterControl em que CLUSTER_ID é o id do seu cluster. Estes são os parâmetros que ajudariam você a gerenciar seu autofailover com mais eficiência,

  • replication_check_binlog_filtration_bf_failover
  • replication_check_external_bf_failover
  • replication_failed_reslave_failover_script
  • replication_failover_blacklist
  • replication_failover_events
  • replication_failover_wait_to_apply_timeout
  • replication_failover_whitelist
  • replication_onfail_failover_script
  • Replication_post_failover_script
  • replication_post_unsuccessful_failover_script
  • replication_pre_failover_script
  • replication_skip_apply_missing_txs
  • replication_stop_on_error

O ClusterControl é muito flexível ao gerenciar o failover para que você possa executar algumas tarefas de pré-failover ou pós-failover.

Conclusão


Existem outras ótimas opções ao configurar e gerenciar automaticamente seu failover para seu banco de dados MySQL para Moodle. Depende do seu orçamento e com o que você provavelmente terá que gastar dinheiro. Usar os de código aberto requer experiência e vários testes para se familiarizar, pois não há suporte que você possa executar quando precisar de ajuda além da comunidade. Com as soluções corporativas, ele tem um preço, mas oferece suporte e facilidade, pois o trabalho demorado pode ser reduzido. Observe que, se o failover for usado incorretamente, poderá causar danos ao banco de dados se não for tratado e gerenciado adequadamente. Concentre-se no que é mais importante e como você é capaz das soluções que está utilizando para gerenciar o failover do banco de dados Moodle.