Tech Force / Linux blog / PostgreSQL HA WAL shipping



Right menu

Linux blog recente

XenServer: Como reduzir latência i/o rede e disco e reduzir perda de pacotes em alta carga

Para melhor experiência de usuário, devido a respostas mais rápidas do serviço, é fator chave reduzir a LATÊNCIA de I/O de rede e disco.

Especialmente em servidores de e-mail e de banco de dados.

Veremos como reduzir a latência de de I/O Máquinas Virtuais em servidores de virtualização XenServer.

Não conectado

Notificação


PostgreSQL em Alta Disponibilidade com WAL Shipping

Objetivo

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

Escopo

A proposta é de um sistema de alta disponibilidade Nível 1 e continuidade do serviço de até 99%, em cenários aplicáveis, e com simplificação do plano de contingências, não focando em outras características como replicação, balanceamento de carga e fail over.

Para estas outras características, contamos com outras soluções interessantes que poderiam se aplicar em conjunto ao projeto e elevar a disponibilidade até Nível 4 e continuidade de serviços de 99,999% buscando eliminar SPOF (Simple Point of Failure, porém com uma complexidade maior.

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

Precauções

Antes de iniciar a implementação dessa solução, é importante saber que o banco de dados primário enviará constantemente arquivos para o servidor secundário, afim de que esse receba exatamente as mesmas atualizações que aquele. Dessa forma, é extremamente importante que os dois bancos de dados estejam sempre ativos e que haja comunicação entre as duas máquinas, na forma do compartilhamento NFS. Caso surja algum problema que afete o mapeamento NFS ou o funcionamento em standby do servidor secundário, os arquivos deixarão de ser consumidos e passarão a se acumular no disco de uma das máquinas, podendo inviabilizar a solução ou até mesmo causar o travamento do servidor principal, em função do esgotamento da capacidade do disco. Considerando o fluxo de informações do banco e os parâmetros definidos no arquivo de configuração, esses arquivos acumulados podem alcançar o tamanho de 23 GB diários, sendo extremamente recomendado o uso de uma solução adicional de monitoramento do espaço em disco, tanto do servidor principal como do secundário.

Premissas

Para aplicação dessa solução, subentende-se que o ambiente já tenha um servidor Debian Lenny rodando o serviço de banco de dados (PostgreSQL) e que haja mais um servidor disponível, com a instalação básica do Debian Lenny. É necessário, ainda, que os sistemas tenham seus repositórios configurados segundo o documento Configurar APT No Debian. Considera-se, nos procedimentos abaixo, que a última versão estável do PostgreSQL disponível nos repositórios do Debian é a 8.3.

Pinning

Caso a versão do banco de dados em uso no servidor primário seja anterior à última, pode ser necessário fazer APT PINNING da versão do pacote do postgresql, impedindo que haja upgrade de versão, liberando somente atualizações de segurança. Para isso, edite o arquivo /etc/apt/preferences nas duas máquinas, incluindo o trecho abaixo (a versão listada e o pacote são exemplos):

Package: postgresql-8.1
Pin: version 8.1.*
Pin-Priority: 1001

IPs Utilizados

É necessário saber, de antemão, os IPs que serão utilizados na implementação desses procedimentos. Nesse documento, como exemplo, são utilizados os seguintes IPs:
* Máquina primária (debianpgcluster1): 10.200.27.17
* Máquina secundária (debianpgcluster2): 10.200.27.32
* IP virtual do serviço (heartbeat): 10.200.27.18

UID e GID do usuário postgres na máquina primária

Para mapear o NFS corretamente, é necessário utilizar o mesmo uid e gid do usuário postgres nas máquinas primária e secundária. Para isso, descubra os dados desse usuário na máquina primária através do seguinte comando:

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

Antes de instalar o postgresql na máquina secundária, crie manualmente o usuário postgres, utilizando o mesmo uid e gid da máquina primária (no exemplo, 103 e 106, respectivamente), através 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

Procedimentos

Este documento se iniciou baseado na Proposta de Alta Disponibilidade para PostgreSQL, mas contém mudanças conceituais importantes sobre aquele.

Configurar nomes das máquinas editando /etc/hosts nas duas máquinas

Inclua nesse arquivo o nome das duas máquinas 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
ff02::3 ip6-allhosts

Instalar heartbeat, mon, postgresql, postgresql-contrib, nfs, rsync e sudo na máquina secundária

debianpgcluster2:~# apt-get update
debianpgcluster2:~# apt-get upgrade
debianpgcluster2:~# apt-get install heartbeat nfs-kernel-server rsync mon postgresql postgresql-contrib sudo

Criar diretório para logs e conceder propriedade, na máquina secundária

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

Configurar o NFS na máquina secundária editando /etc/exports

Inclua nesse arquivo o compartilhamento do diretório /pgsql-archive, conforme exemplo abaixo. As opções do NFS definem que as escritas serão síncronas, para maior garantia de integridade, e que não serão permitidos comandos remotos de root, por questões de segurança.

#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)

Exportar o diretório da máquina secundária

debianpgcluster2:~# exportfs -a

Criar um arquivo para verificação de montagem e alterar propriedade

debianpgcluster2:~# su postgres -c 'touch /pgsql-archive/mounted.txt'

Parar o serviço do PostgreSQL na máquina secundária

O serviço somente voltará a ficar ativo num evento de falha do servidor primário. Enquanto não ocorrerem problemas, o servidor secundário operará continuamente em standby.

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

Configurar /etc/postgresql/8.3/main/postgresql.conf na máquina secundária

Para que o heartbeat consiga redirecionar as requisições, é preciso que o PostgreSQL responda queries em todas as interfaces. Nessa configuração, a segurança passa a ser provida pelo pg_hba.conf. Para isso, edite a opção 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 máquinas

Caso seja necessário, libere o acesso a consultas para o IP virtual (10.200.27.18, no exemplo) e o IP do servidor secundário (10.200.27.32, no exemplo), incluindo esses endereços no pg_hba.conf da máquina primária. Utilize esse mesmo arquivo de configuração na máquina secundária. Obs.: Esse arquivo deve conter todos os clientes (ou redes) que acessarão o banco de dados. No exemplo abaixo, foi incluído o IP 10.200.27.40, simulando a configuração de um cliente. Deve-se definir o método de autenticação que for apropriado. No exemplo, foi utilizado o md5.

#versao 27Mai2010
# Database administrative login by UNIX sockets
local   all         postgres                          ident sameuser

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

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


host all all 10.200.27.32/32   md5
host all all 10.200.27.18/32   md5
host    all     all     10.200.27.40/32                 md5

Criar o script de gatilho sob o controle do heartbeat na máquina secundária

Crie o arquivo /etc/ha.d/resource.d/trigger, conforme o modelo abaixo. Obs.: Os scripts de ação do heartbeat precisam aceitar os mesmos parâmetros dos que estão em /etc/init.d , seguindo o padrão 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 permissão de execução a esse arquivo:

debianpgcluster2:~# chmod a+x /etc/ha.d/resource.d/trigger

Criar e editar o arquivo /etc/ha.d/ha.cf na máquina secundária

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 '''não''' haverá retorno automático ao nó primário, mesmo que ele seja restabelecido, para evitar inconsistência nos dados do banco. Após um chaveamento, o nó secundário terá dados válidos mais novos que o nó primário e será necessária uma intervenção manual para o failback, fazendo a retirada dos dados do nó secundário e carga no nó primário, numa parada programada.

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

#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 máquina secundária

Crie o arquivo conforme o modelo abaixo. Nele é configurado o IP virtual e definido que o serviço será oferecido preferencialmente pela máquina primária.
'''IMPORTANTE e não convencional:''' O arquivo /etc/ha.d/haresources será DIFERENTE nas duas máquinas.
A seqüência de inicialização de alta disponibilidade será chaveamento de ip e depois trigger.
A seqüência de parada de alta disponibilidade será trigger e depois chaveamento de ip.
O serviço postgresql estará SEMPRE ativo (em modo recovery) na máquina secundária, para ficar lendo e consumindo os arquivos WAL.

#versao 31Mai2010
debianpgcluster1   10.200.27.18/24/eth0   trigger

Criar o arquivo /etc/ha.d/authkeys, editar e restringir permissões, na máquina secundária

No modelo abaixo, é definido o método "1" de autenticação como criptografado "sha1" e configurada a senha "pgha". Utilize alguma senha difícil de deduzir e igual nas duas máquinas.

#versao 25Mai2010
auth 1
1 sha1 pgha

Para que o conteúdo do arquivo possa ser lido apenas pelo usuário root, execute o comando abaixo:

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

Instalar heartbeat, hapm, nfs e rsync na máquina primária

debianpgcluster1:~# apt-get update
debianpgcluster1:~# apt-get upgrade
debianpgcluster1:~# apt-get install heartbeat nfs-common rsync hapm

Criar diretório para logs e conceder propriedade na máquina primária

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

Editar /etc/fstab na máquina primária

Inclua nesse arquivo a última linha do modelo abaixo, alterando as configurações 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

Importar e montar o diretório da máquina secundária para a primária

debianpgcluster1:~# mount -a

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

debianpgcluster1:~# ls -lh /pgsql-archive

Configurar /etc/postgresql/8.3/main/postgresql.conf na máquina primária

Para que o heartbeat consiga redirecionar as requisições, é preciso que o PostgreSQL responda queries em todas as interfaces. Nessa configuração, a segurança passa a ser provida pelo pg_hba.conf. Para isso, edite a opção 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 configurações definidas nesse exemplo forçam a geração de um arquivo WAL a cada 60 segundos, mesmo sem atividade. Isso garante um tempo máximo para uma janela de perda de dados, mas gera um grande volume de arquivos.
Obs.: Atenção 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 serviço PostgreSQL na máquina primária

Antes de executar o comando abaixo, verifique se a máquina secundária está ativa, pois o postgresql precisará do compartilhamento nfs para gravar os arquivos WAL.

debianpgcluster1:~# invoke-rc.d postgresql-8.3 restart

Copiar o script de controle de serviço para o diretório de recursos do heartbeat

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

Remover o script de controle de serviço da inicialização e paradas automáticas da máquina primária

O Heartbeat controlará o início e a parada do serviço 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 máquina primária

Edite o arquivo conforme o modelo abaixo. O HAPM derrubará o heartbeat na máquina primária caso não obtenha resposta na porta local 5432 (banco de dados). Obs.: O parâmetro "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

# 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 máquina primária

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 máquina primária

Crie o arquivo conforme o modelo abaixo. Nele é definido o nó primário e configurado os recursos a serem gerenciados pelo heartbeat: o IP virtual e o serviço de banco de dados.

IMPORTANTE:
* O arquivo ''/etc/ha.d/haresources'' será '''diferente''' nas duas máquinas.
* O heartbeat controlará o início e parada do postgresql.
* Os dois recursos configurados nesse arquivo (IP virtual e banco de dados) inicializarão somente após o tempo definido do parâmetro ''initdead'', do arquivo ''ha.cf''.

#versao 25Mai2010
debianpgcluster1   10.200.27.18/24/eth0   postgresql-8.3

Criar o arquivo /etc/ha.d/authkeys, editar e restringir permissões, na máquina primária

No modelo abaixo, é definido o método "1" de autenticação como criptografado "sha1" e configurada a senha "pgha". Utilize alguma senha difícil de deduzir e igual nas duas máquinas.

#versao 25Mai2010
auth 1
1 sha1 pgha

Para que o conteúdo do arquivo possa ser lido apenas pelo usuário root, execute o comando abaixo:

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

Backup inicial a quente do PostgreSQL na máquina primária

Entre no prompt do psql como superusuário postgres e comece o processo de criação de um backup inicial com a identificação 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 execução do comando vai durar um tempo proporcional ao tamanho dos bancos de dados no servidor.

Compactar os arquivos do postgresql em execução

Como o engine do banco de dados estará em execução, poderá haver avisos de arquivos alterados durante a compactação.

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

Finalizar a criação de backup inicial

Entre na console do psql como usuário 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 máquina secundária

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

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

Cópia do arquivo de backup inicial para a máquina secundária

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

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

Criar e editar o arquivo /var/lib/postgresql/8.3/main/recovery.conf na máquina secundária

Crie o arquivo conforme o modelo abaixo. Se houver um chaveamento, o postgresql renomeará esse arquivo para "recovery.done".
Obs.: Atenção 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 usuário 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 situações de split-brain caso haja uma interrupção na rede, já que não usaremos conexão direta de controle de heartbeat (cabo crossover) entre as máquinas. Para configurá-lo, siga as instruções do documento Como Configurar MON Para Monitorar Remotamente Em Sistemas Debian.

Parar o heartbeat e o hapm na máquina primária

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

Reiniciar o cluster de alta disponibilidade

1. Reinicie a máquina secundária. Ela precisa ser iniciada primeiro, para disponibilizar o diretório NFS para a primária.

2. Para que a máquina secundária não interprete o reboot do nó primário como uma queda do servidor, pare o serviço do heartbeat na máquina secundária, através do seguinte comando:

debianpgcluster2:~# invoke-rc.d heartbeat stop

3. Reinicie a máquina primária. Os recursos configurados no heartbeat (IP virtual e postgresql) iniciarão após decorido o tempo definido no parâmetro ''initdead'', no arquivo ''ha.cf'' (60 segundos, nesse modelo).

4. Confira se o diretório compartilhado foi montado corretamente na máquina primária. O comando abaixo deverá retornar ao menos o arquivo ''mounted.txt''.

debianpgcluster1:~# ls -lh /pgsql-archive

5. Caso a montagem do diretório NFS não tenha sido bem sucedida, force esse procedimento através do seguinte comando:

debianpgcluster1:~# mount -a

6. Inicie o heartbeat na máquina secundária, através do seguinte comando:

debianpgcluster2:~# invoke-rc.d heartbeat start

OBSERVAÇÕES:
* A máquina primária oferecerá o serviço postgresql através do IP virtual.
* A máquina secundária permanecerá com o serviço postgresql em modo ''recovery'' até que ocorra um chaveamento.
* Num chaveamento, o IP virtual é repassado para a máquina secundária, o postgresql recebe o ''trigger.done'' e o serviço sai do modo ''recovery'', passando a responder transações.
* '''Não''' haverá retorno automático de serviço para o nó primário. Esse procedimento deverá ser feito manualmente, durante uma parada programada, seguindo os passos abaixo.

Procedimentos de retorno de operação da máquina primária após um chaveamento

Se ocorrer um chaveamento para a máquina secundária, a máquina primária '''não''' poderá ter o serviço postgresql, nem o heartbeat reiniciados sem antes recuperar os dados da secundária.

Isso porque durante algum tempo a secundária recebeu dados novos e válidos.

Se for possível tolerar algum downtime, o modo mais simples é fazer uma parada programada de tudo para retirar os dados da secundária, carregar na primária e refazer o backup inicial para a secundária.

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 configurações.
* Parar o cliente que origina as queries.
* Bloquear temporariamente por iptables as queries vindas do cliente.

Garantir serviços de cluster HA parados na máquina primária

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

Garantir serviços de cluster HA parados na máquina secundária

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

Extrair todos dados do postgresql secundário

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

Carregar todos dados no postgresql primário

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

Parar ambos os postgresql

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

Reiniciar serviços de cluster HA parados na máquina primária

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

Aguarde o serviço postgresql levantar na máquina primária. Esse tempo deverá corresponder ao parâmetro ''initdead'' mais o tempo necessário para o próprio postgresql iniciar.

debianpgcluster1:~# invoke-rc.d hapm restart

Limpar arquivos compartilhados e logs de recuperação

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 refaça todos os passos para criar o backup inicial da máquina primária e depois copiar para a máquina secundária.
* Backup inicial a quente do PostgreSQL na máquina primária
* Compactar os arquivos do postgresql em execução
* Finalizar a criação de backup inicial
* Parar o heartbeat na máquina secundária
* Cópia do arquivo de backup inicial
* Criar e editar o arquivo /var/lib/postgresql/8.3/main/recovery.conf

Reinicie os serviços de cluster HA e o PostgreSQL na máquina secundária

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 método 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

[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-ipfail-ping-node-configuration.html

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

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

How to install and configure DBI-Link to join Oracle tables from PostgreSQL on Debian GNU/Linux

If you want to join Oracle tables from PostgreSQL on Debian GNU/Linux, you can use DBI-Link.

Also, you can use PostgreSQL queries to access Oracle tables as local schemas.

Debian Project and SERPRO partnership preliminary report 1

SERPRO, the Brazilian IT government agency, has been advancing in its collaboration with Debian Project.

This is a first preliminary informal report about these advancements. This is not an official statement from Debian Project nor SERPRO, yet.

Como configurar MON para monitorar remotamente em sistemas Debian e controlar serviços locais

O objetivo é configurar em sistemas Debian o programa "mon" para monitorar REMOTAMENTE serviços e disparar ações conforme os eventos, inclusive controlar serviços locais.

Mon possui vários scripts monitores e de ações em sua seção contrib do repositório em do projeto MON

Os scripts podem ser complexos a ponto de executarem queries pré-definidas em bancos de dados remotos ou também enviar emails de alerta ao sysadmin.

APT pinning: Como configurar APT para múltiplos repositórios no Debian

Você PODE misturar ORDENADAMENTE pacotes de diferentes repositórios e seções num sistema Debian e manter a gerenciabilidade.

Misturar pacotes da versão Estável, Testing, Instável, Backports, Experimental num mesmo computador é possível dentro de alguns limites e com algum cuidado.

Comentários

Usuários registrados têm permissão para criar comentários.


Translate this page.  

AddThis Social Bookmark Button    AddThis Feed Button    Share/Save/Bookmark Add to Free Software Daily   Adicionar esta notícia no Rec6   Adicionar esta notícia no Linkk   Adicionar esta notícia no diHITT   Adicionar esta notícia no Uêba   Adicionar esta notícia no LinkLoko       enviar para DoMelhor