Конфигурационный шаблон jinja2 для Patroni
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
name: {{ node_name }} scope: {{ cluster_name }} restapi: listen: 0.0.0.0:8008 connect_address: {{ ansible_host }}:8008 etcd3: hosts: {% for host in groups['etcd_nodes'] %}{{ hostvars[host].ansible_host }}:2379{% if not loop.last %},{% endif %}{% endfor %} version: v3 protocol: https cacert: /etc/etcd/ssl/ca.crt # путь к корневому сертификату CA cert: /etc/etcd/ssl/server.crt # путь к клиентскому сертификату Patroni key: /etc/etcd/ssl/server.key # путь к приватному ключу Patroni username: "{{ etcd_username }}" password: "{{ etcd_password }}" bootstrap: dcs: ttl: 100 loop_wait: 10 retry_timeout: 10 maximum_lag_on_failover: 1048576 postgresql: use_pg_rewind: true use_slots: true parameters: wal_level: replica hot_standby: "on" wal_keep_segments: 5120 max_wal_senders: 5 max_replication_slots: 5 checkpoint_timeout: 30 initdb: - auth-host: md5 - auth-local: peer - encoding: UTF8 - data-checksums pg_hba: - host replication postgres ::1/128 md5 - host replication postgres 127.0.0.1/8 md5 {% for host in groups['etcd_nodes'] %} - host replication replicator {{ hostvars[host].ansible_host }}/24 md5 {% endfor %} - host all all 0.0.0.0/0 md5 - host replication all 127.0.0.1/32 md5 - host replication all ::1/128 md5 users: admin: password: '{{ postgresql_superuser_password }}' options: - superuser postgresql: listen: 0.0.0.0:5432 connect_address: {{ ansible_host }}:5432 #conf_dir: /etc/postgresql/11.9/main bin_dir: /usr/lib/postgresql/{{ postgresql_version }}/bin data_dir: "{{ postgresql_data_dir }}" pgpass: /tmp/pgpass authentication: superuser: username: postgres password: '{{ postgresql_superuser_password }}' replication: username: replicator password: '{{ replication_password }}' parameters: unix_socket_directories: '/tmp/pgsql/' tags: nofailover: false noloadbalance: false clonefrom: false nosync: false |
1. Основные параметры
- name: {{ node_name }}
- Задает имя узла, на котором будет работать Patroni. Значение подставляется из переменной
node_name
.
- Задает имя узла, на котором будет работать Patroni. Значение подставляется из переменной
- scope: {{ cluster_name }}
- Указывает область кластера (имя кластера), которое также генерируется на основе переменной
cluster_name
. Все узлы в кластере должны иметь одно и то же значениеscope
, чтобы Patroni понимал, что они принадлежат одному и тому же кластеру.
- Указывает область кластера (имя кластера), которое также генерируется на основе переменной
2. REST API
- restapi:
- listen: 0.0.0.0:8008 — указывает адрес и порт, на которых REST API Patroni будет прослушивать запросы. Здесь используется
0.0.0.0
, что позволяет принимать запросы со всех интерфейсов. - connect_address: {{ ansible_host }}:8008 — указывает IP-адрес и порт, по которым другие узлы могут обращаться к этому узлу через API Patroni.
ansible_host
— переменная Ansible, представляющая IP-адрес этого узла. - protocol, cacert, cert, key (закомментированные строки) — используются для настройки HTTPS и сертификатов, если нужно включить защищённый доступ к Patroni через API. Эти параметры позволяют установить клиентские сертификаты и ключи для зашифрованного взаимодействия.
- listen: 0.0.0.0:8008 — указывает адрес и порт, на которых REST API Patroni будет прослушивать запросы. Здесь используется
3. etcd
- etcd3:
- hosts: {% for host in groups[‘etcd_nodes’] %}…{% endfor %} — динамически генерирует список адресов и портов etcd-узлов, к которым Patroni будет подключаться для хранения информации о состоянии кластера. Используется цикл для сбора всех узлов из группы
etcd_nodes
. - protocol: https, cacert, cert, key — настройки для взаимодействия с etcd через зашифрованное соединение (HTTPS). Параметры указывают на пути к сертификатам и ключам для обеспечения безопасности.
- username, password — учётные данные для аутентификации в etcd, параметры задаются через переменные
etcd_username
иetcd_password
.
- hosts: {% for host in groups[‘etcd_nodes’] %}…{% endfor %} — динамически генерирует список адресов и портов etcd-узлов, к которым Patroni будет подключаться для хранения информации о состоянии кластера. Используется цикл для сбора всех узлов из группы
4. Bootstrap (Инициализация кластера)
- bootstrap.dcs:
- Параметры настройки кластерного распределённого консенсуса через etcd (или другой DCS).
- ttl: 100, loop_wait: 10, retry_timeout: 10 — определяют тайминги мониторинга кластера (время жизни сессии, время ожидания цикла и таймауты на повторные попытки).
- maximum_lag_on_failover: 1048576 — максимальный допустимый лаг для реплики, чтобы она могла стать новым мастером при отказе текущего.
- postgresql:
- use_pg_rewind: true — позволяет использовать
pg_rewind
для быстрой синхронизации реплики с мастером после failover. - parameters — задаёт важные параметры конфигурации PostgreSQL, такие как уровень журналирования (wal_level), включение горячей реплики (hot_standby), и другие параметры репликации.
- use_pg_rewind: true — позволяет использовать
- initdb — параметры для инициализации базы данных при первом запуске:
- auth-host: md5, auth-local: peer — задают типы аутентификации для хостов и локальных подключений.
- encoding: UTF8, data-checksums — задают кодировку базы данных и включают контрольные суммы данных.
- pg_hba — динамически генерирует правила доступа для PostgreSQL:
- host replication postgres ::1/128 md5 — доступ для репликации по IPv6.
- {% for host in groups[‘etcd_nodes’] %}…{% endfor %} — задаются динамические правила для каждого узла etcd для репликации через указанный IP-адрес.
- host all all 0.0.0.0/0 md5 — разрешает подключения ко всем пользователям с любых IP-адресов.
5. PostgreSQL
- postgresql:
- listen: 0.0.0.0:5432 — PostgreSQL будет прослушивать все IP-адреса на порту 5432.
- connect_address: {{ ansible_host }}:5432 — IP-адрес и порт для подключения к этому узлу в кластере.
- bin_dir — путь к исполняемым файлам PostgreSQL, зависит от версии (например,
11
,12
). - data_dir — путь к каталогу данных PostgreSQL, задаётся переменной
postgresql_data_dir
. - pgpass — путь к файлу паролей для автоматической аутентификации в PostgreSQL.
- authentication — параметры для подключения суперпользователя и репликатора:
- superuser — логин и пароль суперпользователя PostgreSQL, задаётся через переменные.
- replication — логин и пароль пользователя, ответственного за репликацию.
- parameters — дополнительные параметры конфигурации PostgreSQL, например, путь для сокетов.
6. Теги (Tags)
- nofailover, noloadbalance, clonefrom, nosync — параметры для управления поведением узлов:
- nofailover: false — узел может участвовать в failover.
- noloadbalance: false — узел участвует в балансировке нагрузки.
- clonefrom: false — узел не используется в качестве источника для клонирования.
- nosync: false — узел синхронизируется с кластером.
Заключение:
Шаблон описывает конфигурацию для узла Patroni, который управляет PostgreSQL-кластером.
- Jinja2 шаблон позволяет динамически генерировать конфигурации для каждого узла на основе переменных Ansible, таких как IP-адреса, имена узлов и группы узлов.
- Patroni обеспечивает высокую доступность за счёт координации с etcd, а также автоматического failover и управления кластером PostgreSQL.
- В конфигурации предусмотрены параметры для работы с пулом соединений, настройками репликации и безопасным взаимодействием с etcd через HTTPS.
Recommended Posts
Шаблон jinja2 для конфига redis sentinel
18.02.2024
Шаблон jinja2 для конфига Redis
17.02.2024