Descrição do que foi utilizado no teste:
Sistema Operacional: RedHat Enterprise Linux 5 update 6 x86-64
Banco de dados: PostgreSQL 9.0.3
Repositórios utilizados:
pgdg-90-centos.repo
nativo RHEL 5
Pacotes instalados:
postgresql90-test postgresql90-server postgresql90-libs postgresql90-docs postgresql90-devel postgresql90-contrib postgresql90
Ambiente: Ambas as instâncias serão executadas na mesma máquina em portas e diretórios 'data' distintos.
Ajuste de 'service':
1 - Copiar o /etc/init.d/postgresql-9.0 para 'postgresql-9.0-II' e adicionar o no boot:
# cp /etc/init.d/postgresql-9.0 /etc/init.d/postgresql-9.0-II
# chkconfig --add postgresql-9.0-II
# chkconfig --level 345 postgresql-9.0-II on
2 - Ajustar os parâmetros do service 'postgresql-9.0-II':
PGPORT=5433
PGDATA=/var/lib/pgsql/${PGMAJORVERSION}/data2
PGLOG=/var/lib/pgsql/${PGMAJORVERSION}/pgstartup2.log
3 - Configurar parâmetros do 'postgresql.conf' do 'postgresql-9.0':
listen_addresses = '*'
port = 5432
max_connections = 100
shared_buffers = 32MB
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -a %p /data/archive_log/%f'
archive_timeout = 60
max_wal_senders = 5
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
datestyle = 'iso, mdy'
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
default_text_search_config = 'pg_catalog.english'
4 - Criar a instância e subir a master(postgresql-9.0):
# service postgresql-9.0 initdb
# service postgresql-9.0 start
5 - Ajuste o pg_hba do master e adicione as seguintes linhas:
host replication all ::1/128 trust
host replication all 127.0.0.1/32 trust
IMPORTANTE: Adicione ainda que a conexão via loopback seja 'trust'.
6 - Com o usuário 'postgres' acesse a database 'postgres' e execute o SQL abaixo:
# psql -U postgres -p 5432 -c "SELECT pg_start_backup('backup');" postgres
7 - Copie o diretório 'data' do master para 'data2' que será o slave:
# rsync -arvtog /var/lib/pgsql/9.0/data /var/lib/pgsql/9.0/data2
8 - Apague os logs de transação, pid da pasta migrada:
# rm /var/lib/pgsql/9.0/data2/postmaster.pid
# rm -f /var/lib/pgsql/9.0/data2/pg_xlog/*
9 - Ajuste de configuração do arquivo 'postgresql.conf' no slave:
10 - Criar o arquivo '/var/lib/pgsql/9.0/data2/recovery.conf'
restore_command = 'rsync -a /data/archive_log/%f %p'
standby_mode = 'on'
primary_conninfo = 'host=localhost port=5432'
trigger_file = '/tmp/trigger.pgsql.5432'
11 - Com o usuário 'postgres' acesse a database 'postgres' e execute o SQL abaixo:
Importante: Não esqueça que desta forma o master está replicando os logs de transações para o slave, mas em caso de queda do master o slave não assume, isso deve ser gerenciado por script no crontab ou por um heartbeat.
# service postgresql-9.0 start
5 - Ajuste o pg_hba do master e adicione as seguintes linhas:
host replication all ::1/128 trust
host replication all 127.0.0.1/32 trust
IMPORTANTE: Adicione ainda que a conexão via loopback seja 'trust'.
6 - Com o usuário 'postgres' acesse a database 'postgres' e execute o SQL abaixo:
# psql -U postgres -p 5432 -c "SELECT pg_start_backup('backup');" postgres
7 - Copie o diretório 'data' do master para 'data2' que será o slave:
# rsync -arvtog /var/lib/pgsql/9.0/data /var/lib/pgsql/9.0/data2
8 - Apague os logs de transação, pid da pasta migrada:
# rm /var/lib/pgsql/9.0/data2/postmaster.pid
# rm -f /var/lib/pgsql/9.0/data2/pg_xlog/*
9 - Ajuste de configuração do arquivo 'postgresql.conf' no slave:
listen_addresses = '*'
port = 5433
max_connections = 100
shared_buffers = 32MB
wal_level = minimal
archive_mode = off
max_wal_senders = 0
hot_standby = on
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
datestyle = 'iso, mdy'
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
default_text_search_config = 'pg_catalog.english'
10 - Criar o arquivo '/var/lib/pgsql/9.0/data2/recovery.conf'
restore_command = 'rsync -a /data/archive_log/%f %p'
standby_mode = 'on'
primary_conninfo = 'host=localhost port=5432'
trigger_file = '/tmp/trigger.pgsql.5432'
11 - Com o usuário 'postgres' acesse a database 'postgres' e execute o SQL abaixo:
# psql -U postgres -p 5432 -c "SELECT pg_stop_backup();" postgres
12 - Inicie a instância slave:
# service postgresql-9.0-II start
13 - Verifique se através dos logs do postmaster da instância slave se a replicação está ocorrendo.
Importante: Não esqueça que desta forma o master está replicando os logs de transações para o slave, mas em caso de queda do master o slave não assume, isso deve ser gerenciado por script no crontab ou por um heartbeat.
Nenhum comentário:
Postar um comentário