quarta-feira, 13 de abril de 2011

PostgreSQL - Configurando um HotStandby no 9

   Semelhante ao Warm-Stanby, post elaborado anteriormente para o PostgreSQL 8.4, o HotStandby também tem a finalidade de redundância entre instâncias, a diferença do Warn para o Hot é que o escravo do Hot aceita conexões, e pode ser utilizado para leitura.

   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:


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