Развёртывание кластера

В этой инструкции рассматривается развёртывание сервера подсистемы мониторинга в отказоустойчивой конфигурации.

Предполагается, что:

  • VictoriaLogs и VictoriaMetrics развёрнуты в виде кластеров, каждый на своей группе узлов. Мастеры обоих кластеров доступны через VIP.

  • Кластер PostgreSQL развёрнут средствами дистрибутива в отказоустойчивой конфигурации. Мастер кластера доступен через VIP. В кластере существуют базы grafana_db и vision_db, владельцем которых является пользователь vision.

  • Для подключения к узлам используется одна и та же учётная запись genome, а для повышения привилегий — учётная запись root.

В качестве примера используются следующие IP-адреса и сетевые имена узлов:

IP-адрес Сетевое имя Описание

192.168.0.11

node1.example.com

ВМ для развёртывания сервера подсистемы мониторинга

192.168.0.12

node2.example.com

ВМ для развёртывания сервера подсистемы мониторинга

192.168.0.13

node3.example.com

ВМ для развёртывания сервера подсистемы мониторинга

192.168.0.14

node4.example.com

ВМ для развёртывания сервера подсистемы мониторинга

192.168.0.15

node5.example.com

ВМ для развёртывания сервера подсистемы мониторинга

192.168.0.16

node6.example.com

ВМ для развёртывания сервера подсистемы мониторинга

192.168.0.21

monitoring.example.com

VIP, указывающий на мастер управления мониторингом

192.168.0.31

vm.example.com

VIP, указывающий на мастер VictoriaMetrics

192.168.0.41

vl.example.com

VIP, указывающий на мастер VictoriaLogs

192.168.0.51

pg.example.com

VIP, указывающий на мастер PostgreSQL

Подготовка к работе

Выберите и настройте узел, который будет использоваться в качестве установочного. Рекомендуется создать для этого отдельную ВМ.

  1. В результате развёртывания кластеров VictoriaLogs и VictoriaMetrics в директории playbooks/tmp/secrets/ были созданы файлы сертификатов, их ключей и файл с паролем. Скопируйте содержимое этой директории на установочный узел. Далее в качестве примера принято, что файлы скопированы в директорию /root/distrib/secrets/.

  2. Скопируйте на установочный узел архив vision-distrib-1.12-1360.tar.gz.

  3. Создайте и активируйте виртуальное окружение Python.

  4. Распакуйте архив с дистрибутивом:

    tar -xvf vision-distrib-1.12-1360.tar.gz
  5. Перейдите в директорию vision-distrib-1.12-1360/ha/. Далее имена файлов и директорий указываются относительно неё.

Заполнение инвентаря

Установщик подсистемы мониторинга позволяет распределить компоненты сервера по двум группам узлов:

  • alerting:

    • AlertManager;

    • AlertCollector;

    • vmalert_st;

    • vmalert_vl;

    • config_updater;

    • etcd;

  • backend:

    • NGINX;

    • keepalived;

    • Grafana;

    • vision_core;

    • vision_taskdaemon;

    • vision_iamsyncer.

Способ заполнения файла инвентаря зависит от того, на одной группе узлов будут развёрнуты все компоненты, или на разных.

Примеры заполнения инвентаря для обоих случаев доступны в директории inventories/example/.

В блоке all.children.backend.hosts выберите один узел и добавьте к его описанию параметр grafana_provisioning со значением true. Это необходимо для корректной установки дашбордов Grafana.

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

Все компоненты на одной группе узлов

Чтобы установить все компоненты сервера подсистемы мониторинга на одну группу узлов, заполните блок all.children.alerting следующим образом:

---
all:
  # ...
  children:
    backend:
      # ...

    alerting:
      children:
        backend: {}

Рассмотрим пример заполнения инвентаря для случая, когда все компоненты сервера подсистемы мониторинга устанавливаются на одну группу узлов.

---
all:
  vars:
    cluster_vip: 192.168.0.21

    ansible_user: genome
    ansible_ssh_pass: "********"
    ansible_become_user: root
    ansible_become_password: "********"

  children:
    backend:
      node1.example.com:
        ansible_host: 192.168.0.11
        grafana_provisioning: true
      node2.example.com:
        ansible_host: 192.168.0.12
      node3.example.com:
        ansible_host: 192.168.0.13

    alerting:
      children:
        backend: {}

Разные группы узлов

Если компоненты будут развёрнуты на разных группах узлов, заполните группы backend и alerting соответствующим образом, например:

