Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Introdução
Em um mundo onde cada vez mais informação importante está adentrando e sendo dis-
ponibilizada na internet, é de extrema importância garantir a disponibilidade do mesmo,
para isso os banco de dados e programas usam de técnicas para prevenirem a super lotação
de acessos, o controle de conexões e o balanceamento de dados entre vários servidores,
culminando assim em um melhor desempenho, o Pgpool-II tem um papel importante para
a execução e funcionamento desses metodos.
Pgpool-II é recomendado para grandes empresas que possuem uma base de da-
dos muito grande e precisa que essa base tenha uma alta disponibilidade, e confiança,
mas também é recomendo a aplicações que podem escalar muito rápido, porque uma vez
que o pgpool-II está sento utilizado, fazer a replicação dos dados para um ou mais ser-
vidores é muito fácil dado que o Pgpool-II fica executando entre o servidor e um cliente
PostgreSQL, comunicando através do protocolo de backend e frontend, sendo assim um
aplicativo de banco de dados (frontend) acha que o Pgpool-II é o servidor PostgreSQL
real, e o servidor (backend) vê o Pgpool-II como um de seus clientes.
Tornando assim o programa transparente tanto para o servidor quanto para o cli-
ente. Sendo assim uma importante ferramenta para balanceamento de carga (Load Ba-
lancing), replicação de dados (Replication) e gerenciamento de conexões (Automated fail
over, Connection Pooling, Limiting Exceeding Connections).[Pgpool. ]
É quando um dos servidores de banco de dados ficar inativo ou ficar instável, o Pgpool-
II o desanexará e continuará as operações usando o restante dos servidores de banco de
dados.
Figura 1. Representação simplificada de uma Pool de Conexão
O Pgpool faz isso atráves de sinais Heartbeat, o que é um sinal, enviado através
de pacotes UDP periodicamente, e quando esses pacotes não são mais recebidos pelo
PgPool, ele assume que aquele servidor não está mais ativo, e então faz automaticamente,
começa a enviar as requisições que estavam sendo enviadas a aquele servidor para outro
servidor. Quando um servidor volta a funcionar esses sinais voltaram a serem enviados e
o Pgpool-II vai voltar a enviar requisições a aquele servidor
Failover Automático é recomendado a serviços que precisam de uma alta disponi-
bilidade e também de uma alta confiabilidade, ou seja o sistema não pode parar e se parar
tem que ser pelor menor tempo possı́vel,
1.3. Replicação
A replicação possibilita a criação de um backup em tempo real em dois ou mais clus-
ters do PostgreSQL, para que o serviço possa continuar sem interrupção se um desses
clusters falhar. O Pgpool-II tem replicação integrada (replicação nativa). No entanto, o
usuário pode usar recursos de replicação externa, incluindo a replicação de streaming do
PostgreSQL.
O Pgpool-II permite por sua vez escalar um sistema de até 128 nós, considerando
Figura 2. Arquitetura de um sistema com Pgpool-II
È o chamado fluxo de dados, antes tinha que esperar um arquivo completo para ser arqui-
vado e depois replicado, agora com Streaming não é necessário mais esperar este arquivo
estar finalizado, pois cada vez que uma transação esta finalizada a mesma já pode ser
transmitida para os escravos. Assim replicando todo o cluster.
Este modo é recomendado caso precise de replicações com mais granularidades ou seja,
replicar apenas algumas tabelas, em vez de todo o cluster.
Neste modo, o PostgreSQL é responsável pela sincronização das tabelas. Como
a replicação lógica não replica todas as tabelas, é responsabilidade do usuário replicar a
tabela que poderia ter balanceamento de carga. Isso significa que, se uma tabela não for
replicada, o Pgpool-II poderá acessar tabelas desatualizadas.
O servidor primário (mestre) executa o banco de dados ativo, que trata as operações de
escrita e leitura, enquanto o servidor secundário (escravo) opera com uma cópia desse
banco de dados e trata apenas operações somente de leitura. Por isso, se o servidor prin-
cipal falhar, o sistema vai executar os dados do contêiner escravo.[MARKOVA ]
1.6. Watchdog
Watchdog é um recurso muito importante do pgpool-II, é um subprocesso implementado
para adicionar alta disponibilidade. Watchdog é usado para resolver o ponto único de
falha coordenando vários nós do Pgpool-II trocando informações entre si. Se o nó se
tornar um nó mestre, ele inicializará o status de backend localmente.
Quando um status de nó de backend é alterado por failover, o watchdog notifica
as informações para outros nós do Pgpool-II e as sincroniza. Basicamente os recursos
disponiveis no WatchDog são:
O watchdog monitora as respostas do serviço pgpool em vez do processo. Ele envia con-
sultas para o PostgreSQL via pgpool que está sendo monitorado pelo watchdog e o wat-
chdog verifica a resposta. Além disso, o watchdog monitora as conexões com servidores
de fluxo ascendente (servidores de aplicativos, etc.) do pgpool.
Quando um servidor pgpool em espera promove a ativação, o novo servidor ativo ativa a
interface IP virtual. Enquanto isso, o servidor ativo anterior desativa a interface IP virtual.
Isso permite que o pgpool ativo funcione usando o mesmo endereço IP, mesmo quando
os servidores são comutados.
2. Instalação e Configuração
A seguir será apresentado os passos para uma correta instalação e configuração do Pgpool-
II. A versão do PostgreSQL foi a 9.6 em um sistema Debian Linux 9. Antes de tudo
algumas dependências devem estar instaladas, como o pacote contrib do postresql, libpq5,
libpq-dev, o gcc e o make.
Comando 1. Instalando Dependencias
1 # apt-get install postgresql-contrib gcc make libpq-dev
libpq5
2.1. Instalação
Primeiro entre no site oficial do pgpool (http://www.pgpool.net) clique na areá de down-
loads e selecione o arquivo .tar.gz que irá baixar.
Comando 2. Baixando os arquivos.
1 # wget http://www.pgpool.net/mediawiki/images/pgpool-II
-4.0.1.tar.gz
Para permitir que o pgpool fique acessı́vel para toda a rede, devemos modificar
no arquivo pgpool.conf a linha listen addresses = ’localhost’ para listen addresses = ’*’,
tambem mude o parametro socket dir.
Comando 6. Editando o Arquivo pgpool.conf
1 # vi pgpool.conf
A porta que o pgpool será iniciado é a 9999, como se nessa porta um banco de dados
PostgreSQL estive-se rodando normalmente, ela será usada como ponte para a replicação
para os diversos nós existentes.
Para ativar a funcionalidade de replicação de dados e balanceamento de carga, no
mesmo arquivo mude os seguintes parametros.
Comando 8. Parametro para mudar no pgpool.conf
1 replication_mode = true
2 load_balance_mode = true
Agora iremos editar o arquivo pcp.conf. Este arquivo é utilizado para armazenar
o usuário e senha que o pgpool vai utilizar para se conectar ao banco de dados, e seus
registros tem o formato:
USERID:MD5PASSWD
Comando 9. Exemplo de como usar:
1 postgres:e8a48653851e28c69d0506508fb27fc5
3. Exemplos Práticos
Nesta seção iremos aplicar alguns exemplos praticos para melhor entendimentos dos con-
ceitos abordados pelo PgPool-II.
3.1. Replicação
Iremos fazer um exemplo para a função de replicação disponı́vel no PgPool. A Figura 3
representa uma visão geral do que iremos fazer no exemplo. [Pgpool a][Charly ]
6 backend_hostname1 = ’localhost’
7 backend_port1 = 5434
8 backend_weight1 = 1
9 backend_data_directory0 = ’/var/lib/postgresql/[versao]/[
no2]’
Iremos criar 2 clusters/nós com diferentes portas, mas com o mesmo nome de host. Feito
isso devemos criar as pastas para cada cluster criado no pgpool.conf com pg createcluster.
Comando 11. Criando os custers/nós.
1 sudo -u postgres
2 pg_createcluster 9.6 [no1]
3 pg_createcluster 9.6 [no2]
Iremos trocar as portas dos clusters/nós, para isso acesse a pasta /etc/post-
gresql/9.6/, nesta pasta conterá todos os clusters criados até então. Acesse e modifique a
porta de cada cluster nos arquivos postgresql.conf dos respectivos.
Comando 13. Modificando as portas dos custers/nós.
1 cd /etc/postgresql/9.6/[no1]
2 vim postgresql.conf
Você deverá repetir esses passos para cada cluster/nó criado, lembrando que no
nosso exemplo o no2 devera receber a porta 5434. Feito isso inicie os clusters/nós com o
comando:
Comando 16. Iniciando o no1.
1 pg_ctlcluster 9.6 [no1] restart
Aonde [no1] substituia pelo nome de todos os clusters/nós criados. Agora iremos
criar a posta do pgpool dentro do run.
Comando 17. Iniciando o no1.
1 sudo mkdir /var/run/pgpool
2 sudo chmod 777 /var/run/pgpool
3 sudo chown postgres /var/run/pgpool
Os seus nós já estão com replicação e balanceamento de carga, para testar iremos
inserir um banco de dados na porta 9999 que é a porta aonde esta localizado o servidor
pgpool.
Logue com o seu usuario postgres.
Comando 19. Logando com o usuario postgres.
1 su - postgres
Agora iremos criar um banco de dados e inserir no servidor pgpool, que irá replicar
essa modificações para o resto do nós.
Comando 20. Criando um Banco de dados.
1 createdb -p 9999 teste_replicacao
Você irá entrar no banco teste replicacao e agora ira criar uma tabela.
Comando 22. Inserindo uma tabela.
1 create table telefone(
2 int integer,
3 nome varchar(50)
4 );
Feito isso pressione CTRL+D ou para sair e voltar ao terminal logado com o
usuario postgres.
Agora iremos verificar se foi replicado aos outros banco de dados.
Escolha uma das portas que você colocou para beckend, aqui escolheremos a porta
5434.
Comando 24. Inserindo um Banco de dados.
1 psql -p 5434
Deve aparecer uma lista com os banco de dados, e nele o teste replicacao também.
Portanto assim a configuração esta completa.
Comando 26. Listando os Banco existentes.
1 List of databases
2 Name | Owner | Encoding | Collate |
3 ------------------+----------+----------+-------------+
4 postgres | postgres | UTF8 | en_US.UTF-8 |
5 template0 | postgres | UTF8 | en_US.UTF-8 |
6 | | | |
7 template1 | postgres | UTF8 | en_US.UTF-8 |
8 | | | |
9 teste_replicacao | postgres | UTF8 | en_US.UTF-8 |
10 (4 rows)
Isso efetuara um teste de carga em seu banco. Para verificar o resultado digite o
seguinte comando.
Comando 31. Comando enerico para Verificar o resultado do Load Balance.
1 psql -p NumeroPorta -c "show pool_nodes" NomeDb