Você está na página 1de 24

Sidymar Ramos Prexedes / sprexedes@hotmail.

com

Curso 801

Administração
PostgreSQL com Alta
Performance
Versão 2015_3.0
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Administração PostgreSQL com Alta


Performance

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Parando o Cluster do PostgreSQL

Objetivos da aula:

➢ Usando o pg_ctl

➢ Parada Smart

➢ Parada Fast

➢ Parada Immediate

➢ Uso do kill

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

IT Experience

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Preciso parar o PostgreSQL

➢Lembre-se que você tem:


● Arquivos abertos
● Conexões de rede
● Transações em andamento
● Semáforos
● Memória compartilhada

Não desejamos parar nossos bancos de dados nunca, mas é claro que várias
situações podem requerer esta tarefa. Um SGBD como o PostgreSQL terá:
Arquivos abertos – centenas ou até milhares de arquivos estão abertos em
disco quando bancos de dados estão transacionando.
Conexões de rede – sockets estão em uso, com clientes locais e/ou remotos
conectados.
Transações estão em andamento – a norma ACID prevê que as coisas
comecem, acontecem e terminem, tudo isso tem um intervalo de tempo.
Semáforos estão alocados – SGBDs multiprocesso utilizam o recurso de
semáforos do sistema operacional para controlar os processos que estão ocupando o
tempo de CPU e a comunicação entre eles.
Memória compartilhada está alocada – o desenho multiprocesso faz com que
uma área de memória esteja alocada para compartilhamento de todos os processos.
Considerando os itens acima, ao parar o cluster todos os recursos devem ser
liberados corretamente, caso contrário, o sistema operacional poderá não funcionar a
contento após uma parada do SGBD por esgotamento de recursos. O cluster pode
até não conseguir mais ser inicializado.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Preciso parar o PostgreSQL

Modos do PostgreSQL:
● Smart
● Fast
● Immediate
Modos do S.O.
● kill

Por isso o PostrgreSQL implementa várias formas de parada: smart, fast e


immediate.

Também é possível utilizar os sinais de kill que estão disponíveis no Linux e


toda a família Unix e derivados.

Utilizando o pg_ctl

O pg_ctl é a forma preferida para controlar o início e parada dos clusters


PostgreSQL, pois ele implementa uma série de facilidades ao administrador como
escolha dos sinais corretos nos processos corretos. O pg_ctl pode ser facilmente
implementado também em scripts.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Usando o pg_ctl

➢Parada padrão smart:


pg_ctl -D /dir/cluster stop

➢Forçando o modo de parada:


pg_ctl -m [modo] -D /dir/cluster stop

Já foi mostrado nos capítulos anteriores o uso do pg_ctl para iniciar os


clusters. Para pará-los, a sintaxe será:

pg_ctl -m [modo] -D /dir/cluster stop

Se o modo for omitido, será utilizado o modo smart por padrão.

O reload não parará o cluster, apenas recarregará os arquivos de


configuração. Mais adiante veremos quais configurações podem ser alteradas e
recarregadas sem parada do cluster.

Não se deve passar a opção -m (modo) quando a intenção for fazer recarga de
arquivos de configuração (reload). Na recarga, não há qualquer indisponibilidade do
cluster, tudo continua funcionando normalmente.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Usando o pg_ctl

➢Reiniciar o cluster:
pg_ctl -m [modo] -D /dir/cluster restart

➢Recarregar a configuração:
pg_ctl -D /dir/cluster reload

Para parar e iniciar (restart) o cluster, ao invés de executar o pg\_ctl duas


vezes, pode-se utilizar:

pg_ctl -m [modo] -D /dir/cluster restart

Existe também uma forma de apenas recarregar os arquivos postgresql.conf e


pg_hba.conf, chamada reload:

pg_ctl -D /dir/cluster reload


Sidymar Ramos Prexedes / sprexedes@hotmail.com

Parada Smart

➢ Modo mais seguro de parar o cluster;

➢ Aguardará:

