Replicação de Banco de Dados

Propaganda
Replicação de Banco de Dados
Replicar é preciso
* Aumenta a disponibilidade
- Mesmo site
- Site remoto
* Distribuição de carga
- Leitura
- Escrita (maior desfio)
- Funções
Replicação Nativa do PostgreSQL
* Master - Múltiplos Slaves
- A partir do Master
- A partir de outro Slave (Cascata)
A replicação no postgreSQL só existe, desde que se tenha um log shipping ou geração de
arquivamento, a partir do postgreSQL 9.0 tem a replicação por fluxo embutido.
No PostgreSQL 9.4 temos a replicação de master para múltiplos slaves e um slave pode se
conectar a um master, tendo um slave na rede pode se conectar outros slaves a um slave
tendo assim uma replicação em cascata.
*Streaming
- Replica utilizando uma conexão normal PostgreSQL
- Replica todo o Cluster
Enquanto no Log Shipping tem que aguardar o arquivo estar completo para ser transmitido e
por padrão o PostgreSQL é de 16Mb a informação não é replicada.
Ja no Cluster o que alguns consideram desvantagem é que ele não atualiza somente uma
tabela ou uma instrução ele atualiza tudo .
* Permite Hot-Standby
Os servidores slaves vão permitir leitura ou seja pode-se dar um SELECT no servidor.
* Replica Síncrona
Os servidores Slaves vão estar no mesmo tempo do servidor Master, na falha do servidor
Master os servidores Slaves tem o mesmo conteúdo que o Master tinha.
Este processo tem uma perda de desempenho de aproximadamente 50%, pois temos que
aguardar a informação ser salva no Master e depois no Slave isso estamos falando em
servidores no mesmo site, com redes com boas performances.
* Replicação Assíncrona
No caso da replicação assíncrona o servidor Slave vai estar sempre com um delay em relação
ao Master, em alguns casos, onde os bancos com pouca escrita este delay é praticamente
imperceptível, porem ela é utilizada na grande maioria em replicações de longa distância com
latências muito altas.
Além da replicação nativa no PostgreSQL, temos também a replicação lógica.
Se houver a necessidade de uma maior granularidade.
* Slony
- Replicação Master múltiplos Slaves
Pode ser escolhido até a tabela especifica para ser replicada.
* Bucardo
- Master múltiplos Slaves
- Master multi-Master (Divisão de Processamentos)
Muito utilizado em excesso de funções onde exige um processamento muito alto.
* xDB - EnterpriseDB
- Assim como Bucardo + suporte a replicação SGDBs
Faz replicação entre bancos de dados diferentes. ex.(De um PostgreSQL para um Oracle).
- Ferramenta Gráfica de Administração
Uma configuração rapida de replicação.
Servidor Mater
Ajustar o arquivo postgreSQL.conf, a partir de um sql padão.
* listen_addresses, wal_level, wal_keep_segments e max_wal_senders
Ajustar o arquivo pg_hba.conf
* Criar entrada para o Usuario de replicação.
Reiniciar o PostgreSQL.
Criar o Usuario de replicação.
1º Passo
Editar o arquivo postgresql.conf
a) Localize a linha listen_addresses, normalmente ela esta comentada, descomente a linha e
altere o 'localhost' para 'localhost,IP_DA_MAQUINA'.
b) Localize a linha wal_level, normalmente ela esta comentada, descomente a linha e altere
após o sinalde iqual a palavra Minimal para hot_standby, se não o postgresql nao replica.
c) Localize a linha wal_keep_segments, altere o valor de 0 (zero) para exemplo 10 em um
banco que escreve pouco e podendo alterar para 100 ou 1000 dependendo da quantidade de
gravação gerada pelo banco.
d) Localize a linha max_wal_senders, descomente a linha e informe a quantidade de replicas
que se vai ter.
Após editar salva e sai do arquivo.
2º Passo
Editar o arquivo pg_hba.conf
Vai ao final do arquivo e de entrada com a seguinte linha:
host replication
replicador
0.0.0.0/0
trust
Onde host é o nome da entrada, replication é o nome do banco de dados fictício para que o
postgres entenda que será replicado, 0.0.0.0/0 deve ser inserido o ip do servidor slave (que vai
receber a replicação) e trust é para não pedir senha, pode ser colocado md5 também.
Após editar salva e sai do arquivo.
3º Passo
Reinicie o banco.
4º Passo
Criar o usuário padrão.
a) sudo postgres
b) psql
c) create user replicador replication;
d) \q
Servidor Slave
* Parar o postgreSQL
* Fazer pg_basebackup
* Criar recovery.conf
* Ajustar mascara do diretório
* Iniciar o PostgreSQL
1º Passo
Parar o PostgreSQL
service postgresX stop
2º Passo
Remover o banco de dados atual que tenha no banco.
rm -RF /var/lib/pgsql/9.4/data/*
Logar como Postgres, pois ele é o dono do cluster para usar a ferramenta pg_basebackup.
pg_basebackup -D /var/lib/pgsql/9.4/data/ -h 0.0.0.0 -U replicador
Para quem não conhece o pg_basebackup o parâmetro -D e o diretório onde o backup vai cair,
o diretório deve estar vazio por esse motivo foi removido o conteúdo da pasta /data, o -h será
o ip do servidor Master, e o -U nome do usuário criado para replicação.
3º Passo
Criar um arquivo recovery.conf no diretório /var/lib/pgsql/9.4/data/ com o seguinte conteúdo.
#recovery.conf
standby_mode=on
primary_conninfo='host=IP_Master user=replicador application_name=nome_servidor_slave'
trigger_file='/tmp/pgtrigger'
Salve e saia.
4º Passo
Reiniciar o postgreSQL
Como saber se o postgres esta replicando?
No Slave digite:
ps aux | grep postgres
se tiver a linha
postgres: wal receiver process
No Master digite
ps aux | grep postgres
se tiver a linha “wal send process replicador ip_slave” esta replicando
Como Promover um Slave a Master?
Como saber se uma maquina esta em modo de replicação?
No banco de dados entre com o código: select pg_is_in_recovery();
A função ira retornar um "t" de true se a maquina for slave.
Promovendo:
Como usuário postgres é criado um arquivo trigger.
touch /tmp/pgtrigger "Este foi o nome configurado no recovery.conf"
pronto agora ele já é master.
Download