Mudanças entre as edições de "Replicação no PostgreSQL"

De PJe
Ir para: navegação, pesquisa
(Estrutura da MASTER)
(Testes realizados a época da implantação)
 
(71 edições intermediárias de um usuário não apresentadas)
Linha 14: Linha 14:
 
<font color=red>NOTA:</font> atenção para executar os comandos no servidor correto.  
 
<font color=red>NOTA:</font> atenção para executar os comandos no servidor correto.  
  
==== Estrutura da MASTER ====
+
=== Estrutura da MASTER ===
  
 
Serviço:<br>
 
Serviço:<br>
 
<code><span style="background:#E6E8FA;"> usr/pgsql-9.5/bin/postmaster -p 5432 -D /var/lib/pgsql/9.5/data </span></code>
 
<code><span style="background:#E6E8FA;"> usr/pgsql-9.5/bin/postmaster -p 5432 -D /var/lib/pgsql/9.5/data </span></code>
  
Backups de WAL:
+
Backups de WAL:<br>
<code><span style="background:#EAEAAE;"> /var/local/backups/pgsql/prd/nome do servidor (local original) </span></code>
+
<code><span style="background:#E6E8FA;"> /var/local/backups/pgsql/prd/nome do servidor (local original) </span></code>
  
Backup HOT:
+
Backup HOT:<br>
<code><span style="background:#EAEAAE;">  /var/local/backups/pgsql/prd/nome do servidor (local original) </span></code>
+
<code><span style="background:#E6E8FA;">  /var/local/backups/pgsql/prd/nome do servidor (local original) </span></code>
  
 
==== Atividades PRÉ no MASTER ====
 
==== Atividades PRÉ no MASTER ====
  
1. Configurar os parâmetros de banco de produção editando o arquivo '''postgresql.conf''' disponível em:
+
'''Passo 1.''' Configurar os parâmetros de banco de produção editando o arquivo '''postgresql.conf''' disponível em: <code><span style="background:#E6E8FA;"> /var/lib/pgsql/9.5/data </span></code>
   /var/lib/pgsql/9.5/data)
+
 
 +
   listen_address = '*' <small>--> Reponderá por qualquer ip cadastrado no server</small>
 +
  wal_level = hot_standby
 +
  max_wal_senders = 5  <small>--> Número máximo de servidores slave que estarão plugados no master </small>
 +
  wal_keep_segments = 20  <small>--> Facilita o início da replicação quando o banco não está em modo ARCHIVE </small>
 +
 
 +
'''Passo 2.''' Colocar a entrada abaixo no final do arquivo '''PG_HBA.CONF'''
 +
 
 +
  host  replication    replicador_cluster  zincopir01.cnj.jus.br  md5
 +
 
 +
Porém esses passos já foram executados anteriormente (estão aqui apenas para fins de conhecimento).
 +
 
 +
'''Observação:''' Para que as configurações dos passos 1 e 2 no MASTER sejam ativadas é necessário reiniciar o serviço (em alguns ambientes esses parâmetros já estão configurados). Essa ação indisponibiliza o banco.
 +
 
 +
  systemctl stop postgres-9.5.service   
 +
  systemctl start postgres-9.5.service   
 +
 
 +
'''Passo 3.''' Criar o usuário de BD que irá fazer a replicação.
 +
  psql -p<porta>  (  psql -p 5432 )
 +
  CREATE ROLE replicador_cluster WITH REPLICATION PASSWORD '*****' LOGIN; <small>--> para saber se o usuário já existe</small>
 +
  select * from pg_user;    ou    \du+
 +
 
 +
==== Atividades PRÉ no STANDBY ====
 +
 
 +
'''Passo 1.''' Fazer uma cópia dos arquivos de parâmetros localizados na área do backup e ajustá-lo para ser utilizado no banco STANDBY (será utilizado mais a frente).
 +
  cd /var/local/backups/pgsql/prd/zincopi01/
 +
  mv postgresql.conf /var/lib/pgsql/9.5
 +
  mv pg_hba.conf /var/lib/pgsql/9.5
 +
  cd /var/lib/pgsql/9.5
 +
  vi postgresql.conf
 +
  hot_standby = on <small>(encontrar o parâmetro no arquivo e setar para “on”)</small>
 +
 
 +
'''Passo 2.''' Criar o '''recovery.conf''' a ser utilizado mais a frente.
 +