Finalização de backups
● Finalização de transações
● Encerramento de todas as sessões

➢ Para usá-la com servidores de aplicação,


middlewares ou pools de conexões, terá de encerrá-
los primeiro;

Parada smart

É a forma padrão de parada e também a mais segura.

Ao receber uma solicitação de parada smart, o PostgreSQL aguardará que


todas as transações correntes sejam finalizadas, todas as sessões (conexões)
abertas sejam encerradas e, caso exista, um backup em andamento também será
aguardado.

O uso da parada smart em ambientes complexos pode ser difícil ou até


impossível. Servidores de aplicação, pools de conexão, middlewares entre os
usuários e o banco de dados, scripts de automação rodando e até mesmo se algum
usuário deixou o psql ou pgAdmin abertos podem fazer com que o cluster não pare.

Será então necessário que todas as aplicações e clientes sejam parados


primeiro para que, em seguida, possa ser utilizada a parada smart.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Parada Fast

➢ Modo agressivo de parada;

➢ Serão encerrados pelo PostgreSQL:


Backups em andamento;
● Transações, emitirão rollback;

Sessões;

➢ A parada Fast ainda é considerada uma parada limpa.

10

Parada fast

A parada fast é considerada agressiva, porém, ainda conserva certo grau de


segurança.

Ao receber uma solicitação de parada fast, o PostgreSQL encerrará as


transações correntes com um rollback, encerrará sessões abertas e qualquer backup
em andamento. Os recursos de sistema operacional como semáforos e memória
compartilhada serão liberados se a parada for concluída com sucesso.

Note que uma parada fast, ao enviar o rollback das transações correntes, pode
fazer com que uma aplicação tenha comportamento inesperado se não estiver
preparada para tal. Esteja ciente de que a aplicação foi preparada para tratar esse
caso.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Parada Immediate

➢ Modo muito agressivo de parada;


➢ Faz tudo o que a fast faz;
➢ Encerrará todos os processos do PostgreSQL
forçosamente;
➢ Na próxima inicialização, os arquivos WAL pendentes
terão de ser lidos;
➢ É equivalente a uma falha do servidor;
➢ É útil apenas se o servidor não atende à tentativa fast,
como processos presos.

11

Parada immediate

Só deve ser utilizada em último caso. A parada immediate faz tudo o que a
parada fast faz, só que encerra todos os processos abruptamente, sem liberar
corretamente os recursos do sistema operacional. É equivalente a uma falha
catastrófica.

Ao ser iniciado novamente, o PostgreSQL fará a releitura dos arquivos WAL


presentes no diretório pg_xlog, para garantir a gravação correta de todas as
transações finalizadas até o momento da parada.

A parada immediate tem utilidade caso o servidor esteja passando por


problemas, por exemplo, processos presos, e a parada fast não estiver funcionando.

Pode ser necessário utilizar comandos do sistema operacional para liberar


recursos não liberados pela parada, especialmente semáforos do Solaris.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Uso do kill

➢ Os seguintes sinais podem ser enviados ao processo

postgres:


SIGTERM – equivale à parada smart

● SIGINT – equivale à parada fast

● SIGQUIT – equivale à parada immediate

● SIGHUP – equivale ao reload

➢ Utilizar o pg_ctl é mais prático e seguro.

12

Uso do kill

Os sinais de kill devem ser enviados ao processo pai postgres, nunca aos demais.
Caso um sinal de kill inadequado seja enviado a um processo de conexão (backend) todo
o seu cluster poderá falhar catastroficamente por corrupção da memória compartilhada.

O processo postgres é o orquestrador e pai dos demais processos (que são forks
dele), portanto, ele possui rotinas capazes de interpretar os sinais kill. O pg_ctl faz todo
esse trabalho, por isso, prefira utilizá-lo sempre.

Ao instalar o PostgreSQL a partir dos pacotes disponibilizados de forma integrada


às distribuições Debian e Red Hat, bem como suas derivadas, scripts especializados são
disponibilizados para controlar o cluster. Prefira utilizar os scripts específicos das
distribuições sempre que disponíveis e isso for possível.

