O
PostgreSQL é um poderoso Sistema de Gestão de Banco de Dados (SGBD), com inúmeros recursos. Este post irá mostrar como fazer Streaming Replication e Hot Standby com o postgreSQL, permitindo assim transfirir as alterações de dados de um computador para um outro computador, estando eles geograficamente distantes.
O funcionamento normal da nossa Streaming Replication é conforme imagem abaixo:
Dessa forma, o usuário acessa um sistema de comércio eletrônico e faz suas compras na internet. Suas solicitações serão enviadas para um servidor Web (onde está hospedado o site de comércio eletrônico). Por conseguinte, o servidor web irá coletar/alterar os dados no SGBD, que no nosso caso é o PostgreSQL no computador Master. O master irá transferir todas as alterações nos dados do SGBD para o PostgreSQL que está no computador Slave.
Caso tenhamos algum problema com o nosso SGBD PostgreSQL Master, poderemos ativar rapidamente o Slave, promovendo-o a Master. Conforme imagem abaixo:
Dessa forma, após promover o Slave à Master, basta que o servidor web seja direcionado para o novo SGBD Master, que terá os dados atualizados e disponíveis para o seu sistema de comércio eletrônico.
Considerações
De uma forma geral, configurar os computadores (Master e Slave) para fazer Streaming Replication e Hot Standby será necessário alterar os seguintes arquivos:
/etc/postgresql/9.1/main/pg_hba.conf e
/etc/postgresql/9.1/main/postgresql.conf
Para que um computador com o PostgreSQL faça Streaming Replication para outro computador é necessário que ambos estejam com plataformas equivalentes, por exemplo: Ubuntu 64 bits em ambas as máquinas, irá funcionar. Não funcionará um computador com Ubuntu 32 bits e outro com Ubuntu 64 bits.
O ambiente
Em nosso ambiente, teremos um computador denominado "
Master" identificado pelo IP fictício: "
185.25.2.160" com o PostgreSQL 9.1. Também teremos um outro computador denominado "
Slave" identificado pelo IP fictício: "
171.43.98.90".
Configurando o Master
Primeiramente iremos acessar o computador Master e em seguida liberar o acesso para o Slave se conectar ao PostgreSQL do Master. Pode ser utilizado o SSH para se conectar ao computador Master e fazer as devidas configurações.
Essa configuração para liberar o acesso é feita no arquivo:
pg_hba.conf
$ sudo vi /etc/postgresql/9.1/main/pg_hba.conf
Altere o arquivo adicionando a seguinte linha
hostssl replication all 171.43.98.90/32 trust
hostssl: Será utilizada uma conexão com SSL.
replication: É o nome do usuário que se conectará ao PostgreSQL.
all: É a base de dados, neste caso "all" significa que pode se conectar a qualquer uma.
171.43.98.90/32: É o IP da máquina que se conectará ao nosso SGBD Master. Neste caso será informado o IP do Slave.
trust: Método de autenticação no nosso servidor Master.
Agora temos a configuração de conexão do nosso servidor PostgreSQL. Vamos agora configurar o próprio PostgreSQL.
Essa configuração é feita através do arquivo:
postgresql.conf
$ sudo vi /etc/postgresql/9.1/main/postgresql.conf
Localize a linha que contém os seguintes parâmetros e altere-os, conforme indicado abaixo:
listen_addresses, altere para
listen_addresses = '*'.
ssl: altere para
ssl = true. Caso não encontre a linha, busque por:
Security and Authentication.
wal_level: altere para
wal_level = hot_standby.
max_wal_senders: altere para
max_wal_senders = 1.
max_sender_delay: altere para
max_sender_delay = 200ms.
wal_keep_segments: altere para
wal_keep_segments = 200.
Configurando o Slave
Primeiramente iremos acessar o computador Slave. Como já mencionado anteriormente, costumo acessar o servidor através de SSH.
A configuração do SGBD Slave é feita nos arquivos:
postgresql.conf e
recovery.conf
Primeiramente vamos alterar o postgresql.conf.
$ sudo vi /etc/postgresql/9.1/main/postgresql.conf
Localize a linha que contém os seguintes parâmetros e altere-os, conforme indicado abaixo:
listen_addresses, altere para
listen_addresses = '*'.
ssl: altere para
ssl = true. Caso não encontre a linha, busque por:
Security and Authentication.
wal_level: altere para
wal_level = hot_standby.
max_wal_senders: altere para
max_wal_senders = 1.
max_sender_delay: altere para
max_sender_delay = 200ms.
wal_keep_segments: altere para
wal_keep_segments = 200.
hot_standby: altere para
hot_standby = on.
Agora vamos criar o arquivo recovery.conf.
$ sudo vi /var/lib/postgresql/9.1/main/recovery.conf
Este arquivo deve conter os seguintes parâmetros:
standby_mode = 'on'
primary_conninfo = 'host=185.25.2.160 port=5432'
trigger_file = '/var/lib/postgresql/9.1/main/failover.trg'
standby_mode: indica que o SGBD PostgreSQL está como Slave.
primary_conninfo: endereço do servidor Master.
trigger_file: nome arquivo que promoverá o Slave à Master. Basta que este arquivo exista, mesmo que vazio, na pasta de dados do PostgreSQL (/var/lib/postgresql/9.1/main/) para que o Slave saiba que deve ser promovido à Master.
Agora finalizamos a configuração do nosso servidor Slave.
Sincronizando os dados do Master para o Slave
Consideremos que o Master esteja com o PostgreSQL rodando perfeitamente e com os clientes fazendo as manipulações nos dados.
Há várias formas de sincronizar um banco de dados em dois computadores. A forma que vou explicar se aplica a seguinte situação: O servidor Master está em funcionamento e continuará em funcionamento durante o sincronismo (que pode demorar, dependendo de alguns aspectos, como: Link de internet, tamanho da base de dados).
1º Passo:
No computador Slave, pare o PostgreSQL.
$ sudo su postgres
$ cd /var/lib/postgresql/9.1/main/
$ /etc/init.d/postgres stop
2º Passo:
No computador Master, execute os seguintes comandos, alterando os nomes em caixa alta, conforme o seu sistema.
$ sudo su postgres
$ cd /var/lib/postgresql/9.1/main/
$ psql -p 5432 -c "SELECT pg_start_backup('Streaming_Replication', true)" postgres
$ rsync -e "ssh -l root -p 22" -C -av --progress -h --exclude recovery.done --exclude postmaster.pid --exclude postmaster.opts --exclude pg_log --exclude recovery.conf --exclude pg_xlog --exclude server.crt --exclude server.key /var/lib/postgresql/9.1/main postgres@IP_OU_HOST_DO_SLAVE:/var/lib/postgresql/9.1/
Após a execução do último comando, será solicitado a senha do usuário do postgres. Os arquivos
server.crt e
server.key são os certificados para o usuário root, de forma que não necessita informar a senha do usuário root.
Após a conclusão do sincronismo é necessário executar o seguinte comando:
$ psql -p 5432 -c "SELECT pg_stop_backup()" postgres
3º Passo:
No computador Slave, execute o seguinte comando:
$ rm -r pg_xlog/*
Iniciando a replicação
No Slave, inicie o PostgreSQL com o comando:
$ /etc/init.d/postgres start
Para termos certeza de que a nossa streaming replication está funcionando perfeitamente execute o comando a seguir, tanto no Master quanto no Slave, e analise o seu resultado:
$ ps aux | egrep 'postgres: wal'
Estando tudo correto deverá mostrar algo desse tipo:
No Master:
postgres: wal sender process postgres 171.43.98.90(58412) streaming 2E0/9800428
No Slave:
postgres: wal receiver process streaming 2E0/B47C1F8
Desta forma está feita nossa Streaming Replication com o PostgreSQL.
Nenhum comentário:
Postar um comentário