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, и продолжит с fresh pg_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
Лицензия
Unknown
Загрузки
15989
Владелец
Enix