Для корректной работы системы требуется PostgreSQL версии 11–15. В статье описана установка PostgreSQL 13 для ОС Ubuntu Linux 20.04 и 22.04. Также вы можете ознакомиться с руководством в официальной документации PostgreSQL.
Установка состоит из 10 этапов:
- Подготовка нод (серверов)
- Подготовка кластера etcd
- Установка PostgreSQL
- Настройка PostgreSQL
- Установка Patroni
- Настройка Patroni
- Подготовка кластера PostgreSQL+Patroni
- Подготовка PGBouncer (опционально)
Создайте три ноды (сервера) с последовательно пронумерованными именами хостов.
Минимальное количество серверов для организации кластера — три.
В этом примере используется три узла со следующими hostname и IP-адресами:
- postgres-server1.your_domain, 192.168.1.1
- postgres-server2.your_domain, 192.168.1.2
- postgres-server3.your_domain, 192.168.1.3
Создайте необходимые сопоставления имен хостов в DNS. Если такой возможности нет, внесите нужные записи в /etc/hosts.
-
Установите
etcdна все узлы:sudo apt-get install etcd -y -
Остановите
etcdна всех узлах:sudo systemctl stop etcd -
Удалите каталог данных:
sudo rm -rf /var/lib/etcd/* -
Переместите конфигурационный файл по умолчанию:
sudo mv /etc/default/etcd{,.original} -
Создайте и откройте для редактирования новый конфигурационный файл:
sudo nano /etc/default/etcd -
Добавьте пример конфигураций в файл для узла
postgres-server1.your_domain:ETCD_NAME="postgres-server1"ETCD_DATA_DIR="/var/lib/etcd/default"ETCD_HEARTBEAT_INTERVAL="1000"ETCD_ELECTION_TIMEOUT="5000"ETCD_LISTEN_PEER_URLS="http://192.168.1.1:2380"ETCD_LISTEN_CLIENT_URLS="http://192.168.1.1:2379,http://localhost:2379"ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.1:2380"ETCD_INITIAL_CLUSTER="postgres-server1=http://192.168.1.1:2380,postgres-server2=http://192.168.1.2:2380,postgres-server3=http://192.168.1.3:2380"ETCD_INITIAL_CLUSTER_STATE="new"ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.1:2379"ETCD_ENABLE_V2="true"ETCD_INITIAL_ELECTION_TICK_ADVANCE="false"Пример конфигураций с включением TLS/SSL для узла
postgres-server1.your_domainETCD_NAME="postgres-server1"ETCD_DATA_DIR="/var/lib/etcd/default"ETCD_HEARTBEAT_INTERVAL="1000"ETCD_ELECTION_TIMEOUT="5000"ETCD_LISTEN_PEER_URLS="https://192.168.1.1:2380"ETCD_LISTEN_CLIENT_URLS="https://192.168.1.1:2379,https://localhost:2379"ETCD_INITIAL_ADVERTISE_PEER_URLS="https://postgres-server1.your_domain:2380"ETCD_INITIAL_CLUSTER="postgres-server1=https://postgres-server1.your_domain:2380,postgres-server2=https://postgres-server2.your_domain:2380,postgres-server3=https://postgres-server3.your_domain:2380"ETCD_INITIAL_CLUSTER_STATE="new"ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"ETCD_ADVERTISE_CLIENT_URLS="https://postgres-server1.your_domain:2379"ETCD_ENABLE_V2="true"ETCD_CERT_FILE="/path/to/public.crt"ETCD_KEY_FILE="/path/to/private.key"ETCD_CLIENT_CERT_AUTH="true"ETCD_TRUSTED_CA_FILE="/path/to/certCA.pem"ETCD_PEER_CERT_FILE="/path/to/public.crt"ETCD_PEER_KEY_FILE="/path/to/private.key"ETCD_PEER_CLIENT_CERT_AUTH="true"ETCD_PEER_TRUSTED_CA_FILE="/path/to/certCA.pem"ETCD_INITIAL_ELECTION_TICK_ADVANCE="false" -
Добавьте пример конфигураций в файл для узла
postgres-server2.your_domain:ETCD_NAME="postgres-server2"ETCD_DATA_DIR="/var/lib/etcd/default"ETCD_HEARTBEAT_INTERVAL="1000"ETCD_ELECTION_TIMEOUT="5000"ETCD_LISTEN_PEER_URLS="http://192.168.1.2:2380"ETCD_LISTEN_CLIENT_URLS="http://192.168.1.2:2379,http://127.0.0.1:2379"ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.2:2380"ETCD_INITIAL_CLUSTER="postgres-server1=http://192.168.1.1:2380,postgres-server2=http://192.168.1.2:2380,postgres-server3=http://192.168.1.3:2380"ETCD_INITIAL_CLUSTER_STATE="new"ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.2:2379"ETCD_ENABLE_V2="true"ETCD_INITIAL_ELECTION_TICK_ADVANCE="false"Пример конфигураций с включением TLS/SSL для узла
postgres-server2.your_domain:ETCD_NAME="postgres-server2"ETCD_DATA_DIR="/var/lib/etcd/default"ETCD_HEARTBEAT_INTERVAL="1000"ETCD_ELECTION_TIMEOUT="5000"ETCD_LISTEN_PEER_URLS="https://192.168.1.2:2380"ETCD_LISTEN_CLIENT_URLS="https://192.168.1.2:2379,https://localhost:2379"ETCD_INITIAL_ADVERTISE_PEER_URLS="https://postgres-server2.your_domain:2380"ETCD_INITIAL_CLUSTER="postgres-server1=https://postgres-server1.your_domain:2380,postgres-server2=https://postgres-server2.your_domain:2380,postgres-server3=https://postgres-server3.your_domain:2380"ETCD_INITIAL_CLUSTER_STATE="new"ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"ETCD_ADVERTISE_CLIENT_URLS="https://postgres-server2.your_domain:2379"ETCD_ENABLE_V2="true"ETCD_CERT_FILE="/path/to/public.crt"ETCD_KEY_FILE="/path/to/private.key"ETCD_CLIENT_CERT_AUTH="true"ETCD_TRUSTED_CA_FILE="/path/to/certCA.pem"ETCD_PEER_CERT_FILE="/path/to/public.crt"ETCD_PEER_KEY_FILE="/path/to/private.key"ETCD_PEER_CLIENT_CERT_AUTH="true"ETCD_PEER_TRUSTED_CA_FILE="/path/to/certCA.pem"ETCD_INITIAL_ELECTION_TICK_ADVANCE="false" -
Добавьте пример конфигураций в файл для узла
postgres-server3.your_domain:ETCD_NAME="postgres-server3"ETCD_DATA_DIR="/var/lib/etcd/default"ETCD_HEARTBEAT_INTERVAL="1000"ETCD_ELECTION_TIMEOUT="5000"ETCD_LISTEN_PEER_URLS="http://192.168.1.3:2380"ETCD_LISTEN_CLIENT_URLS="http://192.168.1.3:2379,http://localhost:2379"ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.3:2380"ETCD_INITIAL_CLUSTER="postgres-server1=http://192.168.1.1:2380,postgres-server2=http://192.168.1.2:2380,postgres-server3=http://192.168.1.3:2380"ETCD_INITIAL_CLUSTER_STATE="new"ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.3:2379"ETCD_ENABLE_V2="true"ETCD_INITIAL_ELECTION_TICK_ADVANCE="false"Пример конфигураций с включением TLS/SSL для узла
postgres-server3.your_domainETCD_NAME="postgres-server3"ETCD_DATA_DIR="/var/lib/etcd/default"ETCD_HEARTBEAT_INTERVAL="1000"ETCD_ELECTION_TIMEOUT="5000"ETCD_LISTEN_PEER_URLS="https://192.168.1.3:2380"ETCD_LISTEN_CLIENT_URLS="https://192.168.1.3:2379,https://localhost:2379"ETCD_INITIAL_ADVERTISE_PEER_URLS="https://postgres-server3.your_domain:2380"ETCD_INITIAL_CLUSTER="postgres-server1=https://postgres-server1.your_domain:2380,postgres-server2=https://postgres-server2.your_domain:2380,postgres-server3=https://postgres-server3.your_domain:2380"ETCD_INITIAL_CLUSTER_STATE="new"ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"ETCD_ADVERTISE_CLIENT_URLS="https://postgres-server3.your_domain:2379"ETCD_ENABLE_V2="true"ETCD_CERT_FILE="/path/to/public.crt"ETCD_KEY_FILE="/path/to/private.key"ETCD_CLIENT_CERT_AUTH="true"ETCD_TRUSTED_CA_FILE="/path/to/certCA.pem"ETCD_PEER_CERT_FILE="/path/to/public.crt"ETCD_PEER_KEY_FILE="/path/to/private.key"ETCD_PEER_CLIENT_CERT_AUTH="true"ETCD_PEER_TRUSTED_CA_FILE="/path/to/certCA.pem"ETCD_INITIAL_ELECTION_TICK_ADVANCE="false"Рассмотрим введенные параметры:
- ETCD_NAME — имя этого узла кластера. Должно быть уникально в кластере;
- ETCD_LISTEN_CLIENT_URLS — точка подключения для клиентов кластера
- ETCD_ADVERTISE_CLIENT_URLS — список URL-адресов, по которым его могут найти остальные узлы кластера;
- ETCD_LISTEN_PEER_URLS — точка подключения для остальных узлов кластера
- ETCD_INITIAL_ADVERTISE_PEER_URLS — начальный список URL-адресов, по которым его могут найти остальные узлы кластера
- ETCD_INITIAL_CLUSTER_TOKEN — токен кластера, должен совпадать на всех узлах кластера;
- ETCD_INITIAL_CLUSTER — список узлов кластера на момент запуска;
- ETCD_INITIAL_CLUSTER_STATE — может принимать два значения: new и existing;
- ETCD_DATA_DIR — расположение каталога данных кластера;
- ETCD_ELECTION_TIMEOUT — время в миллисекундах, которое проходит между последним принятым оповещением от лидера кластера, до попытки захватить роль лидера на ведомом узле;
- ETCD_HEARTBEAT_INTERVAL — время в миллисекундах, между рассылками лидером оповещений о том, что он все еще лидер
- ETCD_CERT_FILE — путь до файла сертификата сервера;
- ETCD_KEY_FILE — путь до файла закрытого ключа;
- ETCD_TRUSTED_CA_FILE — путь до файла корневого CA;
- ETCD_CLIENT_CERT_AUTH — может принимать два значения: true и false;
- ETCD_PEER_CERT_FILE — путь до файла сертификата сервера;
- ETCD_PEER_TRUSTED_CA_FILE — путь до файла корневого CA;
- ETCD_PEER_CLIENT_CERT_AUTH — может принимать два значения: true и false.
-
Перезапустите
etcdна всех узлах:sudo systemctl restart etcd -
Проверьте состояние кластера
Для кластера без TLS:
sudo etcdctl cluster-healthДля кластера c TLS:
sudo etcdctl -C https://postgres-server1.your_domain:2379 --key-file /path/to/private.key --cert-file /path/to/public.crt --ca-file /path/to/certCA.pem cluster-health
-
Для установки PostgreSQL добавьте официальный репозиторий
postgresql:sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - -
Обновите кеш пакетов, выполнив команду:
sudo apt update -
Установите PostgreSQL на все узлы:
sudo apt install postgresql-13 -y
Для пароля разрешается применять следующие символы:
- заглавные латинские буквы: от A до Z
- строчные латинские буквы: от a до z
- цифры от 0 до 9
- символы: -_.
Зарезервированные (недопустимые) символы: ! * ' ( ) ; : @ & = + $ , / ? % # [ ]
-
Создайте новую роль
vkс паролемSecretPassword:sudo -u postgres psql -c \"CREATE ROLE vk WITH login password 'SecretPassword';" -
Создайте необходимые базы данных, например
vkdbс владельцемvk:sudo -u postgres psql -c \"CREATE DATABASE vkv;" -
Добавьте необходимые расширения для базы данных
vk:sudo -u postgres psql -d vkdb -c \"CREATE EXTENSION \"uuid-ossp\"; CREATE EXTENSION pg_trgm;" -
Создайте новую роль
replicatorс паролемReplicatorPasswordдля работы с репликами. Должно совпадать с настройкамиPatroniиз блокаpostgresql - authentication - replicationи списком разрешенных хостов postgresql в файлеpg_hba.conf:sudo -u postgres psql -c \"CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'ReplicatorPassword';" -
Установите пароль для пользователя postgres:
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'PostgresPassword';" -
Остановите PostgreSQL:
systemctl stop postgresql
-
Остановите PostgreSQL:
systemctl stop postgresql -
Удалите каталог данных на нодах
postgres-server2.your_domainиpostgres-server3.your_domain:rm -rf /var/lib/postgresql/13/main
-
Создайте файл настроек:
sudo nano /etc/patroni/config.yml -
В созданный файл
/etc/patroni/config.ymlнужно поместить пример начальной конфигурации, изменив ip-адреса на свои на каждом узле кластера. Обратите внимание на комментарии в данном файле.Пример начальной конфигурации:
scope: postgres-cluster # одинаковое значение на всех узлахname: postgresql-server1 # разное значение на всех узлахnamespace: /service/ # одинаковое значение на всех узлахrestapi:listen: postgres-server1.your_domain:8008 # адрес узла, на котором находится этот файлconnect_address: postgres-server1.your_domain:8008 # адрес узла, на котором находится этот файлetcd:hosts: postgres-server1.your_domain:2379,postgres-server2.your_domain:2379,postgres-server3.your_domain:2379 # список всех узлов, на которых установлен etcdbootstrap:method: initdbdcs:ttl: 30loop_wait: 10retry_timeout: 10maximum_lag_on_failover: 1048576master_start_timeout: 300synchronous_mode: falsesynchronous_mode_strict: falsesynchronous_node_count: 1postgresql:use_pg_rewind: trueuse_slots: trueparameters:max_connections: 2000superuser_reserved_connections: 5max_locks_per_transaction: 64max_prepared_transactions: 0huge_pages: tryshared_buffers: 512MBwork_mem: 128MBmaintenance_work_mem: 256MBeffective_cache_size: 4GBcheckpoint_timeout: 15mincheckpoint_completion_target: 0.9wal_compression: onmin_wal_size: 2GBmax_wal_size: 4GBwal_buffers: 32MBdefault_statistics_target: 1000seq_page_cost: 1random_page_cost: 4effective_io_concurrency: 2synchronous_commit: onautovacuum: onautovacuum_max_workers: 5autovacuum_vacuum_scale_factor: 0.01autovacuum_analyze_scale_factor: 0.02autovacuum_vacuum_cost_limit: 200autovacuum_vacuum_cost_delay: 20autovacuum_naptime: 1smax_files_per_process: 4096archive_mode: onarchive_timeout: 1800sarchive_command: cd .wal_level: replicawal_keep_segments: 130max_wal_senders: 10max_replication_slots: 10hot_standby: onhot_standby_feedback: Truewal_log_hints: onshared_preload_libraries: pg_stat_statements,auto_explainpg_stat_statements.max: 10000pg_stat_statements.track: allpg_stat_statements.save: offauto_explain.log_min_duration: 10sauto_explain.log_analyze: trueauto_explain.log_buffers: trueauto_explain.log_timing: falseauto_explain.log_triggers: trueauto_explain.log_verbose: trueauto_explain.log_nested_statements: truestandard_conforming_strings: truetrack_io_timing: onlog_lock_waits: onlog_temp_files: 3track_activities: ontrack_counts: ontrack_functions: alllog_checkpoints: onlogging_collector: onlog_truncate_on_rotation: onlog_rotation_age: 1dlog_rotation_size: 0log_line_prefix: '%t [%p-%l] %r %q%u@%d 'log_filename: 'postgresql-%a.log'log_directory: /var/log/postgresqlinitdb: # List options to be passed on to initdb- encoding: UTF8- locale: en_US.UTF-8- data-checksumspg_hba: # должен содержать адреса ВСЕХ машин, используемых в кластере- local all postgres peer- local all all peer- host all all 0.0.0.0/0 md5- host replication replicator localhost trust- host replication replicator 192.168.1.1/32 md5- host replication replicator 192.168.1.2/32 md5- host replication replicator 192.168.1.3/32 md5postgresql:listen: 192.168.1.1,127.0.0.1:5432 # адрес узла, на котором находится этот файлconnect_address: 192.168.1.1:5432 # адрес узла, на котором находится этот файлuse_unix_socket: truedata_dir: /var/lib/postgresql/13/main # каталог данныхbin_dir: /usr/lib/postgresql/13/binconfig_dir: /etc/postgresql/13/mainpgpass: /var/lib/postgresql/.pgpass_patroniauthentication:replication:username: replicatorpassword: ReplicatorPasswordsuperuser:username: postgrespassword: PostgresPasswordparameters:unix_socket_directories: /var/run/postgresqlpg_hba: # должен содержать адреса ВСЕХ машин, используемых в кластере- local all postgres peer- local all all peer- host all all 0.0.0.0/0 md5- host replication replicator localhost trust- host replication replicator 192.168.1.1/32 md5- host replication replicator 192.168.1.2/32 md5- host replication replicator 192.168.1.3/32 md5remove_data_directory_on_rewind_failure: falseremove_data_directory_on_diverged_timelines: falsecreate_replica_methods:- basebackupbasebackup:max-rate: '100M'checkpoint: 'fast'watchdog:mode: off # Allowed values: off, automatic, requireddevice: /dev/watchdogsafety_margin: 5tags:nofailover: falsenoloadbalance: falseclonefrom: falsenosync: falseПример начальной конфигурации для включения поддержки TLS/SSL в Patroni.
scope: postgres-cluster # одинаковое значение на всех узлахname: postgresql-server1 # разное значение на всех узлахnamespace: /service/ # одинаковое значение на всех узлахrestapi:listen: postgres-server1.your_domain:8008 # адрес узла, на котором находится этот файлconnect_address: postgres-server1.your_domain:8008 # адрес узла, на котором находится этот файлcafile: /path/to/pgCA.pemcertfile: /path/to/pg.crt # путь до файла сертификата сервераkeyfile: /path/to/pg.key # путь до файла закрытого ключаverify_client: required # путь до файла корневого CAetcd:protocol: httpscert: /path/to/public.crt # путь до файла сертификата сервераkey: /path/to/private.key # путь до файла закрытого ключаcacert: /path/to/certCA.pem # путь до файла корневого CAhosts: postgres-server1.your_domain:2379,postgres-server2.your_domain:2379,postgres-server3.your_domain:2379 # список всех узлов, на которых установлен etcdctl:insecure: false # Allow connections to SSL sites without certscertfile: /path/to/pg.crt # путь до файла сертификата сервераkeyfile: /path/to/pg.key # путь до файла закрытого ключаcacert: /path/to/pgCA.pem # путь до файла корневого CAbootstrap:method: initdbdcs:ttl: 30loop_wait: 10retry_timeout: 10maximum_lag_on_failover: 1048576master_start_timeout: 300synchronous_mode: falsesynchronous_mode_strict: falsesynchronous_node_count: 1postgresql:use_pg_rewind: trueuse_slots: trueparameters:max_connections: 2000superuser_reserved_connections: 5max_locks_per_transaction: 64max_prepared_transactions: 0huge_pages: tryshared_buffers: 512MBwork_mem: 128MBmaintenance_work_mem: 256MBeffective_cache_size: 4GBcheckpoint_timeout: 15mincheckpoint_completion_target: 0.9wal_compression: onmin_wal_size: 2GBmax_wal_size: 4GBwal_buffers: 32MBdefault_statistics_target: 1000seq_page_cost: 1random_page_cost: 4effective_io_concurrency: 2synchronous_commit: onautovacuum: onautovacuum_max_workers: 5autovacuum_vacuum_scale_factor: 0.01autovacuum_analyze_scale_factor: 0.02autovacuum_vacuum_cost_limit: 200autovacuum_vacuum_cost_delay: 20autovacuum_naptime: 1smax_files_per_process: 4096archive_mode: onarchive_timeout: 1800sarchive_command: cd .wal_level: replicawal_keep_segments: 130max_wal_senders: 10max_replication_slots: 10hot_standby: onhot_standby_feedback: Truewal_log_hints: onshared_preload_libraries: pg_stat_statements,auto_explainpg_stat_statements.max: 10000pg_stat_statements.track: allpg_stat_statements.save: offauto_explain.log_min_duration: 10sauto_explain.log_analyze: trueauto_explain.log_buffers: trueauto_explain.log_timing: falseauto_explain.log_triggers: trueauto_explain.log_verbose: trueauto_explain.log_nested_statements: truestandard_conforming_strings: truetrack_io_timing: onlog_lock_waits: onlog_temp_files: 3track_activities: ontrack_counts: ontrack_functions: alllog_checkpoints: onlogging_collector: onlog_truncate_on_rotation: onlog_rotation_age: 1dlog_rotation_size: 0log_line_prefix: '%t [%p-%l] %r %q%u@%d 'log_filename: 'postgresql-%a.log'log_directory: /var/log/postgresqlssl: onssl_ca_file: '/path/to/pgCA.pem'ssl_cert_file: '/path/to/pg.crt'ssl_key_file: '/path/to/pg.key'initdb: # List options to be passed on to initdb- encoding: UTF8- locale: en_US.UTF-8- data-checksumspg_hba: # должен содержать адреса ВСЕХ машин, используемых в кластере- local all postgres peer- local all all peer- hostssl all all 0.0.0.0/0 md5- hostssl replication replicator localhost trust- hostssl replication replicator 192.168.1.1/32 md5- hostssl replication replicator 192.168.1.2/32 md5- hostssl replication replicator 192.168.1.3/32 md5postgresql:listen: 192.168.1.1,127.0.0.1:5432 # адрес узла, на котором находится этот файлconnect_address: 192.168.1.1:5432 # адрес узла, на котором находится этот файлuse_unix_socket: truedata_dir: /var/lib/postgresql/13/main # каталог данныхbin_dir: /usr/lib/postgresql/13/binconfig_dir: /etc/postgresql/13/mainpgpass: /var/lib/postgresql/.pgpass_patroniauthentication:replication:username: replicatorpassword: ReplicatorPasswordsslcert: /path/to/pg.crt # путь до файла сертификата сервераsslkey: /path/to/pg.key # путь до файла закрытого ключаsslrootcert: /path/to/pgCA.pem # путь до файла корневого CAsuperuser:username: postgrespassword: PostgresPasswordsslcert: /path/to/pg.crt # путь до файла сертификата сервераsslkey: /path/to/pg.key # путь до файла закрытого ключаsslrootcert: /path/to/pgCA.pem # путь до файла корневого CAparameters:unix_socket_directories: /var/run/postgresqlpg_hba: # должен содержать адреса ВСЕХ машин, используемых в кластере- local all postgres peer- local all all peer- hostssl all all 0.0.0.0/0 md5- hostssl replication replicator localhost trust- hostssl replication replicator 192.168.1.1/32 md5- hostssl replication replicator 192.168.1.2/32 md5- hostssl replication replicator 192.168.1.3/32 md5remove_data_directory_on_rewind_failure: falseremove_data_directory_on_diverged_timelines: falsecreate_replica_methods:- basebackupbasebackup:max-rate: '100M'checkpoint: 'fast'watchdog:mode: off # Allowed values: off, automatic, requireddevice: /dev/watchdogsafety_margin: 5tags:nofailover: falsenoloadbalance: falseclonefrom: falsenosync: falseСделайте пользователя postgres владельцем файла закрытого ключа
pg.key:Файл закрытого ключа
pg.keyуказанный в секцииpostgresqlдолжен иметь разрешения u=rw (0600) или меньше, если он принадлежит пользователю базы данных postgres, или разрешения u=rw, g=r (0640) или меньше, если он принадлежит пользователю root.sudo chown postgres:postgres -R /path/to/pg.keysudo chmod 600 /path/to/pg.keyПодробнее о настройке TLS/SSL в Patroni читайте в официальной документации Patroni.
-
Сделайте пользователя postgres владельцем каталога настроек:
sudo chown postgres:postgres -R /etc/patronisudo chmod 700 /etc/patroni
-
Запустите службу Patroni на узле
postgres-server1.your_domain, а затем на узлахpostgres-server2.your_domainиpostgres-server3.your_domain:sudo systemctl enable --now patroni.service -
Проверьте состояние кластера:
patronictl -c /etc/patroni/config.yml list
Следуйте инструкции по подготовке PGBouncer
Технический писатель: Белова Ирина