Перейти к основному содержимому

Настройка

Настройка Pangolin DCS осуществляется параметрами в конфигурационном файле postgres.yml в секции pangolin_dcs.

Описание параметров конфигурационного файла

Обязательные параметры

Параметр

Описание

self_addr

Адрес текущего узла в формате ip:port

partner_addrs

Список адресов остальных узлов в формате ip1:port1, ip2:port2

data_dir

Путь к директории для хранения журнала операций и текущих значений ключей

Необязательные параметры

Параметр

Описание

Значение по умолчанию

journal_max_size

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

10 Мбайт

journal_wait_timeout

Время тайм-аута (в секундах), по истечении которого операция записи/чтения журнала считается неуспешной

Равен параметру loop_wait или 10 секунд

memory_journal_size

Число максимально содержащихся в памяти последних записей журнала

10000

journal_force_read_wait

Выполнение перечитывания журнала операций при перезапуске службы pangolin-manager при значении true

true

dump_dir

Путь к директории для хранения дампа

Берется из параметра data_dir

dump_interval

Интервал создания дампа, в секундах

300

dump_wait_timeout

Время тайм-аута (в секундах), по истечении которого операция записи/чтения дампа считается неуспешной

Равен параметру loop_wait или 10 секунд

logfile

Путь к файлу с логом от pangolin_dcs

<data_dir>/raft.log

log_max_size

Максимальный размер в байтах для файла с логом pangolin_dcs, минимальное значение 8192 байт

20 Мбайт

log_rotation_period

Интервал ротации файла с логом pangolin_dcs, формат <число><{одно из: s, m, h, d}>, соответственно: секунда, месяц, час, день

log_rotation_period=1d (раз в сутки)

heartbeat_interval

Частота, с которой мастер DCS-кластера сообщает остальным узлам о своей доступности (в миллисекундах)

100 миллисекунд

election_timeout

Таймаут ожидания heartbeat от мастера перед инициацией узлом нового голосования (в миллисекундах)

400 миллисекунд

certfile

Серверный сертификат Pangolin DCS для установления SSL-подключений

Отсутствует

keyfile

Закрытый ключ Pangolin DCS, соответствующий серверному сертификату

Отсутствует

keyfile_password

Пароль для рассекречивания закрытого ключа (если защищен паролем)

Отсутствует

cafile

Корневой сертификат УЦ (CA)

Отсутствует

capath

Путь к директории, содержащей файлы с доверенными сертификатами УЦ (CA)

Отсутствует

crlfile

Путь к файлу со списком отозванных сертификатов (CRL)

Отсутствует

crlpath

Путь к директории, содержащей файлы со списком отозванных сертификатов (CRL)

Отсутствует

pkcs12_config_path

Путь к файлу в формате JSON, который содержит данные для запроса сертификата из SecMan или парольную фразу для доступа к контейнеру PKCS#12 и путь к контейнеру

Отсутствует

verify_client

Определяет, требуется ли запрашивать и проверять клиентский сертификат DCS

Возможные значения:

  • none — клиентский сертификат не запрашивается, проверка сертификата не выполняется.
  • optional — клиентский сертификат запрашивается и, если клиент отправляет сертификат, подвергается проверке.
  • required — клиентский сертификат запрашивается и, если клиент не отправляет сертификат, установка SSL-соединения завершается с ошибкой

verify_server

Определяет, требуется ли запрашивать и проверять серверный сертификат DCS

false

no_tls1_3

На серверах с установленным OpenSSL 1.1.0 и выше позволяет переключиться с протокола TLSv1.3 на TLSv1.2

false

Примеры конфигурационных файлов

Ниже приведен пример конфигурационного файла для компонента Pangolin Manager, где <server_ip_1>, <server_ip_2>, <server_ip_3> образуют DCS-кластер.

pangolin_dcs:
self_addr: <server_ip_1>:2481
partner_addrs: <server_ip_2>:2481,<server_ip_3>:2481

data_dir: /pgdata/07/raft_data
journal_max_size: 10485760
journal_wait_timeout: 10
memory_journal_size: 10000
journal_force_read_wait: true

dump_dir: /pgdata/07/raft_dump
dump_interval: 300
dump_wait_timeout: 10

logfile: /pangolinlogs/pangolin-manager/raft/raft.log
log_max_size: 20971520
log_rotation_period: 1d

heartbeat_interval: 1000
election_timeout: 5000

certfile: '/pg_ssl/patroni_server.crt'
keyfile: '/pg_ssl/patroni_server.key'
cafile: '/pg_ssl/root.crt'
capath: '/pg_ssl'
crlfile: /pg_ssl/crl/intermediate.crl
crlpath: /pg_ssl/crl
pkcs12_config_path: /pg_ssl/intermediate/patroni_server.p12.cfg
verify_client: optional
verify_server: true
no_tls1_3: false

Пример конфигурации для защиты REST интерфейса

Ниже приведен пример конфигурации для защиты REST API от неавторизированного доступа.

