Como configurar dois servidores idênticos para failover automático no PostgreSQL 9.1.
SO
Centos 5
PostgreSQL 9.1 compilado a partir do código fonte
A conta de usuário postgres existe em ambas as máquinas e tem uma chave ssh sem senha para conectar a ambas as máquinas.
Minha configuração atual:
Configuração do servidor mestre:
postgresql.conf:
listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16
wal_keep_segments = 8
archive_mode = on
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'
pg_hba.conf:
host replication all 10.0.66.1/32 trust
host replication all 10.0.66.2/32 trust
Servidor em espera
postgresql.conf e pg_hba.conf são idênticos ao que está configurado no servidor mestre.
recovery.conf:
standby_mode = 'on'
primary_conninfo = 'host=10.0.66.1'
trigger_file = '/opt/pgsql91/data/trigger.txt'
Graças ao hzRoot, agora entendo como alternar o servidor do modo de espera para o mestre.
Usando os comandos a seguir, posso sincronizar o novo escravo com o novo mestre e, em seguida, obter o backup e a execução da replicação.
No novo mestre (10.0.66.2)
- su - postgres
- toque em trigger.txt em /opt/pgsql91/data/
- recovery.conf torna-se recovery.done
- psql -c ";SELECT pg_start_backup('backup', true)";
- rsync -a -v -e ssh /opt/pgsql91/data/ 10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
- psql -c ";SELECT pg_stop_backup()";
No novo escravo (10.0.66.1)
- crie o recovery.conf : cp recovery.done to recovery.conf
- vi recovery.conf alterar o endereço IP: primary_conninfo = 'host=10.0.66.2'
- iniciar postgresql
Então minhas perguntas agora são:
- Essa é a maneira correta de trocar de papéis?
- Alguém automatizou esse processo, se sim, o que você fez?
- Se a replicação síncrona estiver habilitada, notei que o novo servidor mestre não confirmará nenhuma transação porque está aguardando a resposta do escravo. No entanto, não há escravo porque o outro servidor, o antigo mestre, está inativo. Isso está correto ou preciso desabilitar temporariamente a replicação síncrona enquanto o novo escravo estiver inativo?
Confira repmrg :
Ele faz duas coisas:
Para failover automático, repmgrd faz o truque e não é um SPOF em sua rede, como pgPool. No entanto, ainda é importante monitorar todos os demônios e trazê-los de volta após o fracasso.
A versão 2.0 está prestes a ser lançada, incluindo RPM's.
em seu arquivo recovery.conf você deve adicionar uma linha que diga ao postgres para fazer o failover do master para o slave. você deve adicionar
quando você cria este arquivo em determinado caminho. os nós serão alterados. (arquivo não inclui nada, é apenas um gatilho)
você pode encontrar informações adicionais sobre replicação de streaming
por outro lado, talvez seja possível criar automaticamente com alguns truques, mas usar ferramentas de monitoramento e fazer failover manual será melhor.
Alguém já pensou em usar pgpool-II para isso?
http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html
Estou configurando a replicação para PostgreSQL. Parece que a parte complicada acontece quando o velho mestre volta.
Pelo que li, o pgpool parece que pode automatizar a maior parte disso. Porém não tenho certeza se aproveita os recursos de replicação já presentes no PostgreSQL 9.1.