Невозможно применить обновление конфигурации Postgres после настройки настраиваемого каталога данных

Я предоставляю сервер базы данных, который запускается на экземпляре AWS EC2, используя Ubuntu 16.04 на основе официального изображения AMI от Canonical. В этом экземпляре я установил Postgres 9.6 из репозитория xenial-pgdg, а затем изменил местоположение каталога данных по умолчанию, потому что я хочу использовать больший объем тома для кластера базы данных, который отделен от корневого тома. После изменения местоположения кластера данных я не могу успешно перезагрузить / перезапустить службу postgres, чтобы все последующие изменения конфигурации вступили в силу. Как минимум, мне нужно настроить файлы 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

Я создал пользователя и группу linux postgres. Установил новый диск для кластера базы данных и сделал postgres владельцем каталога данных. Добавил репозиторий xenial-pgdg и установил следующие пакеты:

postgresql-9.6 postgresql-contrib-9.6 python-psycopg2 postgresql-9.6-postgis-2.3 libgeos-dev postgresql-common s3cmd

На основе этой записи я удалил кластер базы данных по умолчанию и создал новый в новом каталоге данных (команды, выполненные как postgres user:

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-разъем для локального соединения Postgres. Мне также необходимо настроить аутентификацию клиента с IP-адреса 10.112.190.57 в файле pg_hba.conf.

Вопрос: Какие шаги я должен предпринять, чтобы применить новую конфигурацию из файлов postgres.conf и pg_hba.conf к службе postgres?

Я рассмотрел настройку systemd и нашел следующий рекомендуемый файл службы на этой записи :

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 ... указывает на команду, которая не существует на моем сервере.

Вопрос: Какие шаги я должен предпринять, чтобы иметь возможность применять новую конфигурацию из postgres.conf и pg_hba.conf файлы в службу postgres?

Наконец, вот статус службы postgres и статуса службы кластера:

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 в 01:31

3 ответа

После некоторого исследования я нашел решение для обеспечения сервера базы данных 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, в список. Измените _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 с пользовательскими значениями подключения. В задачах / databases.yml после создания базы данных добавьте любые расширения в вашу базу данных.

После выполнения плейлиста Ansible, который содержит два вышеуказанных шага, сервер PostgreSQL запущен и работает, позволяя локальному пользователю postgres подключиться к вашей базе данных. Вы можете внести изменения конфигурации, например, в файл /etc/postgresql/9.6/main/postgres.conf, и использовать команду systemctl для перезапуска службы postgresql для применения изменений.

[ f11]. Сильная роль позволяет настраивать каталог данных PostgreSQL, но я еще не пробовал это. Вместо этого я успешно сменил каталог данных после описанного выше процесса, выполнив шаги в https://www.tutorialspoint.com/articles/how-to-change-postgresql-data-folder-location-on-ubuntu- 16-04.

Надеюсь, это полезно для тех, кто подходит к скорости на PostgreSQL на Ubuntu 16.04.

0
ответ дан 22 May 2018 в 15:34

После некоторого исследования я нашел решение для обеспечения сервера базы данных 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, в список. Измените _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 с пользовательскими значениями подключения. В задачах / databases.yml после создания базы данных добавьте любые расширения в вашу базу данных.

После выполнения плейлиста Ansible, который содержит два вышеуказанных шага, сервер PostgreSQL запущен и работает, позволяя локальному пользователю postgres подключиться к вашей базе данных. Вы можете внести изменения конфигурации, например, в файл /etc/postgresql/9.6/main/postgres.conf, и использовать команду systemctl для перезапуска службы postgresql для применения изменений.

geerlingguy.postgresql. Сильная роль позволяет настраивать каталог данных PostgreSQL, но я еще не пробовал это. Вместо этого я успешно сменил каталог данных после описанного выше процесса, выполнив шаги в https://www.tutorialspoint.com/articles/how-to-change-postgresql-data-folder-location-on-ubuntu- 16-04.

Надеюсь, это полезно для тех, кто подходит к скорости на PostgreSQL на Ubuntu 16.04.

0
ответ дан 18 July 2018 в 01:38

После некоторого исследования я нашел решение для обеспечения сервера базы данных 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, в список. Измените _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 с пользовательскими значениями подключения. В задачах / databases.yml после создания базы данных добавьте любые расширения в вашу базу данных.

После выполнения плейлиста Ansible, который содержит два вышеуказанных шага, сервер PostgreSQL запущен и работает, позволяя локальному пользователю postgres подключиться к вашей базе данных. Вы можете внести изменения конфигурации, например, в файл /etc/postgresql/9.6/main/postgres.conf, и использовать команду systemctl для перезапуска службы postgresql для применения изменений.

geerlingguy.postgresql. Сильная роль позволяет настраивать каталог данных PostgreSQL, но я еще не пробовал это. Вместо этого я успешно сменил каталог данных после описанного выше процесса, выполнив шаги в https://www.tutorialspoint.com/articles/how-to-change-postgresql-data-folder-location-on-ubuntu- 16-04.

Надеюсь, это полезно для тех, кто подходит к скорости на PostgreSQL на Ubuntu 16.04.

0
ответ дан 24 July 2018 в 17:25

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

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