Отказоустойчивый кластер VictoriaMetrics

При установке Визион.Сервер сервер VictoriaMetrics развёртывается на одном узле. Такая конфигурация не требует дополнительных настроек, но не обеспечивает отказоустойчивости. При выходе узла из строя работа VictoriaMetrics будет нарушена.

В производственных средах рекомендуется развернуть и использовать отказоустойчивый кластер VictoriaMetrics из трёх узлов.

ПРИМЕЧАНИЕ
Визион может использовать для хранения метрик внешний сервер VictoriaMetrics. Подробнее в инструкции Переключение сервера VictoriaMetrics .

Развёртывание кластера выполняется с помощью плейбука Ansible. Далее узел, на котором запускается плейбук, называется управляющим (control node).

Доступ к мастеру кластера выполняется через виртуальный IP-адрес (Virtual IP Address, VIP). Для отслеживания состояния узлов кластера и автоматического переназначения VIP на узлах кластера развёртывается служба keepalived .

Для развёртывания кластера VictoriaMetrics можно использовать те же узлы, что и для развёртывания кластера VictoriaLogs . В этом случае одна и та же служба keepalived будет обслуживать оба кластера.

Системные требования#

Отказоустойчивая конфигурация предъявляет свои требования к узлам кластера VictoriaMetrics в дополнение к основным:

  • ОС ALT Linux c10f1 или ALT Linux c10f2.

  • Подключены актуальные репозитории пакетов.

  • Установлен пакет openssl с поддержкой TLS 1.3.

  • Настроена синхронизация времени.

  • Настроен доступ по SSH.

К управляющему узлу предъявляются те же требования, что и к узлам кластера, однако, допускается использование другой ОС, если выполнены следующие условия:

  • Версия Ansible не ниже 1.15.

  • Если используется авторизация по паролю, установлена утилита sshpass.

  • Доступны пакеты Python packaging и pycryptodome.

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

vmauth#

Исполняемый файл: /usr/local/bin/vmauth-prod.

Файлы конфигурации и сертификаты: /opt/victoriametrics-vmauth/.

Локальный адрес Порт Протокол Описание Клиенты сервиса
0.0.0.0 8427 TCP/HTTPS Внешний прокси-сервер для доступа к компонентам кластера VictoriaMetrics. Обеспечивает единую точку входа с аутентификацией и балансировкой нагрузки кластера grafana, vision_core, vmalert
127.0.0.1 8426 TCP/HTTPS Внутренний интерфейс для служебных эндпоинтов vmauth: health check, metrics, status

vmselect#

Исполняемый файл: /usr/local/bin/vmselect-prod.

Файлы конфигурации и сертификаты: /opt/victoriametrics-vmselect/.

Локальный адрес Порт Протокол Описание Клиенты сервиса
0.0.0.0 8481 TCP/HTTPS Компонент для выполнения запросов к данным в vmstorage. Предоставляет API для чтения метрик, vmui интерфейс и служебные эндпоинты vmauth (локальный и с других узлов)

vminsert#

Исполняемый файл: /usr/local/bin/vminsert-prod.

Файлы конфигурации и сертификаты: /opt/victorialogs-vminsert/.

Локальный адрес Порт Протокол Описание Клиенты сервиса
0.0.0.0 8480 TCP/HTTPS Компонент для приёма и распределения метрик по узлам vmstorage. Предоставляет API для записи метрик и служебные эндпоинты vmauth (локальный и с других узлов)

vmstorage#

Исполняемый файл: /usr/local/bin/vmstorage-prod.

Файлы конфигурации и сертификаты: /opt/victoriametrics-vmstorage/.

Локальный адрес Порт Протокол Описание Клиенты сервиса
127.0.0.1 8482 TCP/HTTPS HTTP API для управления и мониторинга vmstorage (health checks, metrics, snapshots, удаление данных)
0.0.0.0 8400 RPC RPC-интерфейс для приёма данных от vminsert. Использует mTLS для безопасной межкомпонентной коммуникации vminsert (локальный и с других узлов)
0.0.0.0 8401 RPC RPC-интерфейс для запроса данных от vmselect. Использует mTLS для безопасной межкомпонентной коммуникации vmselect (локальный и с других узлов)

