You are on page 1of 19

PostgreSQL em Alta Disponibilidade com WAL Shipping

Author: Andr Felipe Machado<andremachado@techforce.com.br>

Objetivo

Manter a disponibilidade do servio de banco de dados PostgreSql de maneira automatizada, utilizando um recurso nativo de PITR do PostgreSQL. Documentar completamente os passos para uma implantao sobre Debian GNU / Linux 5.x "Lenny".

Escopo
A proposta de um sistema de alta disponibilidade Nvel 1 e continuidade do servio de at 99%, em cenrios aplicveis, e com simplificao do plano de contingncias, no focando em outras caractersticas como replicao, balanceamento de carga e fail over.

Para estas outras caractersticas, contamos com outras solues interessantes que poderiam se aplicar em conjunto ao projeto e elevar a disponibilidade at Nvel 4 e continuidade de servios de 99,999% buscando eliminar SPOF (Simple Point of Failure, porm com uma complexidade maior.

Por exemplo PgPool, Slony-I, SqlRelay, Bucardo, GlusterFS, PaceMaker, bancos de dados geograficamente distribuidos entre vrios centros de dados.

Precaues
Antes de iniciar a implementao dessa soluo, importante saber que o banco de dados primrio enviar constantemente arquivos para o servidor secundrio, afim de que esse receba exatamente as mesmas atualizaes que aquele. Dessa forma, extremamente importante que os dois bancos de dados estejam sempre ativos e que haja comunicao entre as duas mquinas, na forma do compartilhamento NFS. Caso surja algum problema que afete o mapeamento NFS ou o funcionamento em standby do servidor secundrio, os arquivos deixaro de ser consumidos e passaro a se acumular no disco de uma das mquinas, podendo

PostgreSQL HA WAL shipping

1 de 19

inviabilizar a soluo ou at mesmo causar o travamento do servidor principal, em funo do esgotamento da capacidade do disco. Considerando o fluxo de informaes do banco e os parmetros definidos no arquivo de configurao, esses arquivos acumulados podem alcanar o tamanho de 23 GB dirios, sendo extremamente recomendado o uso de uma soluo adicional de monitoramento do espao em disco, tanto do servidor principal como do secundrio.

Premissas
Para aplicao dessa soluo, subentende-se que o ambiente j tenha um servidor Debian Lenny rodando o servio de banco de dados (PostgreSQL) e que haja mais um servidor disponvel, com a instalao bsica do Debian Lenny. necessrio, ainda, que os sistemas tenham seus repositrios configurados segundo o documento Configurar APT No Debian. Considera-se, nos procedimentos abaixo, que a ltima verso estvel do PostgreSQL disponvel nos repositrios do Debian a 8.3.

Pinning

Caso a verso do banco de dados em uso no servidor primrio seja anterior ltima, pode ser necessrio fazer APT PINNING pacote do postgresql, impedindo que haja upgrade da verso do de verso, liberando somente atualizaes de segurana. Para isso, edite o arquivo /etc/apt/preferences nas duas mquinas, incluindo o trecho abaixo (a verso listada e o pacote so exemplos): Package: postgresql-8.1 Pin: version 8.1.* Pin-Priority: 1001

IPs Utilizados

necessrio saber, de antemo, os IPs que sero utilizados na implementao desses procedimentos. Nesse documento, como exemplo, so utilizados os seguintes IPs:

* Mquina primria (debianpgcluster1): 10.200.27.17

* Mquina secundria (debianpgcluster2): 10.200.27.32 * IP virtual do servio (heartbeat): 10.200.27.18

PostgreSQL HA WAL shipping

2 de 19

UID e GID do usurio postgres na mquina primria

Para mapear o NFS corretamente, necessrio utilizar o mesmo uid e gid do usurio postgres nas mquinas primria e secundria. Para isso, descubra os dados desse usurio na mquina primria atravs do seguinte comando:

debianpgcluster1:~# id postgres uid=103(postgres) gid=106(postgres) grupos=106(postgres),107(ssl-cert)

Antes de instalar o postgresql na mquina secundria, crie manualmente o usurio postgres, utilizando o mesmo uid e gid da mquina primria (no exemplo, 103 e 106, respectivamente), atravs dos seguintes comandos:

debianpgcluster2:~# groupadd --gid 106 postgres debianpgcluster2:~# adduser --system --home /var/lib/postgresql --shell /bin/bash --uid 103 --gid 106 --disabled-password postgres

Procedim

entos
Este documento se iniciou baseado na Proposta de Alta Disponibilidade para PostgreSQL, mas contm mudanas conceituais importantes sobre aquele.

Configurar nomes das mquinas editando /etc/hosts nas duas mquinas

Inclua nesse arquivo o nome das duas mquinas reais, conforme exemplo abaixo: #versao 25Mai2010 127.0.0.1 localhost 10.200.27.32 debianpgcluster2 10.200.27.17 debianpgcluster1 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters PostgreSQL HA WAL shipping 3 de 19

Instalar heartbeat, mon, postgresql, postgresql-contrib, nfs, rsync e sudo na mquina secundria
ff02::3 ip6-allhosts debianpgcluster2:~# apt-get update debianpgcluster2:~# apt-get upgrade debianpgcluster2:~# apt-get install heartbeat nfs-kernel-server rsync mon postgresql postgresql-contrib sudo

Criar diretrio para logs e conceder propriedade, na mquina secundria


debianpgcluster2:~# mkdir /pgsql-archive debianpgcluster2:~# chown postgres.postgres /pgsql-archive

Configurar

o NFS na mquina secundria editando /etc/exports

Inclua nesse arquivo o compartilhamento do diretrio /pgsql-archive, conforme exemplo abaixo. As opes do NFS definem que as escritas sero sncronas, para maior garantia de integridade, e que no sero permitidos comandos remotos de root, por questes de segurana. #versao 25Mai2010 # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # /pgsql-archive 10.200.27.17(rw,sync,no_subtree_check,root_squash)

Expo

rtar o diretrio da mquina secundria Criar um arquivo para verificao de montagem e alterar propriedade
debianpgcluster2:~# exportfs -a debianpgcluster2:~# su postgres -c 'touch /pgsql-archive/mounted.txt'

arar o servio do PostgreSQL na mquina secundria

PostgreSQL HA WAL shipping

4 de 19

O servio somente voltar a ficar ativo num evento de falha do servidor primrio. Enquanto no ocorrerem problemas, o servidor secundrio operar continuamente em standby.

Configurar /etc/postgresql/8.3/main/postgresql.conf na mquina secundria


debianpgcluster2:~# invoke-rc.d postgresql-8.3 stop

Para que o heartbeat consiga redirecionar as requisies, preciso que o PostgreSQL responda queries em todas as interfaces. Nessa configurao, a segurana passa a ser provida pelo pg_hba.conf. Para isso, edite a opo listen_addresses, do arquivo postgresql.conf, segundo o exemplo abaixo:

#versao 31Mai2010 listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost', '*' = all # (change requires restart)

Configurar o arquivo /etc/postgresql/8.3/main/pg_hba.conf nas duas mquinas

Caso seja necessrio, libere o acesso a consultas para o IP virtual (10.200.27.18, no exemplo) e o IP do servidor secundrio (10.200.27.32, no exemplo), incluindo esses endereos no pg_hba.conf da mquina primria. Utilize esse mesmo arquivo de configurao na mquina secundria. Obs.: Esse arquivo deve conter todos os clientes (ou redes) que acessaro o banco de dados. No exemplo abaixo, foi includo o IP 10.200.27.40, simulando a configurao de um cliente. Deve-se definir o mtodo de autenticao que for apropriado. No exemplo, foi utilizado o md5. #versao 27Mai2010 # Database administrative login by UNIX sockets local all postgres # TYPE DATABASE USER CIDR-ADDRESS

ident sameuser METHOD ident sameuser md5 md5

# "local" is for Unix domain socket connections only local all all # IPv4 local connections: host all all 127.0.0.1/32 # IPv6 local connections: host all all ::1/128 host all all 10.200.27.32/32 host all all 10.200.27.18/32 md5 md5

PostgreSQL HA WAL shipping

5 de 19

Criar o script de gatilho sob o controle do heartbeat na mquina secundria


host all all 10.200.27.40/32 md5

Crie o arquivo /etc/ha.d/resource.d/trigger, conforme o modelo abaixo. Obs.: Os scripts de ao do heartbeat precisam aceitar os mesmos parmetros dos que esto em /etc/init.d , seguindo o padro LSB. #!/bin/sh #versao 08out2009 por Joao Cosme de Oliveira Junior case "$1" in start) echo "starting failover postgresql" su postgres -c 'touch /pgsql-archive/trigger.done' exit 0 ;; stop) echo "uneed to stop anything" exit 0 ;; esac

Atribua permisso de execuo a esse arquivo: debianpgcluster2:~# chmod a+x /etc/ha.d/resource.d/trigger

Criar e

editar o arquivo /etc/ha.d/ha.cf na mquina secundria

Crie o arquivo conforme o modelo abaixo. Note que o tempo para considerar um n morto (deadtime) precisa ser o dobro do tempo usado (interval) no programa mon.

importante notar que '''no''' haver retorno automtico ao n primrio, mesmo que ele seja restabelecido, para evitar inconsistncia nos dados do banco. Aps um chaveamento, o n secundrio ter dados vlidos mais novos que o n primrio e ser necessria uma interveno manual para o failback, fazendo a retirada dos dados do n secundrio e carga no n primrio, numa parada programada.

O nome dos ns precisam ser os retornados pelo comando "uname -n".

PostgreSQL HA WAL shipping

6 de 19

#versao 25Mai2010 keepalive 1 deadtime 20 warntime 10 initdead 60 logfile /var/log/ha.log auto_failback off bcast eth0 node debianpgcluster1 node debianpgcluster2

Criar e editar o arquivo /etc/ha.d/haresources da mquina secundria

Crie o arquivo conforme o modelo abaixo. Nele configurado o IP virtual e definido que o servio ser oferecido preferencialmente pela mquina primria.

'''IMPORTANTE e no convencional:''' O arquivo /etc/ha.d/haresources ser DIFERENTE nas duas mquinas.

A seqncia de inicializao de alta disponibilidade ser chaveamento de ip e depois trigger.

A seqncia de parada de alta disponibilidade ser trigger e depois chaveamento de ip. O servio postgresql estar SEMPRE ativo (em modo recovery) na mquina secundria, para ficar lendo e consumindo os arquivos WAL. #versao 31Mai2010 debianpgcluster1

Criar o arquivo /etc/ha.d/authkeys, editar e restringir permisses, na mquina secundria


10.200.27.18/24/eth0 trigger

No modelo abaixo, definido o mtodo "1" de autenticao como criptografado "sha1" e configurada a senha "pgha". Utilize alguma senha difcil de deduzir e igual nas duas mquinas.

#versao 25Mai2010 auth 1 1 sha1 pgha

Para que o contedo do arquivo possa ser lido apenas pelo usurio root, execute o comando abaixo:

PostgreSQL HA WAL shipping

7 de 19

Instalar heartbeat, hapm, nfs e rsync na mquina primria


debianpgcluster2:~# chmod 600 /etc/ha.d/authkeys debianpgcluster1:~# apt-get update debianpgcluster1:~# apt-get upgrade debianpgcluster1:~# apt-get install heartbeat nfs-common rsync hapm

Cria

r diretrio para logs e conceder propriedade na mquina primria


debianpgcluster1:~# mkdir /pgsql-archive debianpgcluster1:~# chown postgres.postgres /pgsql-archive

Editar

/etc/fstab na mquina primria

Inclua nesse arquivo a ltima linha do modelo abaixo, alterando as configuraes para a sua realidade. As outras linhas apenas ilustram o formato do fstab e dever ser adequadas a cada servidor.

#versao 25Mai2010 # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/hda1 / ext3 errors=remount-ro 0 1 /dev/hda5 none swap sw 0 0 /dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 10.200.27.32:/pgsql-archive/ /pgsql-archive nfs rw,sync,soft,intr 0 0

Im

portar e montar o diretrio da mquina secundria para a primria


debianpgcluster1:~# mount -a

Rode o comando abaixo e verfique a sua sada. Nesse momento, deve existir apenas o arquivo mounted.txt, de propriedade de postgres.postgres.

Configurar /etc/postgresql/8.3/main/postgresql.conf na mquina primria


debianpgcluster1:~# ls -lh /pgsql-archive

PostgreSQL HA WAL shipping

8 de 19

Para que o heartbeat consiga redirecionar as requisies, preciso que o PostgreSQL responda queries em todas as interfaces. Nessa configurao, a segurana passa a ser provida pelo pg_hba.conf. Para isso, edite a opo listen_addresses, do arquivo postgresql.conf, segundo o exemplo abaixo:

#versao 31Mai2010 listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost', '*' = all # (change requires restart)

Configure o WAL archiving, conforme o modelo abaixo. '''Importante:''' As configuraes definidas nesse exemplo foram a gerao de um arquivo WAL a cada 60 segundos, mesmo sem atividade. Isso garante um tempo mximo para uma janela de perda de dados, mas gera um grande volume de arquivos. Obs.: Ateno para as aspas simples. # - Archiving archive_mode = on # allows archiving to be done # (change requires restart) archive_command = 'test -f /pgsql-archive/mounted.txt && test ! -f /pgsql-archive/%f && rsync -a %p /pgsql-archive/%f' # command to use to archive a logfile segment archive_timeout = 60 # force a logfile segment switch after this # time; 0 is off

Reinicie o servio PostgreSQL na mquina primria

Antes de executar o comando abaixo, verifique se a mquina secundria est ativa, pois o postgresql precisar do compartilhamento nfs para gravar os arquivos WAL.

Copiar o script de controle de servio para o diretrio de recursos do heartbeat


debianpgcluster1:~# invoke-rc.d postgresql-8.3 restart debianpgcluster1:~# cp /etc/init.d/postgresql-8.3 /etc/ha.d/resource.d/

Remover o script de controle de servio da inicializao e paradas automticas da mquina primria


PostgreSQL HA WAL shipping 9 de 19

O Heartbeat controlar o incio e a parada do servio postgresql de agora em diante.

debianpgcluster1:~# update-rc.d -f postgresql-8.3 remove debianpgcluster1:~# rm /etc/init.d/postgresq-8.3

Editar o arquivo /etc/ha.d/hapm.conf na mquina primria

Edite o arquivo conforme o modelo abaixo. O HAPM derrubar o heartbeat na mquina primria caso no obtenha resposta na porta local 5432 (banco de dados). Obs.: O parmetro "time" precisa ser maior que os "initdead" e "deadtime" do heartbeat. ######################################################################## ### # # # hapm.conf # # # # This file haves hapm configurations # # # # High Availability Port Monitor is a Free Software under GNU/GPL License # # # # This is a Brazilian Project created by: # # # # - Alexandre Antonio Antunes de Almeida # # - Joao Eriberto Mota Filho # # - Rosemeri Dantas de Oliveira # # # ######################################################################## ### # You must make one line by IP/Port. Use one IP and port by line only. #socket=127.0.0.1:5432 socket=10.200.27.17:5432

# This is the time in seconds to check the port status. Caution to use small # values here or your processor will be very busy. You must use a value # between 0 and 3600. To use small values check performance with #top # command (see CPU idle field). time=120

PostgreSQL HA WAL shipping

10 de 19

# The Heartbeat start/stop script path heartbeat=/etc/init.d/heartbeat # Check where Heartbeat make the PID file and set it below. # Default is /var/run/heartbeat.pid heartbeatpid=/var/run/heartbeat.pid

Criar e editar o arquivo /etc/ha.d/ha.cf da mquina primria

Crie o arquivo conforme o modelo abaixo:

#versao 25Mai2010 keepalive 1 deadtime 20 warntime 10 initdead 60 logfile /var/log/ha.log auto_failback off bcast eth0 node debianpgcluster1 node debianpgcluster2

Criar e editar o arquivo /etc/ha.d/haresources da mquina primria

Crie o arquivo conforme o modelo abaixo. Nele definido o n primrio e configurado os recursos a serem gerenciados pelo heartbeat: o IP virtual e o servio de banco de dados.

IMPORTANTE:

* O arquivo ''/etc/ha.d/haresources'' ser '''diferente''' nas duas mquinas.

* O heartbeat controlar o incio e parada do postgresql. * Os dois recursos configurados nesse arquivo (IP virtual e banco de dados) inicializaro somente aps o tempo definido do parmetro ''initdead'', do arquivo ''ha.cf''.

#versao 25Mai2010 debianpgcluster1

Criar o arquivo /etc/ha.d/authkeys, editar e restringir permisses, na mquina primria


10.200.27.18/24/eth0 postgresql-8.3 PostgreSQL HA WAL shipping 11 de 19

No modelo abaixo, definido o mtodo "1" de autenticao como criptografado "sha1" e configurada a senha "pgha". Utilize alguma senha difcil de deduzir e igual nas duas mquinas.

#versao 25Mai2010 auth 1 1 sha1 pgha

Para que o contedo do arquivo possa ser lido apenas pelo usurio root, execute o comando abaixo:

Backup inicial a quente do PostgreSQL na mquina primria


debianpgcluster1:~# chmod 600 /etc/ha.d/authkeys

Entre no prompt do psql como superusurio postgres e comece o processo de criao de um backup inicial com a identificao YYYYMMDD, conforme exemplificado abaixo: debianpgcluster1:~# su - postgres postgres@debianpgcluster1:~$ psql Bem vindo ao psql 8.3.9, o terminal iterativo do PostgreSQL. Digite: \copyright para mostrar termos de distribucao \h para ajuda com comandos SQL \? para ajuda com comandos do psql \g ou terminar com ponto-e-vi-rgula para executar a consulta \q para sair

postgres=# select pg_start_backup('20100525'); pg_start_backup ----------------2/B3000020 (1 registro) postgres=# \q

O execuo do comando vai durar um tempo proporcional ao tamanho dos bancos de dados no servidor.

Compactar os arquivos do postgresql em execuo

Como o engine do banco de dados estar em execuo, poder haver avisos de arquivos alterados durante a compactao.

PostgreSQL HA WAL shipping

12 de 19

debianpgcluster1:~# su - postgres postgres@debianpgcluster1:~$ cd /var/lib/postgresql/8.3/ postgres@debianpgcluster1:~$ tar -czf /pgsqlarchive/backup_20100525.tar.gz *

Finalizar a criao de backup

inicial

Entre na console do psql como usurio postgres e execute o comando abaixo:

postgres@debianpgcluster1:~$ psql Bem vindo ao psql 8.3.9, o terminal iterativo do PostgreSQL. Digite: \copyright para mostrar termos de distribuicao \h para ajuda com comandos SQL \? para ajuda com comandos do psql \g ou terminar com ponto-e-vi-rgula para executar a consulta \q para sair

postgres=# select pg_stop_backup(); pg_stop_backup ---------------2/B300007C (1 registro) postgres=#

Parar o heartbeat na mquina secundria

Pare o Heartbeat e remova o arquivo citado, caso ele exista.

debianpgcluster2:~# invoke-rc.d heartbeat stop debianpgcluster2:~# rm /pgsql-archive/trigger.done

Cpia do arquivo de backup inicial para a mquina secundria

Antes de executar os comandos abaixo, certifique-se de que o PostgreSQL esteja parado. Podese mover a antiga base de dados "main" ou apag-la. Os comandos abaixo armazenam essa antiga base no diretrio "main.old1".

debianpgcluster2:~# debianpgcluster2:~# debianpgcluster2:~# debianpgcluster2:~# debianpgcluster2:~#

invoke-rc.d postgresql-8.3 stop cd /var/lib/postgresql/8.3/ mv main main.old1 tar -xzvf /pgsql-archive/backup_20100525.tar.gz rm -rf main/pg_xlog/*

Criar e editar o arquivo


13 de 19

PostgreSQL HA WAL shipping

/var/lib/postgresql/8.3/main/recovery.conf na mquina secundria

Crie o arquivo conforme o modelo abaixo. Se houver um chaveamento, o postgresql renomear esse arquivo para "recovery.done". Obs.: Ateno para aspas simples.

restore_command = '/usr/lib/postgresql/8.3/bin/pg_standby -d -l -r 3 -s 60 -t /pgsql-archive/trigger.done /pgsql-archive %f %p %r 2>>/tmp/pg_standby.log'

Conceda a propriedade desse arquivo ao usurio postgres e remova os arquivos de log, caso existam.

debianpgcluster2:~# chown postgres.postgres /var/lib/postgresql/8.3/main/recovery.conf debianpgcluster2:~# rm /tmp/pg_standby.log

Configurar o Mon

O Mon servir para evitar situaes de split-brain caso haja uma interrupo na rede, j que no usaremos conexo direta de controle de heartbeat (cabo crossover) entre as mquinas. Para configur-lo, siga as instrues do documento Como Configurar MON Para Monitorar . Remotamente Em Sistemas Debian

Parar o heartbeat e o hapm na mquina primria


debianpgcluster1:~# invoke-rc.d heartbeat stop debianpgcluster1:~# invoke-rc.d hapm stop

Reiniciar o cluster

de alta disponibilidade
1. Reinicie a mquina secundria. Ela precisa ser iniciada primeiro, para disponibilizar o diretrio NFS para a primria.

2. Para que a mquina secundria no interprete o reboot do n primrio como uma queda do PostgreSQL HA WAL shipping 14 de 19

servidor, pare o servio do heartbeat na mquina secundria, atravs do seguinte comando:

debianpgcluster2:~# invoke-rc.d heartbeat stop

3. Reinicie a mquina primria. Os recursos configurados no heartbeat (IP virtual e postgresql) iniciaro aps decorido o tempo definido no parmetro ''initdead'', no arquivo ''ha.cf'' (60 segundos, nesse modelo).

4. Confira se o diretrio compartilhado foi montado corretamente na mquina primria. O comando abaixo dever retornar ao menos o arquivo ''mounted.txt''.

debianpgcluster1:~# ls -lh /pgsql-archive

5. Caso a montagem do diretrio NFS no tenha sido bem sucedida, force esse procedimento atravs do seguinte comando:

debianpgcluster1:~# mount -a

6. Inicie o heartbeat na mquina secundria, atravs do seguinte comando:

debianpgcluster2:~# invoke-rc.d heartbeat start

OBSERVAES:

* A mquina primria oferecer o servio postgresql atravs do IP virtual.

* A mquina secundria permanecer com o servio postgresql em modo ''recovery'' at que ocorra um chaveamento.

* Num chaveamento, o IP virtual repassado para a mquina secundria, o postgresql recebe o ''trigger.done'' e o servio sai do modo ''recovery'', passando a responder transaes. * '''No''' haver retorno automtico de servio para o n primrio. Esse procedimento dever ser feito manualmente, durante uma parada programada, seguindo os passos abaixo.

Procedimentos de retorno de operao da


PostgreSQL HA WAL shipping 15 de 19

mquina primria aps um chaveamento


Se ocorrer um chaveamento para a mquina secundria, a mquina primria '''no''' poder ter o servio postgresql, nem o heartbeat reiniciados sem antes recuperar os dados da secundria.

Isso porque durante algum tempo a secundria recebeu dados novos e vlidos.

Se for possvel tolerar algum downtime, o modo mais simples fazer uma parada programada de tudo para retirar os dados da secundria, carregar na primria e refazer o backup inicial para a secundria.

Bloquear queries nos servidores postgresql

Voc ter de bloquear queries nos DOIS servidores postgresql. Alternativas:

* Poder reconfigurar o pg_hba.conf de AMBOS e recarregar configuraes.

* Parar o cliente que origina as queries. * Bloquear temporariamente por iptables as queries vindas do cliente.

Garantir servios de cluster HA parados na mquina primria


debianpgcluster1:~# invoke-rc.d heartbeat stop debianpgcluster1:~# invoke-rc.d hapm stop debianpgcluster1:~# /etc/ha.d/resource.d/postgresql-8.3 restart

Garant

ir servios de cluster HA parados na mquina secundria


debianpgcluster2:~# invoke-rc.d heartbeat stop PostgreSQL HA WAL shipping 16 de 19

debianpgcluster2:~# invoke-rc.d mon stop debianpgcluster2:~# invoke-rc.d postgresql-8.3 restart

Extrair todos

dados do postgresql secundrio


debianpgcluster2:~# su - postgres postgres@debianpgcluster2:~$ pg_dumpall --clean --inserts --columninserts --file=/pgsql-archive/pgdumpall_YYYYMMDD.sql

Carregar

todos dados no postgresql primrio


debianpgcluster1:~# su - postgres postgres@debianpgcluster1:~$ psql -f /pgsqlarchive/pgdumpall_YYYYMMDD.sql template1

Parar ambos os

postgresql
debianpgcluster1:~# /etc/ha.d/resource.d/postgresql-8.3 stop

Reiniciar servios de cluster HA parados na mquina primria


debianpgcluster2:~# invoke-rc.d postgresql-8.3 stop postgres@debianpgcluster2:~$ exit debianpgcluster1:~# invoke-rc.d heartbeat restart

Aguarde o servio postgresql levantar na mquina primria. Esse tempo dever corresponder ao parmetro ''initdead'' mais o tempo necessrio para o prprio postgresql iniciar.

Limpar arquivos compartilhados e logs de recuperao


debianpgcluster1:~# invoke-rc.d hapm restart debianpgcluster1:~# su - postgres postgres@debianpgcluster1:~$ rm /pgsql-archive/0* postgres@debianpgcluster1:~$ rm /pgsql-archive/pgdumpall* postgres@debianpgcluster1:~$ rm /pgsql-archive/backup* postgres@debianpgcluster1:~$ rm /pgsql-archive/trigger.done postgres@debianpgcluster1:~$ rm /tmp/pg_standby.log

Refazer o

backup inicial

Agora refaa todos os passos para criar o backup inicial da mquina primria e depois copiar para a mquina secundria.

* Backup inicial a quente do PostgreSQL na mquina primria PostgreSQL HA WAL shipping 17 de 19

* Compactar os arquivos do postgresql em execuo

* Finalizar a criao de backup inicial

* Parar o heartbeat na mquina secundria

* Cpia do arquivo de backup inicial * Criar e editar o arquivo /var/lib/postgresql/8.3/main/recovery.conf

Reinicie os servios de cluster HA e o PostgreSQL na mquina secundria


debianpgcluster2:~# invoke-rc.d heartbeat restart debianpgcluster2:~# invoke-rc.d mon restart debianpgcluster2:~# invoke-rc.d postgresql-8.3 start

Desbloquear

queries nos servidores postgresql

Voc pode desbloquear as queries sobre os servidores postgresql. Os passos dependem do mtodo utilizado no bloqueio.

Bibliografia
[0] http://www.postgresql.org/docs/8.3/interactive/continuous-archiving.html

[1] http://www.postgresql.org/docs/8.3/interactive/warm-standby.html

[2] http://www.linux-ha.org/wiki/Ha.cf

PostgreSQL HA WAL shipping

18 de 19

[3] http://www.linux-ha.org/wiki/Haresources

[4] http://www.linux-ha.org/wiki/Authkeys

[5] http://www.linux-ha.org/wiki/Configuration

[6] http://www.linuxwebcluster.com/documentation/high-availability-linux-setup-heartbeat-ipfailping-node-configuration.html

[7] http://www.linuxvirtualserver.org/docs/ha/heartbeat_mon.html

[8] hapm/

http://joaocosme.wordpress.com/2009/10/30/ha-em-postgresql-warm-stand-by-heartbeat-

PostgreSQL

HA

WAL

shipping

19

de

19

You might also like