Como se configura dois servidores idênticos para failover automático no PostgreSQL 9.1.
OS
Centos 5
PostgreSQL 9.1 compilado a partir do código-fonte
A conta de usuário do postgres existe nas duas máquinas e possui uma chave ssh sem senha para conectar-se às duas máquinas.
Minha configuração atual:
Configuração do servidor principal:
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 principal.
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 mudar 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 de 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 em recovery.conf
- vi recovery.conf altere o endereço IP: primary_conninfo = 'host = 10.0.66.2'
- iniciar postgresql
Então, minhas perguntas são agora:
- Essa é a maneira correta de trocar de função?
- Alguém automatizou esse processo? Em caso afirmativo, o que você fez?
- Se a replicação síncrona estiver ativada, 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, no outro servidor, o antigo mestre está inoperante. Isso está correto ou preciso desativar temporariamente a replicação síncrona enquanto o novo escravo estiver inativo?
fonte
Respostas:
Confira repmrg :
Faz duas coisas:
Para failover automático, o repmgrd faz o truque e não é um SPOF na sua rede, como o pgPool. No entanto, ainda é importante monitorar todos os daemon e trazê-los de volta após a falha.
A versão 2.0 está prestes a ser lançada, incluindo RPMs.
fonte
no seu arquivo recovery.conf, adicione uma linha que diga ao postgres para failover do mestre para o escravo. você deveria adicionar
quando você cria este arquivo no caminho especificado. nós mudarão. (o arquivo não inclui nada, é apenas um gatilho)
você pode encontrar informações adicionais sobre replicação de streaming
por outro lado, pode ser possível criar automaticamente com alguns truques, mas usar ferramentas de monitoramento e fazer o failover manual será melhor.
fonte
Alguém já pensou em usar o pgpool-II para isso?
http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html
Estou configurando a replicação para o 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. No entanto, não tenho certeza se aproveita os recursos de replicação já presentes no PostgreSQL 9.1.
fonte