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

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

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

Примечание
Визион может использовать для хранения логов внешний сервер VictoriaLogs. Подробнее в инструкции Переключение сервера VictoriaLogs .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

vlauth#

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

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

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

vlselect#

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

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

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

vlinsert#

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

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

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

vlstorage#

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

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

Локальный адрес Порт Протокол Описание Клиенты сервиса
0.0.0.0 9491 TCP/HTTPS HTTP API для приёма данных от vlinsert, для запроса данных от vlselect и для управления и мониторинга vlstorage (health checks, metrics, snapshots, удаление данных) vlinsert (локальный и с других узлов), vlselect (локальный и с других узлов)

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

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

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

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

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

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

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

Секреты#

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

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

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

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

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

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

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

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

    • <hostname>_vinsert

    • <hostname>_vselect

    • <hostname>_vstorage

Пароли:

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

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

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

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

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

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

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

  • <user> — имя пользователя vlauth. По умолчанию в VictoriaLogs создаётся пользователь vision.

  • <password> — пароль для доступа к vlauth. Используйте значение из файла playbooks/cluster-vm/tmp/secrets/vmauth_external_user_password.

  • <port> — порт для подключения. По умолчанию при развёртывании VictoriaLogs используется порт 9427.

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

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

    • vlauth.service

    • vlinsert.service

    • vlselect.service

    • vlstorage.service

    • keepalived.service

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

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

Запрос:

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

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

  • HTTP Status Code: 200 OK.

  • Body: VictoriaLogs is Healthy.

Запись лога в vlinsert через vlauth#

Запрос:

curl -v -X POST \
  -H "Content-Type: application/stream+json" \
  --cacert <ca_cert> \
  -u <user>:<password> \
  --data-binary @- \
 "https://<vip>:<port>/insert/jsonline?_stream_fields=app_name&_time_field=date&_msg_field=log.message" <<EOF
{ "log": { "level": "info", "message": "hello world" }, "date": "0", "app_name": "test" }
{ "log": { "level": "error", "message": "oh no!" }, "date": "0", "app_name": "test" }
EOF

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

  • HTTP Status Code: 200 OK.

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

Чтение лога из vlselect через vlauth#

Запрос:

curl -v \
  --cacert <ca_cert> \
  -u <user>:<password> \
  "https://<vip>:<port>/select/logsql/query?query=*"

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

  • HTTP Status Code: 200 OK.

  • Body: отсутствует или содержит корректный JSON с данными.

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

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

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

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

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

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

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

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

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

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

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

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

    systemctl start keepalived.service
    

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

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

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

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

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

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

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

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

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