postgresql_replication
enix.postgresql_replication
Роль для развертывания и настройки кластера репликации PostgreSQL на Unix-хостах с использованием Ansible.
Требования
Поддерживаемые целевые системы:
- Debian 8 "Jessie"
- Debian 9 "Stretch"
Переменные роли
Эта роль уже содержит почти все необходимые настройки по умолчанию. Вы можете переопределить каждую из них в переменных хостов/групп, в вашем инвентаре или в вашем плейбуке. Для помощи в настройке смотрите аннотированные значения по умолчанию в defaults/main.yml
. Все предоставленные переменные начинаются с postgresql_replication__
.
Эта роль работает немного иначе, чем несколько других, так как для того, чтобы сделать роли различных хостов кластера независимыми, мы используем группы ansible. Всего три разные группы, которые нужно определить в вашем инвентаре. Чтобы сделать это удобным для различных кластеров в одном инвентаре, они настраиваемые.
postgresql_replication__group
- основная группа хостов для этого кластера, по умолчанию:postgresql
postgresql_replication__group_master
- группа мастера, которая должна содержать только один хост, по умолчанию:postgresql_master
postgresql_replication__group_replicas
- группа, включающая хосты-реплики, по умолчанию:postgresql_replicas
Ваш инвентарь должен иметь следующий вид (пример в формате yaml):
all:
children:
postgresql:
children:
postgresql_master:
hosts:
db-01:
ansible_host: 185.145.251.12
postgresql_replicas:
hosts:
db-02:
ansible_host: 185.145.251.243
postgresql_replication__user
- имя пользователя для аутентификации узлов репликации. по умолчанию:replicate
.postgresql_replication__password
- пароль для пользователяpostgresql_replication__user
. Важно изменить значение по умолчанию для производственных кластеров. по умолчанию:replicate
.postgresql_replication__waldir
- каталог, используемый для хранения WAL-файлов, отправляемых с узла-мастера на узлы репликации.
Конфигурация серверов отправки. Смотрите (https://www.postgresql.org/docs/11/runtime-config-replication.html#RUNTIME-CONFIG-REPLICATION-SENDER) для деталей корректных значений для вашей настройки.
postgresql_replication__walsenders
- количество процессов WAL-отправителей для включения. по умолчанию:3
.postgresql_replication__walsegments
- количество сегментов WAL для хранения (по 16 МБ каждый). по умолчанию:64
.postgresql_replication__trigger_file
- файл, используемый для запуска операции мастера на узле-реплике. по умолчанию:/tmp/MasterNow
postgresql_replication__bootstrap
- Очень важно. когда эта переменная установлена в"yesiwant"
, развертывание удалит все данные на узлах, определенных вpostgresql_replication__group_replicas
, и продолжит с freshpg_basebackup
от мастера. Будьте осторожны, так как если вы включите это и не правильно настроите узлы в группах, вы можете полностью уничтожить ваши данные.
Зависимости
Использование
Используйте Ansible galaxy requirements.yml
- src: enix.postgresql_replication
И добавьте это в роли вашего плейбука:
- hosts: postgresql
roles:
- role: enix.postgresql_replication:
postgresql__version: 11
postgresql__global_config_options:
- option: listen_addresses
value: '*'
- option: log_min_duration_statement
value: 1000
postgresql__hba_entries:
- {type: local, database: all, user: postgres, auth_method: peer}
- {type: local, database: all, user: all, auth_method: peer}
- {type: host, database: all, user: all, address: "0.0.0.0/0", auth_method: md5}
- {type: hostssl, database: replication, user: "{{ postgresql_replication__user }}", address: "0.0.0.0/0", auth_method: md5}
postgresql__users:
- {name: "{{ postgresql_replication__user }}", password: "{{ postgresql_replication__password }}", role_attr_flags: "REPLICATION"}
Вы также можете использовать эту роль как плейбук. Вам будет предложено выбрать, какие хосты настроить, и вы можете дополнительно настроить плей, используя --extra-vars
.
$ ansible-playbook -i inventory --extra-vars='{...}' main.yml
Что нужно сделать
- Добавить реальный gitlab / travis CI
- Добавить тесты с использованием molecule
Журнал изменений
1.1.0
Обновлены названия групп на postgresql_master и postgresql_replicas. Соответствует требованиям к названиям групп ansible 2.8+.
1.0.0
Начальная версия.
Лицензия
GPLv2
Информация об авторе
Лорен Корбес laurent.corbes@enix.fr - http://www.enix.io
Ansible role to deploy postgresql software with replication
ansible-galaxy install enix/ansible-postgresql_replication