<code><span style="background:#E6E8FA;"> cd /var/lib/pgsql/9.5/ </span></code>
 +
 
 +
  vi recovery.conf <small>(inserir as linhas abaixo)</small>
 +
  standby_mode='on'
 +
  primary_conninfo = 'host=server port=number user=replicador_cluster password=????? application_name=?????'
 +
  trigger_file ='/var/lib/pgsql/9.5/data/rep.trigger'
 +
 
 +
===Procedimentos Restauração Backup===
 +
 
 +
'''Observação:''' Existem diversas formas de fazer o procedimento abaixo. Por exemplo:<br>
 +
1) Com o banco Master aberto ou fechado; e <br>
 +
2) Com RSYNC, PG_BASEBACKUP e Restore dos arquivos de backup físico.
 +
 
 +
====Banco de Dados (MASTER)====
 +
 
 +
'''Passo 1.''' Realizar um backup físico do banco, como sugestão utilizar o script abaixo.
 +
  var/lib/pgsql/scripts/bkp_hot_cluster.sh nome_do_banco
 +
  ll /var/local/backups/pgsql/prd/nome_do_banco/ -tr
 +
 
 +
'''Passo 2.''' Gerar um backup WAL para que os dados mais recentes, se existirem, estejam no backup a ser utilizado para montar a replicação.
 +
  /var/lib/pgsql/scripts/bkp_wal_cluster.sh nome_do_banco
 +
  ll /var/local/backups/pgsql/prd/nome_do_banco/ -tr
 +
 
 +
====Banco de Dados (STANDBY)====
 +
 
 +
'''Passo 1.''' Por segurança, desconecte-se da Master.
 +
 
 +
'''Passo 2.''' Caso o servidor já tenha um cluster postgres no mesmo diretório, certificar-se que o serviço do postgres esteja desligado.
 +
  ps -ef | grep postgres
 +
  systemctl stop postgres-9.5.service
 +
 
 +
'''Passo 3.''' Descompactar o arquivo TAR a partir do raiz, a estrutura de diretórios ficará igual ao do servidor de produção.<br>
 +
<font color=red>'''ATENÇÃO:'''</font> caso exista arquivos com mesmos nomes nos respectivos diretórios, eles serão sobrescritos, cuidado para '''NÃO''' executar os comandos no banco MASTER.
 +
  cd /var/local/backups/pgsql/prd/nome_do_banco/
 +
  tar xvf bkp_hot_postgres_5432_nome_do_banco_<MAIS_ATUAL>.tar.bz2  -C  /
 +
  ...
 +
 
 +
'''Passo 4.''' Descompactar apenas os arquivos WAL posteriores ao backup HOT restaurado no passo acima (ajusta yyyy-mm-dd).
 +
  for i in bkp_wal_postgres_5432_nome_do_banco_yyyy-mm-dd*.bz2; do tar xvf $i -C /; done
 +
'''Observação:''' Os arquivos serão extraídos em <code><span style="background:#E6E8FA;">/var/lib/pgsql/9.5/data/pg_arch/</span></code>
 +
 
 +
