Configurações no servidor mestre:
max_wal_senders = 1 wal_level = 'arquivo' archive_mode = ativado archive_command = 'cd .' wal_keep_segments = 10000
Configurações no servidor escravo: no arquivo recovery.conf:
Standby_mode = 'ligado' primary_conninfo = 'host=ipaddress of master user=repuser' trigger_file = '/tmp/postgresql.trigger.5432'
log_connections=on
está configurado no servidor master e slave
a entrada é feita para o usuário de replicação no arquivo pg_hba.conf no servidor mestre
replicação de host endereço ipad do usuário/32 confiança
ao tentar replicar, recebo o seguinte erro
2014-07-14 19:28:22 IST LOG: sistema de banco de dados foi desligado em recuperação em 2014-07-14 19:28:21 IST 2014-07-14 19:28:22 IST LOG: entrando no modo de espera 2014-07-14 19:28:22 IST AVISO: WAL foi gerado com wal_level=minimal, dados podem estar faltando 2014-07-14 19:28:22 DICA IST: Isso acontece se você definir temporariamente wal_level=min imal sem fazer um novo backup básico. 2014-07-14 19:28:22 IST LOG: estado de recuperação consistente alcançado em 0/19FFE28 2014-07-14 19:28:22 IST LOG: registro com comprimento zero em 0/19FFE28 2014-07-14 19:28:22 IST FATAL: o identificador do sistema de banco de dados difere entre o primário e o de espera 2014-07-14 19:28:22 IST DETAIL: O identificador principal é 6022019027749040119 , o identificador do standby é 6033562405193904122. 2014-07-14 19:28:23 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:23 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:24 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:24 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:25 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:25 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:26 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:26 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:27 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:27 IST FATAL: o sistema de banco de dados está inicializando "postgresql-2014-07-14_192822.log" 6630L, 756429C 2014-07-14 19:28:22 IST LOG: sistema de banco de dados foi desligado em recuperação em 2014-07-14 19:28:21 IST 2014-07-14 19:28:22 IST LOG: entrando no modo de espera 2014-07-14 19:28:22 IST AVISO: WAL foi gerado com wal_level=minimal, dados podem estar faltando 2014-07-14 19:28:22 DICA IST: Isso acontece se você definir temporariamente wal_level=minimal sem fazer um novo backup básico. 2014-07-14 19:28:22 IST LOG: estado de recuperação consistente alcançado em 0/19FFE28 2014-07-14 19:28:22 IST LOG: registro com comprimento zero em 0/19FFE28 2014-07-14 19:28:22 IST FATAL: o identificador do sistema de banco de dados difere entre o principal e o de espera 2014-07-14 19:28:22 IST DETAIL: O identificador do primário é 6022019027749040119, o identificador do standby é 6033562405193904122. 2014-07-14 19:28:23 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:23 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:24 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:24 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:25 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:25 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:26 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:26 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:27 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:27 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:28 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:28 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:29 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:29 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:30 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:30 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:31 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:31 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:32 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:32 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:33 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:33 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:34 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:34 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:35 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:35 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:36 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:36 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:37 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:37 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:37 IST FATAL: o identificador do sistema de banco de dados difere entre o principal e o de espera 2014-07-14 19:28:37 IST DETAIL: O identificador do primário é 6022019027749040119, o identificador do standby é 6033562405193904122. 2014-07-14 19:28:38 IST LOG: conexão recebida: host=[local] 2014-07-14 19:28:38 IST FATAL: o sistema de banco de dados está inicializando 2014-07-14 19:28:39 IST LOG: conexão recebida: host=[local] IST FATAL: o identificador do sistema de banco de dados difere entre o principal e o de espera 2014-07-14 19:28:37 IST DETAIL: O identificador do primário é 6022019027749040119, o identificador do standby é 6033562405193904122.
O que essas linhas significam?
quando eu executo este comando
service postgresql-9.3 start
Recebo o seguinte erro no arquivo startup.log
2014-07-15 11:25:59 IST FATAL: o arquivo de bloqueio "postmaster.pid" já existe 2014-07-15 11:25:59 DICA IST: Há outro postmaster (PID 25961) em execução no diretório de dados "/opt/postgres/PostgreSQL/9.3/data"?
Estenda a pergunta
Somos novos no código aberto do Postgresql. Não conseguimos entender a resposta a esta pergunta. Por favor, se possível, explique brevemente. Seguimos as instruções do livro 'Postgresql 9 Administration Cookbook'. Seguimos estes passos deste livro.
Execute os seguintes passos:
Identifique seus nós Master e Standby e certifique-se de que eles foram configurados de acordo com a receita de melhores práticas.
Configure a segurança de replicação. Crie ou confirme a existência do usuário de replicação no nó mestre
CREATE USER repuser SUPERUSER LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD 'changeme';
Permita que o usuário de replicação autentique. O exemplo a seguir permite acesso de qualquer endereço IP usando autenticação de senha criptografada; você pode querer considerar opções mais restritivas. Adicione a seguinte linha:
host replication repuser 127.0.0.1/0 md5
Defina as opções de log em postgresql.conf tanto no Master quanto no Standby, para que você obtenha mais informações sobre tentativas de conexão de replicação e falhas associadas.
log_connections = on
Defina max_wal_senders no Master em
postgresql.conf
, ou incremente se o valor já for diferente de zero.max_wal_senders = 1 wal_mode = 'archive' archive_mode = on archive_command = 'cd .'
Ajuste wal_keep_segments no Master em postgresql.conf. Defina um valor não superior à quantidade de espaço livre na unidade na qual o diretório pg_xlog está montado, dividido por 16 MB. Se o pg_xlog não estiver montado em uma unidade separada, não presuma que todo o espaço livre atual esteja disponível para arquivos de log de transações.
wal_keep_segments = 10000 # e.g. 160 GB
Ajuste os parâmetros de espera quente, se necessário (veja a receita posterior)
Faça um backup básico, muito semelhante ao processo para fazer um backup físico conforme descrito no capítulo de backup.
uma. Iniciar o backup
psql -c "select pg_start_backup('base backup for streaming rep')"
b. Copie os arquivos de dados (excluindo o diretório pg_xlog)
rsync -cva --inplace --exclude=*pg_xlog* \ ${PGDATA}/ $STANDBYNODE:$PGDATA
c. Pare o backup
psql -c "select pg_stop_backup(), current_timestamp"
Defina os
recovery.conf
parâmetros no Standby. Observe que o primary_ conninfo não deve especificar um nome de banco de dados, embora possa conter qualquer outra opção de conexão do PostgreSQL. Observe também que todas as opções em recovery.conf estão entre aspas, enquanto os parâmetros postgresql.conf não precisam estar.Standby_mode = 'on' primary_conninfo = 'host=192.168.0.1 user=repuser' trigger_file = '/tmp/postgresql.trigger.5432'
Iniciar servidor em espera
Monitore cuidadosamente o atraso da replicação até que o período de atualização termine. Durante o período de recuperação inicial, o atraso de replicação será muito maior do que normalmente esperaríamos. É recomendável definir hot_Standby = off apenas para o período inicial.
Parece que você está tentando replicar de um servidor para outro que não foi configurado usando uma cópia do servidor original. É por isso:
Porque cada novo
initdb
'd PostgreSQL obtém um novo identificador de sistema aleatório. Quando você copia uma instalação existente do PostgreSQL, ela mantém o mesmo identificador de sistema. É assim que o PostgreSQL pode acompanhar se um servidor pode reproduzir o WAL de outro.Você só pode usar a replicação física se a réplica for uma cópia (backup no nível do sistema de arquivos, por exemplo
pg_basebackup
) do mestre. Consulte a cobertura detalhada do manual sobre replicação para obter mais informações.Atualização :
As instruções mostradas acima devem ser boas, mas não são tão claras quanto poderiam ser.
O diretório de dados do servidor em espera deve ser substituído pelo backup básico que você criou na etapa 8, se existir em primeiro lugar.
Você não pode tornar uma instância existente do PostgreSQL em espera por outra sem substituir seu diretório de dados. Você precisa de uma cópia do diretório de dados do mestre para executar um modo de espera. Uma maneira comum de configurar isso é pegar um standby existente, excluir seu diretório de dados, substituí-lo por uma cópia do diretório de dados do mestre e, em seguida, configurá-lo como um escravo de replicação. Isso é o que eu acho que a etapa 8 deveria estar fazendo.
Em vez de fazer isso, acho que você provavelmente usou um diretório de dados existente para o escravo e tentou iniciá-lo como uma réplica do mestre. Isso não funcionará e resultará nos erros que você mostrou.
A documentação principal do PostgreSQL sobre replicação é o recurso principal e recomendado para obter informações. Eu sugiro ir lá primeiro.
Você também pode querer verificar repmgr , que ajuda a automatizar tarefas de replicação e failover.