Mudanças entre as edições de "Replicação no PostgreSQL"
(→Procedimento de Criar Replicação) |
(→Testes realizados a época da implantação) |
||
(92 edições intermediárias de um usuário não apresentadas) | |||
Linha 5: | Linha 5: | ||
Os passos abaixo ora são executados no MASTER e ora no STANDBY. | Os passos abaixo ora são executados no MASTER e ora no STANDBY. | ||
− | + | {| border=1 | |
− | + | |- | |
+ | | '''MASTER || Produção''' | ||
+ | |- | ||
+ | | '''STANDBY || Cópia''' | ||
+ | |} | ||
<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: | + | Serviço:<br> |
− | usr/pgsql-9.5/bin/postmaster -p 5432 -D /var/lib/pgsql/9.5/data | + | <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> |
− | /var/local/backups/pgsql/prd/nome do servidor | + | <code><span style="background:#E6E8FA;"> /var/local/backups/pgsql/prd/nome do servidor (local original) </span></code> |
− | Backup HOT: | + | Backup HOT:<br> |
− | /var/local/backups/pgsql/prd/nome do servidor | + | <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''' (em /var/lib/pgsql/9.5/data) | + | '''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> |
+ | |||
+ | 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