Не может применить обновление конфигурации Пост-ГРЭС после установки пользовательского каталога данных

Я настраиваю сервер базы данных, который работает на экземпляре 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, но я понятия не имею, что они имеют в виду и как зафиксировать эту ситуацию.

1
задан 8 December 2017 в 00:31

1 ответ

После некоторых исследований я нашел решение для обеспечения сервера базы данных Ubuntu 16.04 с PostgreSQL 9.6, который использует пользовательское расположение кластера и позволяет применять последующие изменения конфигурации.

В моем случае был подготовлен экземпляр AWS EC2, но процесс должен быть одинаковым для любого хоста Ubuntu 16.04. Я также использовал Ansible (v2.3.1) для автоматизации процесса обеспечения, но та же последовательность операций, что и в Ansible, должна привести к тому же результату. Вот основные шаги:

  1. Установите Python 2.7 на сервер Ubuntu (это необходимо только для Ansible).

  2. Используйте роль 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, в список.
    • Измените _tasks / setup_Debian.yml_, чтобы добавить репозиторий xenial-pgdg, включая его ключ, перед установкой списка postgres_packages. Подробности см. В https://www.postgresql.org/download/linux/ubuntu .
    • Обновите файл defaults / main.yml , указав вашу базу данных, расширение и информацию о пользователе базы данных. Вы можете изменить postgresql_global_config_options, чтобы настроить значение listen_addresses, и изменить postgresql_hba_entries с помощью пользовательских значений подключения.
    • В tasks / database.yml после создания вашей базы данных добавьте любые расширения в вашу базу данных.

После выполнения списка воспроизведения 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.

1
ответ дан 8 December 2017 в 00:31

Другие вопросы по тегам:

Похожие вопросы: