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