PostgreSQL Replication and Load Balancing with pgpool-II
MONTANDO OS CLUSTERS:
Maquina 1 : Master : (10.0.0.1
)
Maquina 2 : Slave : (10.0.0.2
)
Maquina 3 : Pgpool : (10.0.0.3
)
Especificações:
-
postgresql - version 10.0
-
pgpool - version 3.7
-
ubuntu - 16.04
Montando as maquinas:
Maquina 1 : MASTER : 10.0.0.1
1.1 - Instalar o postgres-10
sudo apt-get install postgresql-10
- Caso venha a usar uma versão diferente lembre-se que as maquinas devem estar na mesma versao
1.1.1 - Caso não tenha o pacote do postgresql-10:
$ echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' >> /etc/apt/sources.list.d/pgdg.list
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install postgresql-10
- Caso ainda nao consiga pesquise na internet outro metodo ou instale uma versao diferente
1.2 - Criar um usuario no banco de dados.
$ sudo su - postgres
$ createuser -P pgpool
- Preste atencao neste usuario ele será importante em todos as etapas
1.3 - Mudar as configurações do postgresql:
- Altere ou adicione se caso não exister as seguintes configurações:
$ sudo vim /etc/postgresql/10/main/postgresql.conf
listen_addresses = 'localhost,10.0.0.1'
wal_level = hot_standby
max_replication_slots = 3
max_wal_senders = 3
- Reinicie para aplicar as configurações
$ sudo service postgresql restart
1.4 - Mudar as configurações das permissões de conexão do postgres:
- Altere ou adicione se caso não existir
$ sudo vim /etc/postgresql/10/main/pg_hba.conf
local all postgres peer
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host replication all 10.0.0.2/32 trust # the slave
host postgres pgpool 10.0.0.3/32 trust # the client
host all all 10.0.0.3/32 md5 # the client
- Reinicie para aplicar as configurações
$ sudo service postgresql restart
1.5 - Criar um slot para o slave:
$ sudo su - postgres
$ psql
$ select * from pg_create_physical_replication_slot('theslave');
- Reinicie para aplicar as configurações
$ sudo service postgresql restart
Maquina 2 : SLAVE : 10.0.0.2
2.1 - Instalar o postgres-10
$ sudo apt-get install postgresql-10
- Caso venha a usar uma versão diferente lembre-se que as maquinas devem estar na mesma versão
2.3 - Mudar as configurações dos postgresql:
- Altere ou adicione se caso não exister as seguintes configurações:
$ sudo vim /etc/postgresql/10/main/postgresql.conf
listen_addresses = 'localhost,10.0.0.2'
wal_level = hot_standby
hot_standby = on
hot_standby_feedback = on
- Reinicie para aplicar as configurações
$ sudo service postgresql restart
2.4 - Mudar as configurações das permissões de conexão do postgres:
- Altere ou adicione se caso não existir
$ sudo vim /etc/postgresql/10/main/pg_hba.conf
local all postgres peer
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host postgres pgpool 10.0.0.3/32 trust # the client
host all all 10.0.0.3/32 md5 # the client
- Reinicie para aplicar as configurações
$ sudo service postgresql restart
2.5 - Criar um usuario no banco de dados, foi criado o usuario com o nome pgpool
$ sudo su - postgres
$ createuser -P pgpool
- Preste atencao neste usuario ele será importante em todos as etapas
2.6 - Fazer a replicação:
$ sudo service postgresql stop
$ sudo su - postgres
$ cd 10/
$ rm -rf main
$ pg_basebackup -v -D main -R -P -h 10.0.0.1
- Volte o serviço do postgres
$ sudo service postgresql start
Maquina 3 : pgpool : 10.0.0.3
3.3 - Instale o postgresql-client-10
$ sudo apt-get install postgresql-client-10$
- Lembre-se, que deve ser o cliente e nao o serviço
3.4 Instale o pgpool2
$ sudo apt-get install pgpool2
3.5 - Mudar as configurações do pgpool2
$ sudo vim /etc/pgpool2/pgpool.conf
listen_addresses = '*'
port = 5432
backend_hostname0 = '10.0.0.1'
backend_port0 = 5432
backend_weight0 = 1
backend_flag0 = 'DISALLOW_TO_FAILOVER'
backend_hostname1 = '10.0.0.2
backend_port1 = 5432
backend_weight1 = 1
backend_flag1 = 'DISALLOW_TO_FAILOVER'
enable_pool_hba = on
pool_passwd = 'pool_passwd'
connection_cache = off
replication_mode = off
replicate_select = off
load_balance_mode = on
master_slave_mode = on
master_slave_sub_mode = 'stream'
sr_check_user = 'pgpool'
wd_lifecheck_user = 'pgpool'
3.6 - Mudar as configurações do arquivo de conexâo
$ sudo vim /etc/pgpool2/pool_hba.conf
- em algumas versoes este arquivo pode ter nome diferente
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
$ sudo pgpool reload
$ sudo service pgpool2 restart
3.7 - Criar um usuario através do pgpool para autenticação
$ sudo pg_md5 -u pgpool -m 123
$ sudo pgpool reload
3.8 - Reinicie o pgpool2 novamente
$ sudo pgpool reload
$ sudo service pgpool2 restart
- Caso você queira debugar a execução do pgpool:
$ sudo service pgpool2 stop
$ sudo pgpool -n -d -f /etc/pgpool2/pgpool.conf
3.9 - Fazendo uma conexao
- aqui voce entrará no postgres
$ psql -p 5432 -U pgpool -d postgres
Criando um banco
4.1 Na maquina 10.0.0.1
- Crie o banco de dados que voce deseja
- sudo su - postgres
- createdb teste
- Adicione permissoes de conexoes nele
$ sudo vim /etc/postgresql/10/main/pg_hba.conf
host teste pgpool 10.0.0.3/32 md5 # the client
- E garanta os privilegios para o usuario
GRANT ALL PRIVILEGES ON DATABASE teste TO pgpool;
- Reinicie para aplicar as configurações
$ sudo service postgresql restart
4.2 Na maquina 10.0.0.2
- Adicione permissoes de conexoes nele
$ sudo vim /etc/postgresql/10/main/pg_hba.conf
host teste pgpool 10.0.0.3/32 md5 # the client
- Reinicie para aplicar as configurações
$ sudo service postgresql restart