Jump to content
Fórum Script Brasil
  • 0

Replicação


carlosleandro2

Question

Boa tarde pessoal!!

Estou precisando de uma ajuda sobre replicação postgresql 9.4 no Windows, porque não possuo muita experiência...

No master eu mudei as seguintes configurações:

postgresql.conf usei assim...

listen_addresses = '*'

wal_level = hot_standby

max_wal_senders = 1

wal_keep_segments = 20

no pg_hba.conf eu usei:

host replication usuario 10.1.1.2/32 md5

No slave eu usei assim..

hot_standby = on

e criei recovery.conf

assim...

standby_mode = 'on'

primary_conninfo = 'host=10.1.1.1 port=5432 user=usuario password=*******'

trigger_file = '/bd/secundario/failover.trg'

E não consigo fazer funcionar...

Gostaria de uma direção, se alguém puder me ajudar, por favor, serei muito grato...

Obrigado!!!

Link to comment
Share on other sites

Recommended Posts

  • 0

A idéia é essa aí mesmo, mas você fez a cópia dos arquivos (da pasta data) do servidor master para o slave? Você tem que copiar todos os arquivos, exceto a pasta pg_xlog e o arquivo postgresql.conf. Se o master puder ser parado, você deve fazê-lo antes de começar a cópia (o slave também deve ser parado). Caso ele não possa ser parado, você executar "select pg_start_backup('clone',true);" antes de iniciar, então fazer a cópia e depois executar "select pg_stop_backup();", pelo psql ou pelo pgAdmin III. Eu fiz uns arquivos de lote (.bat) que já fazem tudo isso, mas estão lá no serviço. Se tiver interesse me fala que eu compartilho e te passo o link.

Depois da cópia, inicie o slave primeiro e depois o master. Faça alguma alteração no master (nas tabelas ou registros) e depois confira no slave se está igual. Eu também fiz um programa em .NET que confere, a cada 1 minuto, se os bancos estão sincronizados, pra ficar mais fácil de monitorar.

Abraços!

Link to comment
Share on other sites

  • 0

Obrigado mais uma vez Graymalkin!!!

Então, eu configurei tudo certinho, e meu recovery ficou assim:

standby_mode = 'on'
primary_conninfo = 'host = IPMASTER port = MASTER user=TESTE password=TESTE1'
restore_command = 'cp / PGDATA / archive /% f "% p"'
trigger_file = '/tmp/psql.trigger'
Mas quando eu derrubo o Master a conexão do slave também cai... eu preciso digitar algum comando?
Link to comment
Share on other sites

  • 0

Você está acessando ambos pelo PgAdmin III? Criou separadamente uma conexão para cada com seus respectivos IPs? Ao derrubar o master, você deveria continuar acessando o slave sem problemas, porém não conseguiria escrever nele. Para conseguir escrever, você vai precisar criar o arquivo psql.trigger na pasta tmp dentro da pasta data (como especificado na sua configuração). E esse comando de restore aí não adianta, porque você está no Windows e isso seria para o Linux. Outra coisa também são os usuários, você criou um específico para a replicação no Master?

Tente seguir passo a passo este tutorial aqui: http://eulerto.blogspot.com.br/2010/11/hot-standby-e-streaming-replication.html

Somente na parte da cópia, onde é utilizado o rsync, você deverá usar (estando dentro da pasta bin):

pg_basebackup -h IP_SERVIDOR -D ..\data -U USUARIO_REPLICADOR -v -P

Qualquer dúvida, estamos aí.

Link to comment
Share on other sites

  • 0

Bom dia, tudo bem? e desculpa o incomodo...

No tutorial que você me passou tem esse caminho /bd/primario/ e /bd/secundario, o que seria isso?

e o comando ficaria assim?

