Хранение конфигурации в 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 более удобной, выполните следующие действия:
-
Создайте на одном из узлов 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. -
Сделайте файл
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"'