Внешнее отказоустойчивое хранилище

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

Перед настройкой кластера необходимо настроить виртуальную сеть (VPN). Для ее работы нужна сетевая связность между экземплярами. Подробные сведения по настройке и необходимым доступам описаны по ссылке.

Данная схема внедрения подразумевает физическое хранение общих для всех экземпляров MITIGATOR баз данных на внешнем сервере. Работоспособность и отказоустойчивость всех СУБД обеспечивается силами администратора внешнего сервера под конкретные требования.

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

Внешнее отказоустойчивое хранилище

Все экземпляры разворачиваются как worker´ы.

Если кластер собирается из экземпляров MITIGATOR, которые ранее уже работали независимо, то в ходе интеграции могут возникнуть конфликты. Поэтому на всех экземплярах кроме будущего лидера необходимо выполнить команду:

docker-compose down -v

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

Схема взаимодействия:

  • MITIGATOR подключается к Postgres для записи и чтения настроек и журналов;
  • MITIGATOR оправляет в graphite метрики и обращается к его API;
  • в качестве бэкенда Graphite рекомендуется ClickHouse.

Настройка Postgres

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

Миграции необходимо брать прямо из контейнера используемой версии:

  1. Развернуть полноценный стенд (временно закомментировать строку #COMPOSE_FILE= в файле .env).

  2. Выполнить команду:

    docker-compose create postgres
    
  3. Скопировать скрипты миграции:

    docker cp mitigator_postgres_1:/schema schema
    
  4. Выполнить команду:

    docker-compose rm -sf postgres
    
  5. Восстановить состояние файла .env, раскомментировав строку #COMPOSE_FILE=.

На уровне Postgres необходимо создать базу mitigator. Скрипты миграций создадут пользователя backend и назначат ему необходимые права. После чего на уровне СУБД нужно разрешить подключение для этого пользователя.

Экземпляры MITIGATOR подключаются к порту 5432/tcp. Строку подключения можно явно переопределить, по умолчанию используется:

services:
  backend:
    environment:
      BACKEND_DATABASE_URI: "postgres://backend@${MITIGATOR_STORAGE_HOST}/mitigator?sslmode=disable"

Настройка Graphite

MITIGATOR отправляет метрики в формате Graphite plaintext protocol по адресу: ${MITIGATOR_STORAGE_HOST}:2003 (TCP). Если нужно отправлять их в несколько баз, адреса можно указать явно через запятую:

services:
  fwstats:
    environment:
      FWSTATS_GRAPHITE_ADDRESS: "${MITIGATOR_STORAGE_HOST}:2003,another-host:2003"

MITIGATOR обращается к Graphite API по URL: http://${MITIGATOR_STORAGE_HOST}:3080/render/.

Настройка ClickHouse

Только если ClickHouse используется в качестве бэкенда Graphite.

  1. Развернуть полноценный стенд (закомментировать строку #COMPOSE_FILE= в файле .env).

  2. Выполнить команду:

    docker-compose create clickhouse
    
  3. Выполнить команды:

    docker cp mitigator_clickhouse_1:/etc/clickhouse-server/config.d clickhouse-config
    docker cp mitigator_clickhouse_1:/etc/clickhouse-server/users.d clickhouse-users
    docker cp mitigator_clickhouse_1:/docker-entrypoint-initdb.d clickhouse
    
  4. Выполнить команду:

    docker-compose rm -sf clickhouse
    
  5. Восстановить состояние файла .env, раскомментировав строку #COMPOSE_FILE=.

  6. В файле .env задать переменную MITIGATOR_OWN_NAME=mitigator-1. Здесь mitigator-1 – имя экземпляра. Имя каждого экземпляра должно быть уникально.

  7. В файле .env задать переменную MITIGATOR_HOST_ADDRESS=192.0.2.1. Здесь 192.0.2.1 – адрес хоста для данного экземпляра.

Полученные настройки являются рекомендованными, но могут быть при необходимости изменены, например, см. раздел «Настройка времени хранения метрик в Graphite».