keepalived#

Исполняемый файл: /usr/sbin/keepalived.

Файлы конфигурации и сертификаты: /etc/keepalived/.

Локальный адрес Порт Протокол Описание Клиенты сервиса
VRRP Управление VIP кластера. Использует multicast для обмена сообщениями между узлами keepalived keepalived (на других узлах кластера)

Подготовка управляющего узла#

Подготовьте управляющий узел к работе:

  1. Распакуйте архив с плейбуками и виртуальным окружением в произвольный каталог.

  2. Если управляющий узел работает под управлением ОС, отличающейся от ALT Linux c10f1 или ALT Linux c10f2, перейдите в директорию с коллекциями Ansible и установите их:

    cd collections/ && ansible-galaxy collection install . -v --force
    

Подготовка узлов кластера#

Чтобы подготовить узлы кластера:

  1. Убедитесь, что время на всех трёх узлах синхронизировано.

  2. Убедитесь, что необходимые репозитории подключены и актуальны.

Установка#

После подготовительных работ переходите к установке:

  1. Перейдите в директорию с плейбуками.

  2. Если управляющий узел работает под управлением ALT Linux c10f1 или ALT Linux c10f2, распакуйте и активируйте виртуальное окружение Python:

    source venv/activate_venv.sh
    
  3. В конфигурационном файле playbooks/inventory.yml укажите параметры подключения к узлам кластера.

    Используйте адреса сети, по которой узлы кластера будут взаимодействовать друг с другом.

  4. В конфигурационном файле playbooks/cluster-vip/group_vars/all/keepalived.yml укажите параметры развёртывания keepalived. Значения параметров зависят от того, на одних и тех же или на разных узлах развёртываются кластеры VictoriaLogs и VictoriaMetrics.

    • keepalived_virtual_router_id — одно и то же значение, если VictoriaLogs и VictoriaMetrics развёртываются на одних и тех же узлах, и уникальное значение для каждого кластера в противном случае.

    • keepalived_virtual_status_command

      • VictoriaLogs и VictoriaMetrics на одних и тех же узлах

        "/bin/bash -c '/sbin/systemctl is-active --quiet vmauth.service && /sbin/systemctl is-active --quiet vlauth.service'"
        
      • VictoriaMetrics на отдельных узлах

        "/bin/bash -c '/sbin/systemctl is-active --quiet vmauth.service'"
        
  5. Если используется авторизация по паролю, установите пакет sshpass:

    apt-get update && apt-get install sshpass --yes
    
  6. Запустите развёртывание кластера VictoriaMetrics:

    ansible-playbook \
       -i playbooks/inventory.yml \
       playbooks/cluster-vm/deploy.yml
    
  7. Если keepalived не развёрнут, запустите развёртывание:

    ansible-playbooks \
       -i playbooks/inventory.yml \
       playbooks/cluster-vip/deploy.yml
    

Секреты#

В результате выполнения плейбуков в директории playbooks/tmp/secrets/ формируются файлы с конфиденциальными сведениями (секреты), необходимыми для работы кластера и подключения к ним внешних клиентов.

ВАЖНО
Не удаляйте секреты без необходимости! Если плейбуки не обнаружат их, то создадут новые секреты, а старые станут недействительными. Из-за этого потребуется заново настроить внешние клиенты, использующие старые секреты.

Сертификаты:

  • CAVictoriaExternal — корневой сертификат для внешних подключений к vmauth.

    • <vip>_external_client — VIP, по которому к кластеру подключаются vision_core и другие компоненты Визион.

    • <hostname>_vmauth_server — для сервера vmauth, обрабатывающего внешние подключения.

  • CAVictoriaInternal — корневой сертификат для внутренних подключений между компонентами кластера.

    • <hostname>_vmauth_client — для подключения vmauth в качестве клиента к компонентам кластера.

    • <hostname>_vinsert

    • <hostname>_vselect

    • <hostname>_vstorage