pg_basebackup -av --exclude postmaster.pid \--exclude postgresql.conf --exclude pg_hba.conf \--exclude backup_label --exclude pg_xlog/* --exclude pg_log/* \/bd/primario/ postgres@ipslave:/bd/secundario

Link to comment
Share on other sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

Valeu pela força... esse usuario_replicador seria o nome de usuario?

e esse .. existe mesmo?

É o nome do usuário que faz a replicação, que você cria em um momento do tutorial. Sim, o "..\data" refere-se pasta "data" que está no diretório anterior, pois para executar isso você vai estar na pasta "bin" (se você está em "C:\Program Files\PostgreSQL\9.4\bin" e quer acessar "C:\Program Files\PostgreSQL\9.4\data" basta usar "..\data", pois o ".." seria o mesmo que "C:\Program Files\PostgreSQL\9.4").

Abraços!

Link to comment
Share on other sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

Bom dia, tudo bem? e desculpa o incomodo...

No tutorial que você me passou tem esse caminho /bd/primario/ e /bd/secundario, o que seria isso?

e o comando ficaria assim?

pg_basebackup -av --exclude postmaster.pid \--exclude postgresql.conf --exclude pg_hba.conf \--exclude backup_label --exclude pg_xlog/* --exclude pg_log/* \/bd/primario/ postgres@ipslave:/bd/secundario

Lá no caso do tutorial ele está usando Linux e os bancos dele estão nestes caminhos, mas esse não é o seu caso. E não, a sintaxe do comando do pg_basebackup é a que passei anteriormente. O que você copiou aí é o que seria utilizado no rsync (no caso do Linux).

Hoje não terei tempo, mas amanhã vou tentar fazer um exemplo passo a passo pra você. Só preciso de algumas informações para adequar o exemplo:

1) Qual o IP do servidor master?

2) Qual o IP do servidor slave?

3) A pasta "data" (onde realmente fica o banco) está no caminho padrão ("c:\Program Files\PostgreSQL\9.4\data") em ambos?

Abraços!

Link to comment
Share on other sites

  • 0
Graymalkin

Graymalkin boa tarde

Gostaria de lhe pedir uma ajuda por favor, meu emprego está dependendo de uma replicação no postgres. Estou com dois servidores de teste, quando funcionar eu coloco no servidor de produção vou descrever o cernário e o que eu já fiz.

Servidor master

ip: 192.168.99.176

banco: seta

pasta dos arquivos E:/setadb/data

Servidor slave

ip: 192.168.99.175

banco seta

pasta dos arquivos E:/setadb/data

Eu segui o tutorial do Euler Taveira, muito bom por sinal, apesar de estar em linux, eu consegui fazer com que o servidor master iniciasse depois das alterações, mas o servidor slave não inicia, quando eu coloco o arquivo recovey.conf e tento iniciar o serviço ele não inicia. Eu posso trabalhar com os servidores parados então uma das minhas duvidas é: Realmente é necessario copiar todo o servidor master para o slave, sendo eles identicos?

e porque não consigo iniciar com o arquivo recovery.conf presente?

vou colocar o conteudo do recovery.conf para você ver

standby_mode = 'on'

primary_conninfo = 'host=192.168.99.176 port=5432 user=seta password=xxxxxxxx'

trigger_file = 'E:\setadb\data\failover.trg'

Você pode me ajudar?

Link to comment
Share on other sites

  • 0

Boa noite, Paulo

Respondendo a sua primeira pergunta, não eles não são totalmente idênticos. Talvez o seu problema esteja justamente aí na cópia. Os arquivos postgresql.conf e pg_hba.conf e as pastas pg_xlog e pg_log *não* devem ser copiadas do master para o slave. Até porque, em relação ao postgresql.conf e ao pg_hba.conf você fará modificações diferentes neles em ambos (master e slave). Faça o teste novamente e me diga se deu certo.

Abraços!

Link to comment
Share on other sites

  • 0

Bom dia meu amigo

Olha so, era isso mesmo, eu não copiava, e em todos os tutoriais diziam pra copiar, mas como eu pensava que o banco era do zero não precisava, ok, essa parte eu aprendi, agora eu estou olhando pro log do servidor slave, aparece a mensagem:(vou coloca-la na integra) 2015-04-17 17:51:55 BRT FATAL: não pôde conectar ao servidor principal: FATAL: nenhuma entrada no pg_hba.conf para conexão de replicação da máquina "192.168.99.175", usuário "seta", SSL desabilitado.

Até agora foi o mais perto que eu consegui chegar da replicação propriamente dita, acredito que já avancei muito, pois agora o servidor até tenta se comunicar com o master mas não consegue, eu revisei todos os arquivos e não sei o que pode estar acontecendo.

Lembrando: master: 192.168.99.176 - slave: 192.168.99.175

Edited by paulo_ti
Link to comment
Share on other sites

  • 0

Beleza, agora está quase. O que falta agora é só configurar o pg_hba.conf para aceitar conexões dentro da sua rede local. Para isso, abra o arquivo pg_hba.conf no Bloco de Notas e adicione a seguinte linha no final dele:

host    replication     seta    192.168.99.1/24         md5
Faça isso em ambos (master e slave) e depois reinicie (você poderia só parar o serviço e iniciá-lo novamente, mas já tive um caso onde só funcionou depois de reiniciar as máquinas).
Abraços!
Link to comment
Share on other sites

  • 0

Meu deus, agora ele falou o seguinte, replicacao em fluxo conectou-se com sucesso ao servidor principal.

Posso testar agora? Tipo, fazer uma alteração no servidor principal e verificar se replicou no slave? Ou tem outro modo de verificar isso?

Edited by paulo_ti
Link to comment
Share on other sites

  • 0

Issooo, replicou meu amigo, replicou sem problemas. Assim, eu vejo que replicou pois eu atualizei um registro pelo meu sistema (ERP) que está conectado ao servidor principal, e depois eu fui no servidor slave e dei um comando select neste registro, eureca, esta alterado, mas eu não consigo conectar pelo meu ERP no servidor slave, ele diz mais ou menos que operações de escrita não são permitidas, acho ele esta somente leitura, correto? pois quando eu tento logar o sistema tenta gravar na tabela de log informando a hora e a data que um determinado usuario acessou o sistema, como ele so esta fazendo leituras eu não consigo acessar pelo ERP, esta correto essa teoria?

Link to comment
Share on other sites

  • 0

Exatamente, o slave é somente leitura. Para promover o slave para master (e quebrar a replicação) você só precisa criar o arquivo especificado em trigger_file do seu recovery.conf. Esse é o "gatilho" para ser usado caso o seu master venha a dar algum problema e você precise continuar o bom andamento do serviço. E, neste caso, o slave passando a ser o master, a escrita é permitida e a replicação pára, devendo ser refeita essa sincronia manualmente depois (com a cópia dos arquivos do jeito que você fez para a replicação funcionar).

Certo?

Abraços!

Link to comment
Share on other sites

  • 0

Bom dia meu amigo...

Entendi, agora olha só, eu fiz alguns testes nestes servidores:

O primeiro teste eu restaurei um backup completo no master com, sucesso, tudo foi replicado corretamente

O segundo teste eu parei o servidor slave e tentei alterar alguma coisa no master, cara ele não funcionou sem o slave estar ativo, tem alguma configuração que eu consiga continuar o master mesmo com o slave parado?

Link to comment
Share on other sites

  • 0

Era pra funcionar normalmente, sem o slave estar ativo, e sem ter que fazer alguma configuração especial para isso. O máximo que aconteceria seria quebrar a replicação ao ativar novamente o slave. Você tem certeza que parou somente o slave? E qual é a mensagem de erro exibida ao tentar fazer alguma operação no master?

Abraços!

Link to comment
Share on other sites

  • 0

Bom dia meu amigo, como vai?

Então, estive off por algum tempo cuidando de outros assuntos, mas essa semana ficarei, acredito eu, por conta deste servidor.

Olha só, ele não exibe mensagem alguma de erro, simplesmente quando o servidor slave cai, o master não aceita mais requisições, mesmo pelo pgadminIII eu não acesso, muito estranho, fica rodando, rodando rodando, como se estivesse travado entende?. Vou rever os scripts e posto o resultado, mas a replicação acontece normalmente quando ambos estão funcionando.

Mais uma vez obrigado pela ajuda.

PAULO

Link to comment
Share on other sites

  • 0

Boa tarde meu amigo.

Realmente, quando eu simulo uma queda na rede do servidor slave o servidor master simplesmente para de receber requisições. A mensagem no log é a seguinte:

2015-05-06 16:28:19 BRT LOG: TERMINADO PROCESSO WALSENDER POR CAUSA DO TEMPO DE ESPERA DA REPLICACAO

E quando eu volto o servidor slave , tudo acontece normalmente, aparece a mensagem: servidor em espera "walreceiver" agora é um servidor em espera síncrono com prioridade 1.

Não deveria ser assincrono?

Obrigado

Link to comment
Share on other sites

  • 0

Encontrei o erro EURECA....

Um parametro utilizado no servidor master estava fazendo com que ambos trabalhassem de forma sincrona, com isso ambos deveriam estar sempre ligados e disponiveis, eliminando esse parametro eles passam a trabalhar de forma assincrona, sendo assim, quando o slave para o master continua.

Agradeço imensamente a ajuda e se precisar de mim estou a disposição.

att

Ops, o parametro é: synchronous_standby_names = *, ele deve ficar desativado

PAULO

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...