Хранение конфигурации в etcd

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

В этом случае на узлах развёртываются службы:

  • etcd — распределённое хранилище. Для доступа к узлу-мастеру используется виртуальный IP-адрес (Virtual IP, VIP).

  • config_updater — утилита, которая отслеживает изменение настроек в etcd, обновляет конфигурационные файлы компонентов и перезапускает связанные с ними службы systemd.

  • keepalived — отслеживает состояние узлов и в случае выхода узла-лидера из строя переназначает VIP на резервный лидер.

etcd и config_updater могут быть развёрнуты на одном или трёх узлах.

etcd

etcd хранит данные в виде пар «ключ:значение».

Названия ключей формируются по тому же принципу, что и пути к файлам в *nix-системах. Полный путь к «директории» в терминологии etcd называется префиксом.

Визион использует префикс /vision. Его конфигурация размещается в etcd следующим образом:

  • Содержимое файла /opt/skala-r/vision/VERSION размещается в ключе /vision/version целиком.

  • Содержимое файла /opt/skala-r/vision/.secrets_vault размещается в ключе /vision/secrets целиком.

  • /opt/skala-r/etc/vision/server/vision_core/config.yml — для каждой настройки создаётся отдельный ключ с префиксом /vision/config/core.

  • /opt/skala-r/etc/vision/server/vision_core/log_config.yml — для каждой настройки создаётся отдельный ключ с префиксом /vision/config/logging.

  • /opt/skala-r/etc/vision/server/vision_core/grafana.yml — для каждой настройки создаётся отдельный ключ с префиксом /vision/config/grafana/config_yaml.

  • Содержимое файла /opt/skala-r/etc/vision/server/vision_core/backup.yml размещается в ключе /vision/config/backup/config_templates/config целиком.

Изменение настроек

Для изменения настроек, хранящихся в etcd, используйте утилиту etcdctl.

В приведённых ниже командах:

  • <VIP> — VIP, указывающий на мастер etcd;

  • <client_port> — номер порта для клиентских подключений (значение параметра etcd.client_port в _settings.yml).

В качестве примера для авторизации в etcd используются имя и пароль пользователя vision, заданные в _settings.yml по умолчанию.

  • Подключение с использованием самоподписанных сертификатов, сгенерированных etcd:

    etcdctl \
        --endpoints https://<VIP>:<client_port> \
        --cert /var/lib/etcd/default.etcd/fixtures/client/cert.pem \
        --key /var/lib/etcd/default.etcd/fixtures/client/key.pem \
        --insecure-skip-tls-verify \
        --user "vision:visionpw" \
        put /vision/test_key test_value
  • Подключение с использованием собственных сертификатов:

    etcdctl \
        --endpoints https://<VIP>:<client_port> \
        --cert /path/to/cert \
        --key /path/to/key \
        --ca /path/to/ca_cert \
        --user "vision:visionpw" \
        put /vision/test_key test_value
  • Подключение без использования сертификатов:

    etcdctl \
        --endpoints http://<VIP>:<client_port> \
        --user "vision:visionpw" \
        put /vision/test_key test_value

Упрощение работы с etcdctl

Для управления данными в etcd необходима утилита etcdctl.

Для изменения настроек измените значение соответствующего ключа. Утилита config_updater при очередной проверке обнаружит изменения, изменит настройки связанного компонента и при необходимости перезапустит его.

Чтобы сделать работу с утилитой etcdctl более удобной, выполните следующие действия:

  1. Создайте на одном из узлов etcd скрипт etcdctl.sh со следующим содержимым:

    #!/usr/bin/env bash
    
    etcdctl \
      --user <etcduser>:<etcdpassword> \
      --key /path/to/cert.key \
      --cert /path/to/cert.crt \
      --cacert /path/to/cacert.crt

    Вместо <etcduser> и <etcdpassword> укажите соответственно имя пользователь и пароль, используемые для доступа к etcd.

  2. Сделайте файл etcdctl.sh исполняемым:

    chmod +x etcdctl.sh

Используйте скрипт stcdctl.sh для работы с etcd:

  • Запрос значения по ключу:

    ./etcdctl.sh get <ключ>
  • Запрос значений по префиксу ключей:

    ./etcdctl.sh get <ключ> --prefix
  • Удаление ключа:

    ./etcdctl.sh del <ключ>
  • Удаление ключей по префиксу:

    ./etcdctl.sh del <ключ> --prefix
  • Вставка значения по ключу:

    ./etcdctl.sh put <ключ> <значение>

Для изменения значения параметра Визион grafana.host на 192.168.190.144 выполните команду:

./etcdctl.sh put /vision/config/core/grafana/host '"192.168.190.144"'