Nas distribuições Debian e suas derivadas, utilize como root o comando:


/etc/init.d/postgresql [start | stop | restart | reload | status]
Nas distribuições Red Hat 6 ou superior e suas derivadas, utilize como root o comando:
service postgresql-X.Y [start | stop | restart | reload | status | enable | disable]

Onde X.Y é a versão do PostgreSQL.


Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter

Gerenciar início/parada dos servidores DB Master e DB


Standby 1

➢ Tarefas:
● Instalar o Postgres na máquina DB Standby 1;
● Configurar link do comando pg_ctl;

Gerenciar servidores através do comando pg_ctl;

13

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
máquina DB Standby 1
Configurar o repositório:

1 # vim /etc/apt/sources.list
....
deb http://apt.postgresql.org/pub/repos/apt/ jessie­pgdg 
main

2 # wget https://www.postgresql.org/media/keys/ACCC4CF8.asc 
3 # apt­key add ACCC4CF8.asc
4 # apt­get update
5 # apt­get upgrade

14

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
máquina DB Standby 1
Instalar o PostgreSQL:

1 # apt­get install postgresql­9.4
2 # ls ­l /usr/lib/postgresql/9.4/bin 
3 # whereis pg_dump
4 # whereis pg_dumpall
5 # whereis psql
6 # ls ­l /etc/postgresql/9.4/main
7 # ls ­l /var/lib/postgresql/9.4/main

15

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
máquina DB Master

Criar link para o comando pg_ctl:


1 # ln ­s /usr/lib/postgresql/9.4/bin/pg_ctl /bin/

2 # su – postgres

3 $ pg_ctl ­­help

16

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
máquina DB Master

Gerenciar servidores através do comando pg_ctl


Faça a parada do servidor PostgreSQL no modo Smart:

1 $ pg_ctl stop ­D /etc/postgresql/9.4/main ­m smart

NOTA: Analise o log.

     2 $ tail ­f /var/log/postgresql/postgresql­9.4­main.log

3 $ pg_ctl start ­D /etc/postgresql/9.4/main

NOTA: Analise o log.

17

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
máquina DB Master

Gerenciar servidores através do comando pg_ctl


Faça a parada do servidor PostgreSQL no modo Fast:

1 $ pg_ctl stop ­D /etc/postgresql/9.4/main ­m fast

NOTA: Analise o log.

2 $ pg_ctl start ­D /etc/postgresql/9.4/main

NOTA: Analise o log.

18

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
máquina DB Master

Gerenciar servidores através do comando pg_ctl


Faça a parada do servidor PostgreSQL no modo immediate.
1$ pg_ctl stop -D /etc/postgresql/9.4/main -m immediate

NOTA: Analise o log.


2$ pg_ctl start -D /etc/postgresql/9.4/main

NOTA: Analise o log.

19

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
máquina DB Master
Uso do comando kill
Force o término do servidor PostgreSQL com kill -15.
$ exit
1

# ps aux | grep postgres


2

Verifique o PID dos processos postgres. Tente terminá-lo com:


# kill -15 [PID]
3

NOTA: Analise o log.

20

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
máquina DB Master
Uso do comando kill
Force o término do servidor PostgreSQL com kill -9.
# ps aux | grep postgres
1

Verifique o PID dos processos postgres. Tente terminá-lo com:


# kill -9 [PID]
2

NOTA: Analise o log.

21

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter

Gerenciar servidores através do comando


pg_ctl e uso do comando kill

NOTA: Repita os comandos na máquina DB Standby 1, que será utilizada


na aula de replicação de dados.

22

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Próximos Passos

Para que você tenha um melhor aproveitamento do curso,


participe das seguintes atividades disponíveis no Netclass:

➢ Resolver o Desafio para adicionar um segunda instância do


Postgres na porta 5435 e postar o resultado no Fórum
Temático;
➢ Responder as questões do Teste de Conhecimento.

Mãos à obra!

23
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Você também pode gostar