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!
fonte
Respostas:
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.
Pode ser que você possa usar o pgbouncer. Dessa forma, você alterará os endereços do servidor pgbouncer para novo mestre.
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.
fonte