Пароли:

  • <vip>_global_basic_auth_password — пароль BasicAuth для внутренних подключений между компонентами кластера.

  • <vip>_keepalived_auth_password — пароль keepalived, используемый для авторизации между узлами.

  • <vip>_vmauth_external_user_password — пароль для внешних подключений vision_core и других компонентов Визион к vmauth.

Проверка корректности#

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

  • <ca_cert> — путь к корневому сертификату для внешних подключений, playbooks/cluster-vm/tmp/secrets/CAVictoriaExternal.crt.

  • <vip> — VIP, указанный в инвентори-файле.

  • <user> — имя пользователя vmauth.

    По умолчанию в VictoriaMetrics создаётся пользователь vision.

  • <password> — пароль для доступа к vmauth.

    Используйте значение из файла playbooks/cluster-vm/tmp/secrets/vmauth_external_user_password.

  • <port> — порт для подключения.

    По умолчанию сервер VictoriaMetrics слушает порт 8427.

Статусы служб и журналы работы#

  1. Проверьте статусы служб:

    • vmauth.service

    • vminsert.service

    • vmselect.service

    • vmstorage.service

    • keepalived.service

  2. Убедитесь в отсутствии ошибок в журналах работы компонентов кластера, следуя инструкции .

Состояние хранилища#

Запрос:

curl -v \
  --cacert <ca_cert> \
  -u <user>:<password> \
  "https://<vip>:<port>/-/healthy"

Ответ должен обладать следующими свойствами:

  • HTTP Status Code: 200 OK.

  • Body: VictoriaMetrics is Healthy.

Запись метрики в vminsert через vmauth#

Запрос:

curl -v \
  --cacert <ca_cert> \
  -u <user>:<password> \
  --data-binary 'up{test="vminsert_curl"} 1' \
  "https://<vip>:<port>/api/v1/import/prometheus"

Ответ должен обладать следующими свойствами:

  • HTTP Status Code: 204 No Content.

  • Body: отсутствует.

Чтение метрик из vmselect через vmauth#

Запрос:

curl -v \
  --cacert <ca_cert> \
  -u <user>:<password> \
  "https://<vip>:<port>/api/v1/query?query=up"

Ответ должен обладать следующими свойствами:

  • HTTP Status Code: 200 OK.

  • Body: содержит поле status со значением success.

Доступ к интерфейсу VMUI через браузер#

vmauth проксирует доступ к интерфейсу VMUI с помощью запросов, которые обрабатывает компонент vmselect. Для проверки его работоспособности перейдите по ссылке:

https://<user>:<password>@<vip>:<port>/vmui

Отсутствие ошибок получения данных указывает на корректность выполненных настроек.

Перемещение VIP#

Перемещение VIP позволяет убедиться в корректности работы служб keepalived и vip-manager.

Перемещение при остановке keepalived#

  1. Найдите узел с VIP:

    ip -br a
    
  2. Подключитесь к узлу с VIP и остановите службу keepalived:

    systemctl stop keepalived.service
    
  3. Убедитесь, что VIP переместился на другой узел.

  4. Повторяйте шаги 1—3 до тех пор, пока VIP не будет перемещён на нужный узел.

  5. Запустите службу keepalived на всех узлах кластера:

    systemctl start keepalived.service
    

Перемещение при остановке vmauth#

  1. Найдите узел с VIP:

    ip -br a
    
  2. Подключитесь к узлу с VIP и остановите службу vmauth:

    systemctl stop vmauth.service
    
  3. Убедитесь, что VIP переместился на другой узел.

  4. Повторяйте шаги 1—3 до тех пор, пока служба vmauth не будет остановлена на всех узлах.

  5. Найдите узел без VIP:

    ip -br a
    
  6. Запустите сервис vmauth:

    systemctl start vmauth.service
    
  7. Убедитесь, что VIP перемещён на узел с работающей службой vmauth.

    ПРИМЕЧАНИЕ
    На перемещение VIP может потребоваться несколько секунд.
  8. Запустите службу vmauth на всех остальных узлах кластера.