'''Passo 5.''' Mover os arquivos descompactados no passo anterior para o local onde o banco de replicação conseguirá ler:
 +
  mv /var/lib/pgsql/9.5/data/pg_arch/*  /var/lib/pgsql/9.5/data/pg_xlog/
 +
 
 +
'''Passo 6.''' Copiar os arquivos: '''postgresql.conf'''  e  '''pg_hba.conf''' do diretório <code><span style="background:#E6E8FA;">/var/lib/pgsql/9.5</span></code> para o diretório do cluster:
 +
  cd  /var/lib/pgsql/9.5
 +
  cp -p recovery.conf /var/lib/pgsql/9.5/data/
 +
 
 +
'''Para confirmar se os arquivos foram substituídos, verificar as datas ou se os parâmetros contêm as modificações realizadas.'''
 +
* <code><span style="background:#E6E8FA;">cd  /var/lib/pgsql/9.5/data/</span></code>
 +
* Verificar os arquivos: '''postgresql.conf''', '''pg_hba.conf''', '''recovery.conf'''.
 +
 
 +
'''Passo 7.''' Verificar se o parâmetro '''hot_standby''' está ativado, caso negativo, ativar (essa atividade foi adicionada a este procedimento posteriormente para atender uma demanda no momento de uma recriação da replicação).
 +
  cd /var/lib/pgsql/9.5/data/
 +
  vi postgresql.conf
 +
 
 +
'''Passo 8.''' Inicializar o banco STANDBY e verificar o log para saber se o banco está recebendo as atualizações
 +
  systemctl start postgres-9.5.service   
 +
  hot_standby = on <small> --> verificar se esse parâmetro está configurado</small>
 +
  vi /var/lib/pgsql/9.5/data/pg_log/postgresql-sss-hh.log <small>--> ajustar ao dia da semana e hora</small>
 +
  tail -50 /var/lib/pgsql/9.5/data/pg_log/postgresql-sss-hh.log  <small>--> ajustar ao dia da semana e hora</small>
 +
 
 +
 
 +
==== Atividades PÓS no MASTER ====
 +
 
 +
'''Passo 1.''' Validar se a replicação está sendo feita:
 +
  psql -p <porta>
 +
  \x              #modo extendido <small>--> liga</small>
 +
  table pg_stat_replication;
 +
  \x              #modo extendido <small>--> desliga modo extendido</small>
 +
 
 +
'''Passo 2.''' Criar uma tabela auxiliar, inserir uma linha.
 +
  psql -p <porta>
 +
  \list
 +
  \c adm
 +
  \dt
 +
  create table teste (i integer);
 +
  insert into teste values (1);
 +
 
 +
'''Passo 3.''' No banco '''STANDBY''', verificar se a tabela e a linha existem.
 +
  psql -p <porta>
 +
  select * from teste;
 +
 
 +
'''Passo 4.''' No banco '''MASTER''', remover a tabela de teste no banco.
 +
  psql -p <porta>
 +
  drop table teste;
 +
 
 +
== Possíveis erros no log e respectivas soluções ==
 +
 
 +
'''1.''' <font color=red>'''Erro:'''</font> Se no log informar que está faltando arquivos WAL para sincronizar, executar esse comando <code><span style="background:#E6E8FA;">for i in bkp_wal *.gz; do tar xvf $i -C /; done</span></code> para descompactar os arquivos WAL e movê-los para dentro do '''pg_xlog''' com o objetivo de que seja aplicado. <br>
 +
<font color=blue>'''Solução:'''</font> Trazer os arquivos de WAL da origem restantes e salvá-los dentro do '''pg_xlog'''.
 +
 
 +
'''2.'''  <font color=red>'''Erro:'''</font> 2015-02-03 16:13:14 BRST [20938]: [7-1] user=,db= LOG:  unexpected pageaddr 19E/58000000 in log segment 000000010000019E00000096, offset 0
 +
2015-02-03 16:13:14 BRST [21185]: [1-1] user=,db= LOG:  started streaming WAL from primary at 19E/96000000 on timeline 1
 +
2015-02-03 16:13:14 BRST [21185]: [2-1] user=,db= FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 000000010000019E00000096 has already been removed. <br>
 +
<font color=blue>'''Solução:'''</font>Verificar os arquivos de WAL dentro do diretório '''pg_arch'''
 +
<code><span style="background:#E6E8FA;">/var/lib/pgsql/9.5/data/pg_arch/</span></code> e MOVÊ-LOS para o diretório '''pg_xlog'''
 +
<code><span style="background:#E6E8FA;">/var/lib/pgsql/9.5/data/pg_xlog</span></code>
 +
  mv -v /var/lib/pgsql/9.5/data/pg_arch/<arquivo> /var/lib/pgsql/9.5/data/pg_xlog/
 +
 
 +
'''3.''' <font color=red>'''Erro:'''</font> 2015-02-03 18:32:09 BRST [22086]: [1-1] user=,db= LOG:  started streaming WAL from primary at 19E/95000000 on timeline 1 2015-02-03 18:32:09 BRST [22086]: [2-1] user=,db= FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 000000010000019E00000095 has already been removed
 +
 
 +
'''4.''' <font color=red>'''Erro:'''</font> Após o restore do banco e tentar conectar no banco através do comando:
 +
<code><span style="background:#E6E8FA;">psql –p 5432</span></code> '''FATAL: the database system is starting up''' <br>
 +
<font color=blue>'''Solução:'''</font>Verificar se o parâmetro '''hot_standby''' está ativado no arquivo '''postgresql.conf'''.
 +
  vi /var/lib/pgsql/9.5/data/postgresql.conf
 +
  hot_standby = on

Edição atual tal como às 16h52min de 14 de outubro de 2016

Este manual tem a a finalidade de mostrar os passos necessários para implementação da replicação do banco PJe.

Conteúdo

[editar] Procedimento de Criar Replicação

Os passos abaixo ora são executados no MASTER e ora no STANDBY.

MASTER Produção
STANDBY Cópia

NOTA: atenção para executar os comandos no servidor correto.

[editar] Estrutura da MASTER

Serviço:
usr/pgsql-9.5/bin/postmaster -p 5432 -D /var/lib/pgsql/9.5/data

Backups de WAL:
/var/local/backups/pgsql/prd/nome do servidor (local original)

Backup HOT:
/var/local/backups/pgsql/prd/nome do servidor (local original)

[editar] Atividades PRÉ no MASTER

Passo 1. Configurar os parâmetros de banco de produção editando o arquivo postgresql.conf disponível em: /var/lib/pgsql/9.5/data

 listen_address = '*' --> Reponderá por qualquer ip cadastrado no server
 wal_level = hot_standby
 max_wal_senders = 5  --> Número máximo de servidores slave que estarão plugados no master 
 wal_keep_segments = 20  --> Facilita o início da replicação quando o banco não está em modo ARCHIVE 

Passo 2. Colocar a entrada abaixo no final do arquivo PG_HBA.CONF

 host   replication    replicador_cluster   zincopir01.cnj.jus.br   md5

Porém esses passos já foram executados anteriormente (estão aqui apenas para fins de conhecimento).

Observação: Para que as configurações dos passos 1 e 2 no MASTER sejam ativadas é necessário reiniciar o serviço (em alguns ambientes esses parâmetros já estão configurados). Essa ação indisponibiliza o banco.

 systemctl stop postgres-9.5.service    
 systemctl start postgres-9.5.service    

Passo 3. Criar o usuário de BD que irá fazer a replicação.

 psql -p<porta>  (  psql -p 5432 )
 CREATE ROLE replicador_cluster WITH REPLICATION PASSWORD '*****' LOGIN; --> para saber se o usuário já existe
 select * from pg_user;    ou     \du+

[editar] Atividades PRÉ no STANDBY

Passo 1. Fazer uma cópia dos arquivos de parâmetros localizados na área do backup e ajustá-lo para ser utilizado no banco STANDBY (será utilizado mais a frente).

 cd /var/local/backups/pgsql/prd/zincopi01/
 mv postgresql.conf /var/lib/pgsql/9.5
 mv pg_hba.conf /var/lib/pgsql/9.5
 cd /var/lib/pgsql/9.5
 vi postgresql.conf
 hot_standby = on (encontrar o parâmetro no arquivo e setar para “on”)

Passo 2. Criar o recovery.conf a ser utilizado mais a frente. cd /var/lib/pgsql/9.5/

 vi recovery.conf (inserir as linhas abaixo)
 standby_mode='on'
 primary_conninfo = 'host=server port=number user=replicador_cluster password=????? application_name=?????'
 trigger_file ='/var/lib/pgsql/9.5/data/rep.trigger'

[editar] Procedimentos Restauração Backup

Observação: Existem diversas formas de fazer o procedimento abaixo. Por exemplo:
1) Com o banco Master aberto ou fechado; e
2) Com RSYNC, PG_BASEBACKUP e Restore dos arquivos de backup físico.

[editar] Banco de Dados (MASTER)

Passo 1. Realizar um backup físico do banco, como sugestão utilizar o script abaixo.

 var/lib/pgsql/scripts/bkp_hot_cluster.sh nome_do_banco
 ll /var/local/backups/pgsql/prd/nome_do_banco/ -tr

Passo 2. Gerar um backup WAL para que os dados mais recentes, se existirem, estejam no backup a ser utilizado para montar a replicação.

 /var/lib/pgsql/scripts/bkp_wal_cluster.sh nome_do_banco
 ll /var/local/backups/pgsql/prd/nome_do_banco/ -tr

[editar] Banco de Dados (STANDBY)

Passo 1. Por segurança, desconecte-se da Master.

Passo 2. Caso o servidor já tenha um cluster postgres no mesmo diretório, certificar-se que o serviço do postgres esteja desligado.

 ps -ef | grep postgres
 systemctl stop postgres-9.5.service

Passo 3. Descompactar o arquivo TAR a partir do raiz, a estrutura de diretórios ficará igual ao do servidor de produção.
ATENÇÃO: caso exista arquivos com mesmos nomes nos respectivos diretórios, eles serão sobrescritos, cuidado para NÃO executar os comandos no banco MASTER.

 cd /var/local/backups/pgsql/prd/nome_do_banco/
 tar xvf bkp_hot_postgres_5432_nome_do_banco_<MAIS_ATUAL>.tar.bz2  -C  /
 ...

Passo 4. Descompactar apenas os arquivos WAL posteriores ao backup HOT restaurado no passo acima (ajusta yyyy-mm-dd).

 for i in bkp_wal_postgres_5432_nome_do_banco_yyyy-mm-dd*.bz2; do tar xvf $i -C /; done

Observação: Os arquivos serão extraídos em /var/lib/pgsql/9.5/data/pg_arch/

Passo 5. Mover os arquivos descompactados no passo anterior para o local onde o banco de replicação conseguirá ler:

 mv /var/lib/pgsql/9.5/data/pg_arch/*  /var/lib/pgsql/9.5/data/pg_xlog/

Passo 6. Copiar os arquivos: postgresql.conf e pg_hba.conf do diretório /var/lib/pgsql/9.5 para o diretório do cluster:

 cd  /var/lib/pgsql/9.5
 cp -p recovery.conf /var/lib/pgsql/9.5/data/

Para confirmar se os arquivos foram substituídos, verificar as datas ou se os parâmetros contêm as modificações realizadas.

  • cd /var/lib/pgsql/9.5/data/
  • Verificar os arquivos: postgresql.conf, pg_hba.conf, recovery.conf.

Passo 7. Verificar se o parâmetro hot_standby está ativado, caso negativo, ativar (essa atividade foi adicionada a este procedimento posteriormente para atender uma demanda no momento de uma recriação da replicação).

 cd /var/lib/pgsql/9.5/data/
 vi postgresql.conf

Passo 8. Inicializar o banco STANDBY e verificar o log para saber se o banco está recebendo as atualizações

 systemctl start postgres-9.5.service    
 hot_standby = on  --> verificar se esse parâmetro está configurado
 vi /var/lib/pgsql/9.5/data/pg_log/postgresql-sss-hh.log --> ajustar ao dia da semana e hora
 tail -50 /var/lib/pgsql/9.5/data/pg_log/postgresql-sss-hh.log  --> ajustar ao dia da semana e hora


[editar] Atividades PÓS no MASTER

Passo 1. Validar se a replicação está sendo feita:

 psql -p <porta>
 \x               #modo extendido --> liga
 table pg_stat_replication;
 \x               #modo extendido --> desliga modo extendido

Passo 2. Criar uma tabela auxiliar, inserir uma linha.

 psql -p <porta>
 \list
 \c adm
 \dt
 create table teste (i integer);
 insert into teste values (1);

Passo 3. No banco STANDBY, verificar se a tabela e a linha existem.

 psql -p <porta>
 select * from teste;

Passo 4. No banco MASTER, remover a tabela de teste no banco.

 psql -p <porta>
 drop table teste;

[editar] Possíveis erros no log e respectivas soluções

1. Erro: Se no log informar que está faltando arquivos WAL para sincronizar, executar esse comando for i in bkp_wal *.gz; do tar xvf $i -C /; done para descompactar os arquivos WAL e movê-los para dentro do pg_xlog com o objetivo de que seja aplicado.
Solução: Trazer os arquivos de WAL da origem restantes e salvá-los dentro do pg_xlog.

2. Erro: 2015-02-03 16:13:14 BRST [20938]: [7-1] user=,db= LOG: unexpected pageaddr 19E/58000000 in log segment 000000010000019E00000096, offset 0 2015-02-03 16:13:14 BRST [21185]: [1-1] user=,db= LOG: started streaming WAL from primary at 19E/96000000 on timeline 1 2015-02-03 16:13:14 BRST [21185]: [2-1] user=,db= FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 000000010000019E00000096 has already been removed.
Solução:Verificar os arquivos de WAL dentro do diretório pg_arch /var/lib/pgsql/9.5/data/pg_arch/ e MOVÊ-LOS para o diretório pg_xlog /var/lib/pgsql/9.5/data/pg_xlog

 mv -v /var/lib/pgsql/9.5/data/pg_arch/<arquivo> /var/lib/pgsql/9.5/data/pg_xlog/

3. Erro: 2015-02-03 18:32:09 BRST [22086]: [1-1] user=,db= LOG: started streaming WAL from primary at 19E/95000000 on timeline 1 2015-02-03 18:32:09 BRST [22086]: [2-1] user=,db= FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 000000010000019E00000095 has already been removed

4. Erro: Após o restore do banco e tentar conectar no banco através do comando: psql –p 5432 FATAL: the database system is starting up
Solução:Verificar se o parâmetro hot_standby está ativado no arquivo postgresql.conf.

 vi /var/lib/pgsql/9.5/data/postgresql.conf
 hot_standby = on
Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Informações Gerais
Aplicativos PJe
Manuais
Suporte
Ferramentas