---
all:
  vars:
    cluster_vip: 192.168.0.21

    ansible_user: genome
    ansible_ssh_pass: "********"
    ansible_become_user: root
    ansible_become_password: "********"

  children:
    backend:
      node1.example.com:
        ansible_host: 192.168.0.11
        grafana_provisioning: true
      node2.example.com:
        ansible_host: 192.168.0.12
      node3.example.com:
        ansible_host: 192.168.0.13

    alerting:
      node4.example.com:
        ansible_host: 192.168.0.14
      node5.example.com:
        ansible_host: 192.168.0.15
      node6.example.com:
        ansible_host: 192.168.0.16

Заполнение файла external_services.yml

В конфигурационном файле playbooks/group_vars/all/external_services.yml укажите настройки интеграции сервера подсистемы мониторинга с другими компонентами.

common_ca_cert_src_path

Если для защиты подключений к кластерам VictoriaMetrics и VictoriaLogs используется один и тот же сертификат, укажите путь к нему в значении этого параметра.

Пример заполнения
common_ca_cert_src_path: /root/distrib/secrets/CAVictoriaExternal.crt

common_ca_enabled

Чтобы для защиты подключения к кластерам VictoriaMetrics и VictoriaLogs использовались сертификаты, присвойте этому параметру значение true.

Также в этом случае укажите пути к файлам ключей и сертификатов.

common_ca_key_src_path

Если для защиты подключений к кластерам VictoriaMetrics и VictoriaLogs используется один и тот же сертификат, укажите путь к файлу его ключа в значении этого параметра.

Пример заполнения
common_ca_key_src_path: /root/distrib/secrets/CAVictoraExternal.key

postgres_grafana_db

В значении этого параметра укажите название БД для Grafana.

Пример заполнения
postgres_grafana_db: grafana_db

postgres_grafana_dsn

DSN-строка, содержащая параметры подключения к БД PostgreSQL для Grafana.

По умолчанию значение этого параметра формируется на основе значений параметров postgres_user, postgres_pass, postgres_host, postgres_port и postgres_grafana_db. Однако, вы можете указать собственное значение, и тогда значения перечисленных параметров будут проигнорированы. В этом случае параметры подключения указывайте согласно спецификации, описанной в документации PostgreSQL.

Пример заполнения
postgres_grafana_dsn: "postgres://vision:********@pg.example.com:5432/grafana_db"

postgres_host

FQDN или IP-адрес мастера сервера PostgreSQL.

postgres_host: pg.example.com

postgres_pass

Пароль для подключения к СУБД PostgreSQL.

Если для подключения ко всем базам данных подсистемы мониторинга используется один и тот же пароль, укажите его в значении этого параметра.

postgres_port

Номер порта, используемый для подключения к СУБД PostgreSQL.

postgres_user

Название учётной записи, используемой для подключения к СУБД PostgreSQL.

postgres_vision_db

Название БД, используемой для хранения данных сервера подсистемы мониторинга.

Пример заполнения
postgres_vision_db: vision_db

postgres_vision_dsn

DSN-строка, содержащая параметры подключения к БД PostgreSQL для сервера подсистемы мониторинга.

По умолчанию значение этого параметра формируется на основе значений параметров postgres_user, postgres_pass, postgres_host, postgres_port и postgres_vision_db. Однако, вы можете указать собственное значение, и тогда значения перечисленных параметров будут проигнорированы. В этом случае параметры подключения указывайте согласно спецификации, описанной в документации PostgreSQL.

Пример заполнения
postgres_vision_dsn: "postgres://vision:********@pg.example.com:5432/vision_db"

victorialogs_basic_auth_password

Пароль Basic Auth для подключения к VictoriaLogs.

Если сервер VictoriaLogs развёрнут средствами дистрибутива в виде отказоустойчивого кластера, возьмите значение пароля из файла /root/distrib/secrets/<VIP>_vmauth_external_user_password.

victorialogs_basic_auth_username

Название учётной записи Basic Auth для подключения к VictoriaLogs.

victorialogs_tls_ca_src_path

Путь к файлу корневого сертификата, используемого для защиты подключения к VictoriaLogs.

victorialogs_tls_cert_src_path

Путь к файлу сертификата, используемого для защиты подключения к VictoriaLogs.

victorialogs_tls_key_src_path

Путь к файлу ключа сертификата, используемого для защиты подключения к VictoriaLogs.

victorialogs_url

Строка подключения к VictoriaLogs. Заполняйте по образцу:

victorialogs_url: https://<victorialogs>:9427

