Um dos principais aspectos da alta disponibilidade é a capacidade de reagir rapidamente a falhas. Não é incomum gerenciar bancos de dados manualmente e fazer com que o software de monitoramento fique de olho na integridade do banco de dados. Em caso de falha, o software de monitoramento envia um alerta para a equipe de plantão. Isso significa que alguém pode precisar acordar, acessar um computador e fazer login nos sistemas e examinar os logs - ou seja, há algum tempo de espera antes que a correção possa começar. Idealmente, todo o processo deve ser automatizado.
Neste blog, veremos como implantar um sistema totalmente automatizado que detecta quando o banco de dados primário falha e inicia procedimentos de failover promovendo um banco de dados secundário. Usaremos o ClusterControl para realizar o failover automático do banco de dados Moodle PostgreSQL.
Vantagem do failover automático
- Menos tempo para recuperar o serviço de banco de dados
- Maior tempo de atividade do sistema
- Menos dependência do DBA ou do administrador que configurou a alta disponibilidade para o banco de dados
Arquitetura
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214562319.png)
Atualmente temos um servidor principal Postgres e dois servidores secundários no balanceador de carga HAProxy que envia o tráfego do Moodle para o nó primário do PostgreSQL. A recuperação de cluster e a recuperação automática de nó no ClusterControl são as configurações importantes para executar o processo de failover automático.
Controlando para qual servidor fazer failover
O ClusterControl oferece whitelisting e blacklisting de um conjunto de servidores que você deseja que participem do failover ou excluam como candidato.
Existem duas variáveis que você pode definir na configuração do cmon,
- replication_failover_whitelist :contém uma lista de IPs ou nomes de host de servidores secundários que devem ser usados como possíveis candidatos primários. Se esta variável for definida, apenas esses hosts serão considerados.
- replication_failover_blacklist :contém uma lista de hosts que nunca serão considerados como candidatos primários. Você pode usá-lo para listar os servidores secundários usados para backups ou consultas analíticas. Se o hardware variar entre os servidores secundários, você pode querer colocar aqui os servidores que usam hardware mais lento.
Processo de failover automático
Etapa 1
Iniciamos o carregamento de dados no servidor primário (192.168.33.14) usando a ferramenta sysbench.
[[email protected] sysbench]# /bin/sysbench --db-driver=pgsql --oltp-table-size=100000 --oltp-tables-count=24 --threads=2 --pgsql-host=****** --pgsql-port=6543 --pgsql-user=sbtest --pgsql-password=***** --pgsql-db=sbtest /usr/share/sysbench/tests/include/oltp_legacy/parallel_prepare.lua run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 2
Initializing random number generator from current time
Initializing worker threads...
Threads started!
thread prepare0
Creating table 'sbtest1'...
Inserting 100000 records into 'sbtest1'
Creating secondary indexes on 'sbtest1'...
Creating table 'sbtest2'...
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214562421.png)
Etapa 2
Vamos parar o servidor primário do Postgres (192.168.33.14). No ClusterControl, o parâmetro (enable_cluster_autorecovery) é habilitado para promover o próximo primário adequado.
# service postgresql-12 stop
Etapa 3
O ClusterControl detecta falhas no primário e promove um secundário com os dados mais atuais como um novo primário. Ele também funciona no restante dos servidores secundários para que sejam replicados a partir do novo primário.
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214562403.png)
No nosso caso, o (192.168.33.13) é um novo servidor primário e os servidores secundários agora são replicados a partir desse novo servidor primário. Agora o HAProxy roteia o tráfego do banco de dados dos servidores Moodle para o servidor primário mais recente.
De (192.168.33.13)
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 row)
De (192.168.33.15)
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)
Topologia atual
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214562689.png)
Quando o HAProxy detecta que um de nossos nós, primário ou réplica, está não acessível, marca-o automaticamente como offline. O HAProxy não enviará nenhum tráfego do aplicativo Moodle para ele. Essa verificação é feita por scripts de verificação de integridade configurados pelo ClusterControl no momento da implantação.
Depois que o ClusterControl promove um servidor de réplica para primário, nosso HAProxy marca o primário antigo como offline e coloca o nó promovido online.
Quando o antigo primário estiver online novamente, ele não será sincronizado automaticamente com o novo servidor primário. Precisamos deixá-lo de volta na topologia, e isso pode ser feito através da interface ClusterControl. Isso evitará a possibilidade de perda ou inconsistência de dados, caso queiramos investigar por que esse servidor falhou em primeiro lugar.
O ClusterControl transmitirá o backup do novo servidor primário e configurará a replicação.
Conclusão
O failover automático é uma parte importante de qualquer banco de dados de produção do Moodle. Ele pode reduzir o tempo de inatividade quando um servidor fica inativo, mas também ao executar tarefas comuns de manutenção ou migrações. É importante acertar, pois é importante que o software de failover tome as decisões corretas.