Você está implantando o PostgreSQL na nuvem e quer entender suas opções para obter alta disponibilidade? Em nossa postagem anterior no blog, Gerenciando alta disponibilidade no PostgreSQL – Parte I, discutimos os recursos e o funcionamento do PostgreSQL Automatic Failover (PAF) do ClusterLabs. Na Parte II, apresentamos uma ferramenta alternativa de código aberto, Replication Manager do 2ndQuadrant, a ser seguida de perto pela Parte III, onde mergulhamos em nossa terceira alternativa, Patroni by Zalando.
- Gerenciando a alta disponibilidade no PostgreSQL – Parte I:Failover automático do PostgreSQL
- Gerenciando a alta disponibilidade no PostgreSQL – Parte III:Patroni
Gerenciador de replicação (repmgr)
repmgr é um conjunto de ferramentas de código aberto desenvolvido pela 2ndQuadrant para gerenciar a replicação e o failover de seus clusters PostgreSQL. Ele fornece as ferramentas para configurar, configurar, gerenciar e monitorar a replicação do PostgreSQL e também permite que você execute tarefas manuais de alternância e failover usando o utilitário repmgr. Esta ferramenta gratuita suporta e aprimora a replicação de streaming integrada do PostgreSQL.
O Replication Manager fornece duas ferramentas principais para gerenciar a replicação e o failover do PostgreSQL.
repmgr
- Um utilitário de interface de linha de comando que permite executar várias tarefas administrativas.
- repmgr permite configurar servidores em espera, promover esperas, fazer uma alternância e monitorar o status de seu cluster PostgreSQL.
- Ele também fornece a opção de simulação para quase todos os comandos administrativos.
repmgrd
Este é o daemon que:
- Monitora ativamente os clusters do PostgreSQL e executa as ações necessárias com base no estado do cluster.
- Executa failover automático caso o nó principal fique inativo, promovendo o modo de espera mais qualificado como o novo principal.
- Fornece uma opção para monitorar e armazenar os dados relacionados ao desempenho da replicação.
- Fornece notificação invocando os scripts do usuário para eventos registrados.
Como funciona
repmrg não apenas gerencia a replicação de clusters PostgreSQL, mas também tem recursos para configurar os servidores em espera para replicação. Após a instalação inicial, precisamos fazer alterações no arquivo de configuração repmgr (repmgr.conf) com os detalhes necessários em cada servidor. Quando um servidor é configurado, ele precisa ser registrado com repmgr usando o comando repmgr primary/standby register. Primeiro, o nó primário é configurado e registrado. Em seguida, os servidores standby são criados e configurados usando o comando repmgr standby clone que clona o nó standby do PostgreSQL de outro servidor PostgreSQL.
O Replication Manager faz uso do recurso de extensões do PostgreSQL e cria seu próprio esquema no banco de dados do cluster para armazenar as informações relacionadas ao cluster. A instalação da extensão e a criação do esquema acontecem durante o registro do servidor primário usando repmgr. Depois que a configuração estiver concluída, as operações administrativas manuais, como promover, seguir, alternar, etc., podem ser feitas usando o utilitário repmgr. Para operação de alternância, requer que o SSH sem senha seja configurado entre os nós.
O failover automático pode ser configurado usando repmgrd. O repmgrd requer que uma biblioteca compartilhada ‘repmgr’ seja carregada no momento da inicialização do servidor PostgreSQL. O nome da biblioteca deve ser mencionado nas shared_preload_libraries parâmetro de configuração no arquivo postgresql.conf. Além disso, para que repmgrd funcione, failover=automatic parâmetro precisa ser definido no arquivo repmgr.conf. Depois que todos esses parâmetros são definidos, o daemon repmgrd começa a monitorar ativamente o cluster. Se houver alguma falha no nó primário, ele tentará se reconectar várias vezes. Quando todas as tentativas de conexão ao primário falham, o standby mais elegível é escolhido por eleição como o novo primário pelo repmgrd.
repmgr também suporta notificações de eventos. Possui um conjunto de eventos predefinidos e armazena cada ocorrência desses eventos na tabela repmgr.events. repmgr permite que notificações de eventos sejam passadas para um programa ou script definido pelo usuário que pode executar ações adicionais, como enviar um e-mail ou acionar qualquer alerta. Isso é feito definindo o event_notification_command parâmetro em repmgr.conf.
Como ele lida com o cenário de cérebro dividido?
repmgr enfrenta cenários de cérebro dividido usando o local parâmetro, onde cada nó deve especificar o parâmetro de localização com base no datacenter em que está colocado. No caso de qualquer divisão de rede, o repmgr garantirá a promoção do nó que está no mesmo local que o primário. Se não encontrar nenhum nó nesse local, ele não promoverá nenhum nó em nenhum local.
Ele também lida com o isolamento da rede no caso de um número par de servidores em um cluster. Isso é feito usando um nó extra chamado servidor testemunha. O servidor testemunha é um nó que é considerado apenas para a contagem de votos da maioria. Não haverá instalação do PostgreSQL nesse servidor e, portanto, não haverá papel na replicação.
Existem requisitos de configuração?
- repmgr exigirá um banco de dados dedicado e um usuário com privilégios de superusuário. No entanto, também há uma opção para fornecer um superusuário se você não estiver disposto a conceder ao superusuário acesso ao usuário repmgr.
- Se você quiser que o repmgr copie os arquivos de configuração localizados fora do diretório de dados do PostgreSQL e/ou para testar a funcionalidade de alternância, você também precisará de conexões SSH sem senha entre os dois servidores e rsync deve ser instalado.
- Se você pretende usar comandos baseados em serviço diferentes de pg_ctl (que é usado por repmgr por padrão) para iniciar, parar, recarregar e reiniciar, você pode especificá-los em repmgr arquivo de configuração (repmgr.conf).
- Os parâmetros básicos de configuração necessários no arquivo de configuração repmgr são os seguintes:
node_id (int) – Um inteiro único maior que zero que identifica o nó.node_name (string) – Uma string arbitrária (mas única), usando o nome do host do servidor ou outro identificador inequivocamente associado ao servidor, é recomendado para evitar confusão.
conninfo (string) – Informações de conexão do banco de dados como uma string conninfo. Todos os servidores no cluster devem ser capazes de se conectar ao nó local usando essa string.
data_directory (string) – O diretório de dados do nó. Isso é necessário pelo repmgr para realizar operações quando a instância do PostgreSQL não está em execução e não há outra maneira de determinar o diretório de dados.
Prós do repmgr
- Repmgr fornece utilitários que ajudam a configurar nós primários e em espera e configurar a replicação.
- Não usa nenhuma porta extra para comunicação. Se você quiser realizar a alternância, só então será necessário configurar o SSH sem senha.
- Fornece uma notificação invocando os scripts do usuário para os eventos registrados.
- Executa failover automático em caso de falha do servidor primário.
Repmgr Contras
- repmgr não detecta se o standby está mal configurado com um nó desconhecido ou inexistente na configuração de recuperação. O nó será mostrado como em espera mesmo se estiver sendo executado sem se conectar ao nó principal/em cascata em espera.
- Não é possível recuperar o status de outro nó de um nó onde o serviço PostgreSQL está inativo. Portanto, ele não fornece uma solução de controle distribuído.
- Ele não lida com a recuperação da integridade de nós individuais.
Gerenciando a alta disponibilidade no #PostgreSQL – Parte II:Ferramenta repmgr de código aberto Clique para tuitar
Cenários de teste de alta disponibilidade
Realizamos alguns testes no gerenciamento de alta disponibilidade do PostgreSQL usando repmgr. Todos esses testes foram executados enquanto a aplicação estava rodando e inserindo dados no banco de dados PostgreSQL. O aplicativo foi escrito usando PostgreSQL Java JDBC Driver, aproveitando o recurso de failover de conexão.
Testes de servidor em espera
Sl. Não | Cenário de teste | Observação |
---|---|---|
1 | Eliminar o processo PostgreSQL | O servidor em espera foi marcado como com falha. Não houve interrupção na aplicação do gravador. A intervenção manual foi necessária para iniciar o processo do PostgreSQL novamente. |
2 | Parar o processo do PostgreSQL | O servidor em espera foi marcado como com falha. Não houve interrupção na aplicação do gravador. A intervenção manual foi necessária para iniciar o processo do PostgreSQL novamente. |
3 | Reinicialize o servidor | O servidor em espera foi marcado como com falha. Depois que o servidor foi inicializado após a reinicialização, o PostgreSQL foi iniciado manualmente e o servidor foi marcado como em execução. Não houve interrupção no aplicativo do gravador. |
4 | Parar o processo repmgrd | O servidor em espera não fará parte da situação de failover automatizado. O serviço PostgreSQL foi encontrado em execução. Não houve interrupção no aplicativo do gravador. |
Testes do servidor mestre/primário
Sl. Não | Cenário de teste | Observação |
1 | Eliminar o processo PostgreSQL |
|
2 | Parar o processo do PostgreSQL e trazê-lo de volta imediatamente após a expiração da verificação de integridade |
|
3 | Reinicialize o servidor |
|
4 | Parar o processo repmgr |
|
Testes de isolamento de rede
Sl. Não | Cenário de teste | Observação |
1 | A rede isola o servidor primário de outros servidores (todos têm o mesmo valor para localização na configuração do repmgr) |
|
2 | A rede isola o servidor principal de outros servidores (os servidores em espera têm o mesmo valor para localização, mas o principal tem um valor diferente para localização na configuração do repmgr) |
|
Inferência
repmgr fornece vários comandos para configurar e monitorar a replicação do PostgreSQL. É rico em recursos e também facilita o trabalho do administrador de banco de dados (DBA). No entanto, não é uma ferramenta de gerenciamento de alta disponibilidade completa, pois não gerenciará os recursos. A intervenção manual é necessária para garantir que o recurso esteja no estado adequado.
Então, neste post, discutimos os recursos e o funcionamento do Replication Manager do 2ndQuadrant. Em nosso próximo post, discutiremos os mesmos aspectos de alta disponibilidade usando Patroni by Zalando. Para usuários que desejam automatizar sua alta disponibilidade na nuvem, confira nossas soluções totalmente gerenciadas PostgreSQL no Azure e PostgreSQL na AWS.