Здесь <victorialogs> — доменное имя или VIP, указывающие на мастер кластера VictoriaLogs.

Пример заполнения
victorialogs_url: https://vl.example.com:9427

victoriametrics_basic_auth_password

Пароль Basic Auth для подключения к VictoriaMetrics.

Если сервер VictoriaMetrics развёрнут средствами дистрибутива в виде отказоустойчивого кластера, возьмите значение пароля из файла /root/distrib/secrets/<VIP>_vmauth_external_user_password.

victoriametrics_basic_auth_username

Название учётной записи Basic Auth для подключения к VictoriaMetrics.

victoriametrics_tls_ca_src_path

Путь к файлу корневого сертификата, используемого для защиты подключения к VictoriaMetrics.

victoriametrics_tls_cert_src_path

Путь к файлу сертификата, используемого для защиты подключения к VictoriaMetrics.

victoriametrics_tls_key_src_path

Путь к файлу ключа сертификата, используемого для защиты подключения к VictoriaMetrics.

victoriametrics_url

Строка подключения к VictoriaMetrics Заполняйте по образцу:

victoriametrics_url: https://<victoriametrics>:8427

Здесь <victoriametrics> — доменное имя или VIP, указывающие на мастер кластера VictoriaMetrics.

Пример заполнения
victoriametrics_url: https://vm.example.com:8427

vision_ui_url

URL для подключения к подсистеме мониторинга. Заполняйте по образцу:

vision_ui_url: "https://<monitoring>"

Здесь <monitoring> — доменное имя или VIP, указывающие на сервер подсистемы мониторинга.

Пример заполнения
vision_ui_url: https://monitoring.example.com

Пример заполнения

Для значений, приведённых в начале инструкции, заполненный файл playbooks/group_vars/all/external_services.yml будет иметь следующий вид:

---
common_ca_enabled: true
common_ca_cert_src_path: "/root/distrib/secrets/CAVictoriaExternal.crt"
common_ca_key_src_path: "/root/distrib/secrets/CAVictoriaExternal.key"

vision_ui_url: "https://192.168.0.21"

postgres_host: "192.168.0.51"
postgres_port: 5432
postgres_user: vision
postgres_pass: "********"
postgres_vision_db: vision_db
postgres_grafana_db: grafana_db

postgres_vision_dsn: '{{ "postgres://%s:%s@%s:%s/%s" | format(postgres_user, postgres_pass, postgres_host, postgres_port, postgres_vision_db) }}'
postgres_grafana_dsn: '{{ "postgres://%s:%s@%s:%s/%s" | format(postgres_user, postgres_pass, postgres_host, postgres_port, postgres_grafana_db) }}'

victoriametrics_url: "https://192.168.0.31:8427"
victoriametrics_basic_auth_username: "vision"
victoriametrics_basic_auth_password: "********"
victoriametrics_tls_ca_src_path: "{{ common_ca_cert_src_path }}"
victoriametrics_tls_cert_src_path: "/root/distrib/secrets/192.168.0.31_external_client.crt"
victoriametrics_tls_key_src_path:  "/root/distrib/secrets/192.168.0.31_external_client.key"

victorialogs_url: "https://192.168.0.41:9427"
victorialogs_basic_auth_username: "vision"
victorialogs_basic_auth_password: "********"
victorialogs_tls_ca_src_path: "{{ common_ca_cert_src_path }}"
victorialogs_tls_cert_src_path: "/root/distrib/secrets/192.168.0.41_external_client.crt"
victorialogs_tls_key_src_path:  "/root/distrib/secrets/192.168.0.41_external_client.key"

Установка

  1. Запустите плейбук, выполняющий развёртывание:

    ansible-playbook -i path/to/inventory.yml playbooks/deploy.yml
  2. Запустите плейбук, проверяющий корректность развёртывания:

    ansible-playbook -i path/to/inventory.yml playbooks/check.yml
  3. Если во время развёртывания или при проверке его корректности будут обнаружены ошибки, исправьте их и запустите развёртывание ещё раз.

    Развёртывание etcd не поддерживает повторного запуска. По этой причине при повторном запуске плейбука playbooks/deploy.yml необходимо пропустить выполнение задач, отмеченных тегом etcd:

    ansible-playbook -i path/to/inventory.yml playbooks/deploy.yml --skip-tags etcd

    Для получения полного списка доступных тегов выполните команду:

    ansible-playbook playbooks/deploy.yml --list-tags
  4. Деактивируйте виртуальное окружение:

    deactivate