Failover e replicação do PostgreSQL

14

Estou avaliando o PostgreSQL 9.1 e tenho algumas perguntas relacionadas aos detalhes de failover e replicação.

Eu tenho alguns cenários de teste. Primeiro com um servidor Master e poucos escravos. No caso de o Mestre travar, quero que um dos Escravos se torne um Mestre. Após o Master voltar ao estado normal, ele deve sincronizar com outros servidores no cluster (aplicar todas as alterações feitas enquanto estava inoperante) e reivindicar novamente a função Master ou se tornar um Escravo.

Os problemas que vejo no PostgreSQL e no cenário atual são os seguintes.

1) Não vejo ferramentas internas para detectar a interrupção do servidor mestre. Eu li que o pgpool pode lidar com isso e criar um arquivo acionador, eu também li que as pessoas usam batimentos cardíacos do Linux ou ferramentas semelhantes para isso. Ok, posso detectar o failover e atribuir um novo mestre no cluster. Os outros escravos entenderão que existe um novo mestre e devem fazer backup agora?

2) Não entendo o procedimento de failback. As configurações de host mestre e escravo são diferentes. Então, terei dois mestres após travar o failback do mestre? Como os servidores voltarão a sincronizar? Eu vi apenas soluções manuais como "transferir pasta de dados para o servidor e reiniciá-la". Então, qual é a solução ou a melhor prática ou pelo menos o principal principal aqui?

3) Como devo lidar com a interrupção do servidor no lado do cliente? Quando crio a conexão, especifiquei explicitamente o IP do servidor. Devo desenvolver algum tipo de ConnectionManager que conheça minha estrutura Master-Slave, envie solicitações somente ao Master e, em caso de perda de conexão, mude para servidores de backup e assim por diante? Eu li que o pgpool pode ser um ponto de entrada para aplicativos e gerenciar conexões da maneira correta. O pgpool é a única solução aqui? Ele lida bem com failover e failback?

4) Existem soluções (comerciais também) para evitar a cópia manual dos dados, reconfigurar as instâncias do PostgreSQL e outras coisas que devem ser feitas manualmente? Então, tipo de configuração de cluster quando todos estão sincronizados, fica claro quem é o Mestre e tudo muda automaticamente sem a atenção do operador?

De acordo com estes tópicos e artigos

Replicação de streaming e failover no PostgreSQL

Automatizando o failover no PostgreSQL 9.1

http://denishjpatel.blogspot.com/2010/11/possibility-of-graceful-switchover.html

não existe uma solução totalmente automática para resolver essas questões. Estou certo?

Obrigado!

Sotérico
fonte
Provavelmente vale a pena apontar para os 9,2 documentos relevantes .
Mike Sherrill 'Cat Recall'

Respostas:

4
  1. os escravos não entenderão o novo mestre. você deve fazer isso manualmente.
  2. sim, eles são diferentes e você deve criar novos para o antigo mestre. de qualquer modo, o antigo modo de espera continuará a funcionar como mestre, mas você deve definir max_wal_senders nesse nó. você também deve definir o pg_hba.conf do novo mestre após o failover. após o failover (quando os nós alteram as funções master-> slave slave-> master), você deve transferir novos arquivos wal para o novo diretório de dados das pastas em espera, definido no arquivo recovery.conf. ou simplesmente você pode usar o rsync.

  3. Pode ser que você possa usar o pgbouncer. Dessa forma, você alterará os endereços do servidor pgbouncer para novo mestre.

  4. O EnterpriseDB possui algumas ferramentas comerciais. Pode ser que você possa vê-los.

e finalmente sim, você está certo. não existe uma solução totalmente automática para resolver essas questões.

sftsz
fonte