Skip to content

Instantly share code, notes, and snippets.

@sebastianwebber
Last active July 30, 2016 01:35
Show Gist options
  • Select an option

  • Save sebastianwebber/f2d914ba28ce35361f52aa42226757d7 to your computer and use it in GitHub Desktop.

Select an option

Save sebastianwebber/f2d914ba28ce35361f52aa42226757d7 to your computer and use it in GitHub Desktop.
Laborário sobre WARM Standby

Setup do Warm Standby

Antes de começar

Remoção dos diretórios de dados (PGDATA)

Antes de iniciar, remova o pare o banco de dados e remova o diretório de dados anterior e recrie-o novamente:

systemctl stop postgresql-9.5
rm -rf /var/lib/pgsql/9.5/data
/usr/pgsql-9.5/bin/postgresql95-setup initdb

Ajustes do SELinux

Desabilite o SELinux, ajustando o arquivo /etc/selinux/config e ajustando o parametro abaixo:

SELINUX=disabled

Defina uma senha para o usuário postgres em ambos os servidores (senha será utilizada em etapas posteriores):

passwd postgres

Também, instale o pacote do utilitário rsysnc e o modulo contrib:

yum install rsync postgresql95-contrib

Tarefas do servidor Master

Configuração do acesso ao usuário postgres pelo SSH

Logue com usuário postgres...

su - postgres

.. e crie a chave SSH, lembre de preencher os dados com os valores padrão:

ssh-keygen -t rsa

Importante: Não utilizar uma senha para a chave criada pode ser uma falha de segurança, assim, evite de compartilhar a chave privada.

Com a chave criada, faça a cópia para a máquina do colega:

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

Importante: Lembre de substituir o ip 10.0.10.5X pelo endereço ip dado pelo instrutor, respectivo ao seu colega.

Saia do usuário postgres.

Ajustes no pg_hba.conf

Edite o arquivo pg_hba.conf disponível no diretório de dados (normalmente em /var/lib/pgsql/9.5/data):

vim /var/lib/pgsql/9.5/data/pg_hba.conf

Ajuste a linha da conexão local, liberando acesso senha ao usuário postgres nas conexões via socket:

local   all     all     trust

Faça reload no banco de dados para aplicar as configurações:

systemctl reload postgresql-9.5

Configuração dos parametros para o Warm standby

Após o reload, conecte ao banco através do utilitário psql...

psql -U postgres

... e ajuste os parametros necessários:

ALTER SYSTEM SET wal_level TO 'archive';
ALTER SYSTEM SET archive_mode TO 'on';
ALTER SYSTEM SET archive_command TO 'rsync -a %p [email protected]:/standby/wal/%f';

Importante: Lembre de substituir o ip 10.0.10.5X pelo endereço ip dado pelo instrutor, respectivo ao seu colega.

Para aplicar, é necessário reiniciar o banco, através do comando abaixo:

systemctl restart postgresql-9.5

Testando o arquivamento dos WALs

Esta atividade é opcional.

Para testar a geração de WALs, é necessário criar um banco de dados de testes para o pgbench. Crie-o através do comando abaixo:

createdb -U postgres bench

Com a base criada, execute o pgbench:

/usr/pgsql-9.5/bin/pgbench -U postgres -d bench -i -s 10

Faça o backup do banco no servidor standby

Antes de iniciar essa atividade, faça os ajustes no servidor standby.

Logue com o usuário postgres:

su - postgres

Inicie o backup através do utilitário psql, chamando a função pg_start_backup():

psql -U postgres -c "select pg_start_backup('laboratorio curso pgsql');"

Agora que backup foi iniciado, faça a cópia dos arquivos de dados (PGDATA) para servidor standby:

rsync -va --progress --delete /var/lib/pgsql/9.5/data [email protected]:/standby/pgdata

Importante: Lembre de substituir o ip 10.0.10.5X pelo endereço ip dado pelo instrutor, respectivo ao seu colega.

Após a cópia, finalize o backup:

psql -U postgres -c "select pg_stop_backup();"

Tarefas do servidor Standby

Atividades citadas aqui são feitas na maquina virtual do colega.

Preparação do ambiente

Crie o diretório para receber o arquivamento dos arquivos wal do servidor Master, já arrumando as permissões necessárias:

mkdir -p /standby/wal
chown -R postgres. /standby/
cd /standby/pgdata/data/

Ajustes do Standby

Crie o arquivo recovery.conf com as devidas permissões:

touch recovery.conf
chown postgres. recovery.conf 
chmod 600 recovery.conf 

Edite o arquivo recovery.conf...

vim recovery.conf

.. E adicione o conteudo abaixo:

restore_command='/usr/pgsql-9.5/bin/pg_standby -d -t /tmp/pgsql.failover.trg /standby/wal %f %p %r 2>> standby.log'
recovery_end_command='rm -f /tmp/pgsql.failover.trg'

Pra finalizar, ajuste a porta padrão no postgresql.conf:

port = 5555

Importante: Lembre de descomentar o parametro para que o mesmo tenha efeito.

Criação do serviço no SO

Copie o serviço existente (postgresql-9.5.service):

cd /usr/lib/systemd/system/
cp postgresql-9.5.service standby-9.5.service

Agora edite as linhas abaixo:

Environment=PGDATA=/standby/pgdata
ExecStart=/usr/pgsql-9.5/bin/pg_ctl start -D ${PGDATA} -s -W

Atualize o deamon do systemctl e habilite que o servidor inicie automaticamente:

systemctl daemon-reload
systemctl enable standby-9.5

Acesse o diretório de dados (PGDATA) e edite o arquivo postgresql.conf:

[root@lab51 system]# cd /standby/pgdata/data/
[root@lab51 data]# vim postgresql.conf

Ajuste as linhas abaixo:

port = 5555

Importante: Lembre de descomentar a linha.

Para finalizar, inicie o banco de dados:

systemctl start standby-9.5

Testes

Simular carga de dados no servidor master

Execute os comandos abaixo para simular uma carga de dados no servidor master:

createdb -U postgres tt
createdb -U postgres teste
createdb -U postgres gostei
/usr/pgsql-9.5/bin/pgbench -d gostei -U postgres -i
/usr/pgsql-9.5/bin/pgbench -d gostei -U postgres -T 30 -c 10 

Assumir o servidor standby

Para assumir o servidor standby, crie o arquivo /tmp/pgsql.failover.trg, conforme abaixo:

touch /tmp/pgsql.failover.trg

Importante: Execute essa instrução apenas quando o instrutor passar a solicitar.

Agora, verifique se o servidor standby possui os bancos criados.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment