Я настраиваю сервер базы данных, который работает на экземпляре AWS EC2 с помощью Ubuntu 16.04 на основе официального изображения AMI от Канонического. На этом экземпляре я установил Пост-ГРЭС 9.6 от xenial-pgdg
репозиторий, затем изменил местоположение каталога данных от по умолчанию, потому что я хочу использовать больший полный объем для кластера баз данных, который является отдельным от корневого объема. После изменения местоположения кластера данных я, может казаться, успешно не перезагружаю/перезапускаю услуги пост-ГРЭС ни для какого последующего изменения конфигурации для вступления в силу. Как минимум я должен настроить postgresql.conf
и pg_hba.conf
файлы в /etc/postgresql/9.6/main/
каталог, чтобы позволить одному определенному другому серверу соединяться с этим сервером базы данных.
Вот соответствующая справочная информация об установке сервера.
Версия ОС:
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
Я создал a postgres
пользователь Linux и группа. Смонтированный новый диск для кластера баз данных, и сделанный postgres
владелец каталога данных. Добавленный xenial-pgdg
репозиторий и установленный следующие пакеты:
postgresql-9.6
postgresql-contrib-9.6
python-psycopg2
postgresql-9.6-postgis-2.3
libgeos-dev
postgresql-common
s3cmd
На основе этой рецензии я отбросил кластер баз данных по умолчанию и создал новый в новом каталоге данных (команды, выполняемые как postgres
пользователь):
pg_dropcluster --stop 9.6 main
pg_createcluster -d /mnt/pg_data/pg --start 9.6 main
Я отредактировал /etc/postgresql/9.6/main/postgresql.conf
файл для прислушиваний к соединениям от localhost
и IP-адрес по TCP на порте 5432:
listen_addresses = 'localhost, 10.112.190.57' # what IP address(es) to listen on;
port = 5432 # (change requires restart)
Затем после перезапуска postgresql сервиса не было никакого открытого соединения TCP, слушающего в настроенном IP-адресе, только в значении по умолчанию 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
Последняя строка в предыдущем выводе также показывает открыть сокет Unix для локального соединения Пост-ГРЭС. Я также должен настроить аутентификацию клиента от 10.112.190.57
IP-адрес в pg_hba.conf
файл.
Вопрос: Что делают шаги я должен взять, чтобы смочь применить новую конфигурацию от postgres.conf
и pg_hba.conf
файлы к услугам пост-ГРЭС?
Я рассмотрел настройку systemd сервисных файлов и нашел следующий рекомендуемый сервисный файл на веб-сайте PostgreSQL:
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
К сожалению, ExecStart=/usr/local/pgsql/bin/postgres -D ...
точки входа к команде, которая не существует на моем сервере.
Вопрос: Какова эквивалентная установка systemd, которая относится к Ubuntu 16.04 с PostgreSQL 9.6?
Наконец, вот услуги пост-ГРЭС и состояние службы кластеров:
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 postgresql@9.6-main
● postgresql@9.6-main.service - PostgreSQL Cluster 9.6-main
Loaded: loaded (/lib/systemd/system/postgresql@.service; 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/postgresql@9.6-main.service
├─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]: postgresql@9.6-main.service: Unit entered failed state.
Dec 06 18:44:40 ip-10-144-96-189 systemd[1]: postgresql@9.6-main.service: 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.
Я вижу отказы в состоянии процесса postgres@9.6-main, но я понятия не имею, что они имеют в виду и как зафиксировать эту ситуацию.
После некоторых исследований я нашел решение для обеспечения сервера базы данных Ubuntu 16.04 с PostgreSQL 9.6, который использует пользовательское расположение кластера и позволяет применять последующие изменения конфигурации.
В моем случае был подготовлен экземпляр AWS EC2, но процесс должен быть одинаковым для любого хоста Ubuntu 16.04. Я также использовал Ansible (v2.3.1) для автоматизации процесса обеспечения, но та же последовательность операций, что и в Ansible, должна привести к тому же результату. Вот основные шаги:
Установите Python 2.7 на сервер Ubuntu (это необходимо только для Ansible).
Используйте роль geerlingguy.postgresql Ansible, которая предоставляет шаги по умолчанию для установки PostgreSQL 9.5 в системе с кластером базы данных, инициализированным в расположении по умолчанию ( / var / lib / postgresql / 9.5 / main каталог). Эта роль полностью параметризована для легкой настройки. Я изменил его, чтобы установить PostgreSQL 9.6 с Postgis v2.3.
__postgresql_version
на «9,6» в vars / Ubuntu-16.yml . __postgresql_packages
, включив в него имена пакетов v9.6, как это необходимо в vars / Ubuntu-16.yml . Добавьте необходимые пакеты расширений, такие как postgis, в список. xenial-pgdg
, включая его ключ, перед установкой списка postgres_packages
. Подробности см. В https://www.postgresql.org/download/linux/ubuntu . postgresql_global_config_options
, чтобы настроить значение listen_addresses
, и изменить postgresql_hba_entries
с помощью пользовательских значений подключения. После выполнения списка воспроизведения Ansible, который содержит два вышеупомянутых шага, сервер PostgreSQL запущен и позволяет локальному пользователю postgres
подключиться к вашей базе данных. Вы можете внести изменения в конфигурацию, например, в файл /etc/postgresql/9.6/main/postgres.conf и использовать команду systemctl
для перезапуска службы postgresql
, чтобы применить изменения.
Роль geerlingguy.postgresql
Ansible позволяет настраивать каталог данных PostgreSQL, но я этого еще не пробовал. Вместо этого я успешно изменил каталог данных после описанного выше процесса, выполнив шаги в https://www.tutorialspoint.com/articles/how-to-change-postgresql-data-folder-location-on -ubuntu-16-04 статья.
Надеюсь, это поможет кому-то, кто быстро освоит PostgreSQL в Ubuntu 16.04.