vitabaks / postgresql_cluster

PostgreSQL High-Availability Cluster (based on "Patroni" and DCS "etcd" or "consul"). Automating with Ansible.
MIT License
1.29k stars 352 forks source link

вариант реализации callback.sh #53

Closed sgrinko closed 3 years ago

sgrinko commented 3 years ago

Добрый день!

Спасибо большое за вашу работу!

Предложение: предлагаю добавить в master ветку простую default реализацию информирования об изменении ролей кластера приложил свой файл callback.sh.j2 для отсылки письма я использую программу mutt, а для настройки написал простую роль email которую также вызываю при настройке кластера в deploy_pgcluster.yml

    - role: email
      when: email_install|bool

Вид формируемого письма: изображение

callback.sh.zip

Добавил переменную в которой указываю кому присылать письмо patroni_callback_email

В каталог roles\patroni\templates добавил приложенный callback.sh.j2 файл и поправил файл patroni.yml.j2

  callbacks:
    on_start: /etc/patroni/callback.sh
    on_stop: /etc/patroni/callback.sh
    on_restart: /etc/patroni/callback.sh
    on_reload: /etc/patroni/callback.sh
    on_role_change: /etc/patroni/callback.sh

В файл roles\patroni\tasks\main.yml

- name: Generate callback file "/etc/patroni/callback.sh"
  template:
    src: templates/callback.sh.j2
    dest: /etc/patroni/callback.sh
    owner: postgres
    group: postgres
    mode: 0755
  when: existing_pgcluster is not defined or not existing_pgcluster|bool
  tags: patroni, patroni_conf

и в - block: # for add_pgnode.yml

    - name: Fetch callback.sh file from master
      run_once: true
      fetch:
        src: /etc/patroni/callback.sh
        dest: files/callback.sh
        validate_checksum: true
        flat: true
      delegate_to: "{{ groups.master[0] }}"

    - name: Copy callback.sh conf file to replica

      copy:
        src: files/callback.sh
        dest: /etc/patroni/callback.sh
        owner: postgres
        group: postgres
        mode: 0640

детали моей роли email: vars/main.yml

# to set up mail
email_install: true                             # true if you need to configure mail
#email_realname: "db-postgres"                  # name for email send for "from". Comment for value as ansible_hostname 
email_machine_name: "email.dvl.ru"              # name email server
email_domen_name: "dvl.ru"                      # part of name is "Hostname"
email_for_test: "my_email@work.ru"              # address for checking the health of mail settings

файл с ролью приложил, вдруг кому-то это будет полезно, а вдруг это понравится и войдет в настройку кластера :)

email.yml.zip

Ещё раз большое спасибо за вашу работу!

vitabaks commented 3 years ago

Спасибо, интересный пример.

У меня с этой задачей справляется zabbix).

sgrinko commented 3 years ago

У zabbix с письмами, с точки зрения их информативности, проблема. Тем более нет возможности это получить в таком красивом виде :) А что использовали для отслеживания смены ролей ? Плюс этого решения в том, что отслеживание поручено patroni и нет никаких "левых" запросов с постоянным интервалом :) Согласны, что изначально добавить такой функционал - это хорошо?

vitabaks commented 3 years ago

Предложенные скрипты добавлены не будут. Это не задача автоматизации.

Спасибо, что поделились примером, возможно кому нибудь они понадобятся.

sgrinko commented 3 years ago

Просто ваш playbook решает очень много задач автоматизации, для меня конечно реализация информирования о смене роли мастера такая же важная часть автоматизации как любая другая.

vitabaks commented 3 years ago

Оформите свою часть логики как роль. И мпортируйте её в плэйбук при развёртывании.

Я так сделал для ansible-role-pgcenter

sgrinko commented 3 years ago

идея понятна, конечно я мог так и сделать (совсем отдельная роль), но мне подумалось, что если это интегрировать в основную ветку, будет хорошо для всех. У меня уже много доп. ролей подобных :) возможно нам стоит их как-то объединить ? Пусть не в рамках этого деплоя, но все же? я кстати тоже хотел реализовывать установку pg-center. будет очень приятно познакомиться с вашим опытом.. у меня на сейчас есть: настройка mamonsu настройка email настройка pg_probackup как средства для бэкапов настройка pgbouncer для аутенификации через hba модель + работа с БД через выделенный логин и получение паролей через функцию (для лучшей безопасности). мы могли бы это все вести совместно :)

vitabaks commented 3 years ago

Пример роли: https://github.com/vitabaks/ansible-role-pgcenter

импорт (пример):

cd postgresql_cluster/roles
git clone https://github.com/vitabaks/ansible-role-pgcenter.git

vim deploy_pgcluster.yml

  roles:
    - role: ansible-role-pgcenter
sgrinko commented 3 years ago

Спасибо! Я постараюсь в течении недели начать подготавливать в таком же виде свои роли. Очень надеюсь, что они пригодятся не только мне... На пока буду выкладывать в соей копилке: https://github.com/sgrinko/ansible_roles

sgrinko commented 3 years ago

Я опубликовал в galaxy свою роль по настройке mamonsu ansible-role-mamonsu Было бы здорово получить обратную связь :)

Прошу прощения за оффтоп, просто не знаю куда написать :)

vitabaks commented 3 years ago

Ok.

просто не знаю куда написать :)

E-mail для связи указан В README - vitabaks@gmail.com