Estou provisionando um servidor de banco de dados que é executado em uma instância do AWS EC2 usando o Ubuntu 16.04 com base em uma imagem oficial da AMI da Canonical. Nesta instância, instalei o Postgres 9.6 do repositório xenial-pgdg
, depois mudei o local do diretório de dados do diretório padrão, porque desejo usar um volume de capacidade maior para o cluster de banco de dados separado do volume raiz. Depois de alterar a localização do cluster de dados, parece que não consigo recarregar / reiniciar o serviço postgres com êxito para que qualquer alteração de configuração subsequente entre em vigor. No mínimo, preciso configurar os arquivos postgresql.conf
e pg_hba.conf
no diretório /etc/postgresql/9.6/main/
para permitir que um outro servidor específico se conecte a esse servidor de banco de dados.
Aqui estão informações básicas relevantes sobre a configuração do servidor.
Versão do SO:
ubuntu@ip-10-144-96-189:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.2 LTS
Release: 16.04
Codename: xenial
Eu criei um usuário e grupo postgres
linux. Montou a nova unidade para o cluster de banco de dados e tornou postgres
o proprietário do diretório de dados. Adicionou o repositório xenial-pgdg
e instalou os seguintes pacotes:
postgresql-9.6
postgresql-contrib-9.6
python-psycopg2
postgresql-9.6-postgis-2.3
libgeos-dev
postgresql-common
s3cmd
Baseado em este write-up descartei o cluster de banco de dados padrão e criei um novo no novo diretório de dados (comandos executados como postgres
user):
pg_dropcluster --stop 9.6 main
pg_createcluster -d /mnt/pg_data/pg --start 9.6 main
Eu editei o arquivo /etc/postgresql/9.6/main/postgresql.conf
para ouvir as conexões de localhost
e um endereço IP sobre TCP na porta 5432:
listen_addresses = 'localhost, 10.112.190.57' # what IP address(es) to listen on;
port = 5432 # (change requires restart)
Em seguida, após reiniciar o serviço postgresql, não havia nenhuma conexão TCP aberta ouvindo o endereço IP configurado, apenas no padrão localhost
:
ubuntu@ip-10-144-96-189:~$ sudo systemctl restart postgresql
ubuntu@ip-10-144-96-189:~$ netstat -nlp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
udp 0 0 10.144.96.189:123 0.0.0.0:* -
udp 0 0 127.0.0.1:123 0.0.0.0:* -
udp 0 0 0.0.0.0:123 0.0.0.0:* -
udp6 0 0 fe80::2000:bff:fed5:123 :::* -
udp6 0 0 ::1:123 :::* -
udp6 0 0 :::123 :::* -
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 166227 23611/systemd /run/user/1000/systemd/private
unix 2 [ ACC ] SEQPACKET LISTENING 8758 - /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 8754 - /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 8760 - /run/lvm/lvmpolld.socket
unix 2 [ ACC ] STREAM LISTENING 8765 - /run/systemd/journal/stdout
unix 2 [ ACC ] STREAM LISTENING 8891 - /run/lvm/lvmetad.socket
unix 2 [ ACC ] STREAM LISTENING 13009 - /run/snapd-snap.socket
unix 2 [ ACC ] STREAM LISTENING 13005 - /var/lib/lxd/unix.socket
unix 2 [ ACC ] STREAM LISTENING 13008 - /run/snapd.socket
unix 2 [ ACC ] STREAM LISTENING 13010 - /run/acpid.socket
unix 2 [ ACC ] STREAM LISTENING 13011 - /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 13012 - /run/uuidd/request
unix 2 [ ACC ] STREAM LISTENING 13169 - @ISCSIADM_ABSTRACT_NAMESPACE
unix 2 [ ACC ] STREAM LISTENING 148848 - /var/run/postgresql/.s.PGSQL.5432
A última linha na saída anterior também mostra o soquete Unix aberto para uma conexão local do Postgres. Eu também preciso configurar a autenticação do cliente a partir do endereço IP 10.112.190.57
no arquivo pg_hba.conf
.
Pergunta:
Quais etapas devo seguir para aplicar a nova configuração dos arquivos postgres.conf
e pg_hba.conf
ao serviço postgres?
Considerei personalizar os arquivos de serviço systemd e encontrei o seguinte arquivo de serviço recomendado no PostgreSQL website :
When using systemd, you can use the following service unit file (e.g., at /etc/systemd/system/postgresql.service):
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
[Service]
Type=notify
User=postgres
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0
[Install]
WantedBy=multi-user.target
Infelizmente, a entrada ExecStart=/usr/local/pgsql/bin/postgres -D ...
aponta para um comando que não existe no meu servidor.
Pergunta: Qual é a configuração equivalente do systemd que se aplica ao Ubuntu 16.04 com o PostgreSQL 9.6?
Por fim, aqui está o serviço postgres e o status do serviço de cluster:
ubuntu@ip-10-144-96-189:~$ systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2017-12-06 18:44:43 UTC; 1 day 2h ago
Process: 18307 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 18307 (code=exited, status=0/SUCCESS)
Tasks: 0
Memory: 0B
CPU: 0
CGroup: /system.slice/postgresql.service
Dec 06 18:44:43 ip-10-144-96-189 systemd[1]: Starting PostgreSQL RDBMS...
Dec 06 18:44:43 ip-10-144-96-189 systemd[1]: Started PostgreSQL RDBMS.
ubuntu@ip-10-144-96-189:~$ systemctl status [email protected]
● [email protected] - PostgreSQL Cluster 9.6-main
Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
Active: active (running) since Wed 2017-12-06 18:44:43 UTC; 1 day 2h ago
Process: 18274 ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast %i stop (code=exited, status=1/FAILURE)
Process: 18281 ExecStart=postgresql@%i --skip-systemctl-redirect %i start (code=exited, status=0/SUCCESS)
Main PID: 18290 (postgres)
CGroup: /system.slice/system-postgresql.slice/[email protected]
├─18290 /usr/lib/postgresql/9.6/bin/postgres -D /mnt/pg_data/pg -c config_file=/etc/postgresql/9.6/main/postgresql.conf
├─18292 postgres: 9.6/main: checkpointer process
├─18293 postgres: 9.6/main: writer process
├─18294 postgres: 9.6/main: wal writer process
├─18295 postgres: 9.6/main: autovacuum launcher process
└─18296 postgres: 9.6/main: stats collector process
Dec 06 18:44:40 ip-10-144-96-189 systemd[1]: Stopped PostgreSQL Cluster 9.6-main.
Dec 06 18:44:40 ip-10-144-96-189 systemd[1]: [email protected]: Unit entered failed state.
Dec 06 18:44:40 ip-10-144-96-189 systemd[1]: [email protected]: Failed with result 'exit-code'.
Dec 06 18:44:40 ip-10-144-96-189 systemd[1]: Starting PostgreSQL Cluster 9.6-main...
Dec 06 18:44:43 ip-10-144-96-189 systemd[1]: Started PostgreSQL Cluster 9.6-main.
Eu vejo as falhas no [email protected] status do processo, mas não tenho idéia do que elas significam e como corrigir essa situação.