pangolin_dcs:
# параметры для rest api pangolin_dcs
restapi:
listen: 0.0.0.0:8009
connect_address: <server_ip_1>:8009
allowlist: []
allowlist_include_members: true
ciphers: DEFAULT:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1
verify_client: optional

cafile: /pg_ssl/root.crt
capath: /pg_ssl/root_dir
certfile: /pg_ssl/patroni_server.crt
keyfile: /pg_ssl/patroni_server.key
crlpath: /pg_ssl/crl
crlfile: /pg_ssl/crl/intermediate.crl
# параметры для аутентификации на Pangolin DCS через pangolin-manager-ctl
authentication:
username: pangolindcs
password: $enc$....

# параметры для команд к Pangolin DCS через pangolin-manager-ctl и pangolin-dcs-ctl
ctl:
retry_timeout: 10 # тайм-аут на выполнение запроса к Pangolin DCS

Пример настройки авторизации внутри DCS при включенном SSL и pem-сертификатах

При активированной авторизации все запросы на изменение, либо просмотр ключей будут доступны только пользователю, который имеет необходимые права. Ниже приведен пример создания суперпользователя, пользователя, роли и включения авторизации:

  1. Добавьте пользователя root:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/users/root -d '{"password":"<password_root>"}'
  2. Добавьте «обычного» пользователя:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/users/test_user -d '{"password":"<password>"}'
  3. Добавьте роль с правами на чтение и запись:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/roles/test_role -d '{"permissions": {"kv": {"read": ["/service/clustername/*"], "write": ["/service/clustername/*"]}}}'
  4. Назначьте роль «обычному» пользователю:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/users/test_user  -d '{"grant":["test_role"]}'
  5. Проверьте статус авторизации для пользователя root:

    curl -iS -XGET --cert /pg_ssl/client.crt --key /pg_ssl/client.key -u root:<password_root> https://<server_name>:<port>/v2/auth/enable
  6. Активируйте авторизацию:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/enable

Настройка параметров доступа к каталогам

Для функционирования Pangolin Manager в режиме DCS на узле арбитра необходима установка файла лицензии /opt/pangolin-license.

Утилиты безопасности (setup_kms_credentials, pg_auth_password, pangolin-certs-rotate) из пакета Pangolin Manager и утилиты pangolin-auth-reencrypt также могут потребовать создания пользователя безопасности kmadmin_pg и настройки каталогов с утилитами.

Ниже приведены каталоги с настроенными правами доступа:

/etc/postgres - drwxrwx--x   2 postgres   kmadmin_pg
/opt/pangolin-common - drwx--x--- 3 postgres kmadmin_pg
/opt/pangolin-license - drwxr-x--- 2 postgres kmadmin_pg
/opt/pangolin-manager-3.1.1 - drwx---r-x------ 5 postgres postgres
/opt/pangolin-manager-3.1.1/bin - drwx-----x 3 postgres postgres
/opt/pangolin-manager-3.1.1/lib - drwx---r-x 4 postgres postgres
/opt/pangolin-manager-3.1.1/lib/plugins - drwx---r-x 2 postgres postgres

Пример настройки службы

На узле Арбитра находится служба pangolin-manager, работающая в упрощенном режиме и принимающая только запросы, связанные с DCS-модулем. Пример конфигурационного файла postgres.yml без секции postgresql и других значений в секции tags:

scope: clustername
name: srv-0-141

restapi:
# обычное заполнение секции

pangolin_dcs:
self_addr: srv-0-141:2480
partner_addrs: ['srv-0-134:2480', 'srv-0-137:2480']
data_dir: /home/postgres/raft_data_dir
heartbeat_interval: 1000
election_timeout: 5000

bootstrap:
dcs:
# обычное заполнение секции

tags:
nofailover: true # так как здесь нет pangolin, на этот узел нельзя совершить failover
nosync: true # так как этот узел не может стать репликой

Пример файла конфигурации службы pangolin-manager.service:

[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target

[Service]
Type=simple
User=postgres
Group=postgres

# Read in configuration file if it exists, otherwise proceed

Environment="PG_LICENSE_PATH=/opt/pangolin-license"
Environment="PG_LD_LIBRARY_PATH=/opt/pangolin-dbms/lib"
Environment="PG_PLUGINS_PATH=/opt/pangolin-dbms/lib"
Environment="PATRONI_PLUGINS_PATH=/opt/pangolin-manager/lib/postgresql_se_libs"
Environment="LD_LIBRARY_PATH=/opt/pangolin-manager/lib/postgresql_se_libs"
Environment="PYTHONPATH=/opt/pangolin-manager/lib/python3/site-packages:/opt/pangolin-manager/lib64/python3/site-packages:/opt/pangolin-manager/lib/python3.6/site-packages:/opt/pangolin-manager/lib64/python3.6/site-packages"
LimitNOFILE=65536

# Pre-commands to start watchdog device
# Uncomment if watchdog is part of your patroni setup
PermissionsStartOnly=true
ExecReload=/bin/kill -HUP $MAINPID

WorkingDirectory=/opt/pangolin-manager
ExecStart=/opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
Restart=on-failure
KillMode=process

# Disable restart limits
StartLimitInterval=0

[Install]