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!