Учебники

Консул — Отказоустойчивые события

В этой главе мы узнаем о событиях отработки отказа в Консуле. Это будет сделано с помощью следующих функций —

  • Отказ одного кластера
  • Тестирование Jepsen
  • Многократный отказ кластера
  • Делать снимки

Давайте разберемся с каждым из них в деталях.

Отказ одного кластера

В случае сбоя одного кластера кластер, помещенный в один из центров обработки данных, начинает отказывать. В каждом случае важно удостовериться, что в случае сбоя система не только может предотвратить ее, но и имеет резервную копию, на которую она может положиться. Для предотвращения событий отказа Консульства мы будем использовать то, что называется Консул-оповещения. Основной проект можно найти по адресу — https://github.com/AcalephStorage/consul-alerts .

Consul-alerts — это высокодоступный демон для отправки уведомлений и напоминаний, основанный на проверках здоровья Consul. Этот проект запускает демон и API по адресу localhost: 9000 и подключается к агенту локального консула (localhost: 8500) с центром данных по умолчанию (dc1).

Есть два способа начать работу с проектом. Первый способ — установить его через GO . Для пользователей, которые установили и настроили GO, они могут выполнить шаги, указанные ниже:

$ go get github.com/AcalephStorage/consul-alerts
$ go install
$ consul-alerts start

Последняя команда может быть легко использована для переопределения портов по умолчанию для cons-alert, опции центра обработки данных, токена consul-acl и т. Д. Команду также можно записать, как указано ниже —

$ consul-alerts start --alert-addr = localhost:9000 --consul-addr = localhost:8500
--consul-dc = dc1 --consul-acl-token = ""

Второй метод предполагает использование пользователем Docker. Оба метода одинаково полезны в разных сценариях. Чтобы использовать Consul-alert через Docker, давайте извлечем изображение из Docker Hub с помощью следующей команды.

$ docker pull acaleph/consul-alerts

Консул-Alerts

В методе Docker мы можем рассмотреть следующие три варианта:

  • Использование Consul Agent, встроенного в сам контейнер.
  • Использование агента Консул, работающего над другим Docker-контейнером.
  • Использование Консул-оповещений для связи через удаленный экземпляр Консула.

Давайте теперь обсудим оба из них в деталях.

Использование Consul Agent, встроенного в сам контейнер

Давайте запустим консул агента с помощью следующей команды —

$ docker run -ti \
   --rm -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \  
   --entrypoint = /bin/consul \
   acaleph/consul-alerts \
   agent -data-dir /data -server -bootstrap -client = 0.0.0.0

Здесь мы переопределяем точку входа для Консула, как указано флагом —entrypoint . Наряду с этим мы загружаем клиента, упоминая порт, используемый с помощью флага -p, каталог данных / data с использованием флага -data-dir и client как 0.0.0.0.

Точка входа

В новом окне терминала, давайте запустим опцию consul-alerts.

$ docker exec -ti consul-alerts /bin/consul-alerts start --alertaddr = 0.0.0.0:9000
--log-level = info --watch-events --watch-checks

Здесь, на вышеуказанных шагах, мы выполняем консул-оповещения для запуска в интерактивном режиме. Порт адреса оповещения упоминается как 9000. Часы проверяют, включены ли агенты консула или нет, вместе с консулом проверяет.

Опция Оповещения

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

Использование агента Консул, работающего над другим Docker-контейнером

Здесь вы можете использовать любой тип образа консула для запуска через Docker Container. Используя изображение consul-alerts, мы можем легко связать контейнер консул с контейнером консул-предупреждений. Это делается с помощью флага —link .

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

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   --link consul:consul \
   acaleph/consul-alerts start \
   --consul-addr=consul:8500 \
   --log-level = info --watch-events --watch-checks

Использование Consul-оповещений для связи через удаленный экземпляр Consul

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

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   acaleph/consul-alerts start \
   --consul-addr = remote-consul-server.domain.tdl:8500 \
   --log-level = info --watch-events --watch-checks

Тестирование Jepsen

Jespen — это инструмент, написанный для проверки частичного допуска и работы в сети в любой системе. Он проверяет систему, создавая некоторые случайные операции в системе. Джепсен написан на Clojure . К сожалению, для демонстрации тестирование Jepsen требует огромного уровня формирования кластеров с системами баз данных и, следовательно, выходит за рамки, которые мы здесь рассмотрим.

Jepsen работает путем настройки тестируемого хранилища данных на пяти разных хостах. Он создает клиента для тестируемого хранилища данных, указывая каждый из пяти узлов для отправки запросов. Он также создает специальную серию клиентов, называемых «Немезида», которые создают хаос в кластере, например, обрезая связи между узлами с помощью iptables . Затем он выполняет одновременные запросы к различным узлам, поочередно разделяя и восстанавливая сеть.

В конце тестового прогона он лечит кластер, ожидает его восстановления и затем проверяет, соответствует ли промежуточное и конечное состояние системы ожидаемому. Некоторые выдержки были взяты отсюда .

Для получения дополнительной информации о Jepsen Testing, проверьте это здесь .

Многократный отказ кластера

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

Чтобы это произошло, мы рассмотрим проект, который поможет нам включить репликацию Consul из одного кластера в несколько кластеров. Проект предоставляет нам способ репликации пар K / V в нескольких центрах обработки данных Consul с использованием демона консула-репликации. Вы можете просмотреть этот проект Hashicorp по адресуhttps://github.com/hashicorp/consul-replicate . Некоторые из предварительных условий для испытания этого проекта включают в себя —

  • Golang
  • докер
  • консул
  • Гит

Давайте начнем со следующих команд —

Примечание. Перед запуском следующей команды убедитесь, что на вашем компьютере правильно установлен и настроен Git.

$ git clonehttps://github.com/hashicorp/consul-replicate.git

Вывод будет таким, как показано на следующем скриншоте.

Git Clone

$ cd consul-replicate
$ make

Вывод будет таким, как показано на следующем скриншоте.

копировать

Если у вас возникли проблемы со сборкой двоичного файла, вы также можете попробовать вручную извлечь образы Docker с помощью следующей команды:

$ docker pull library/golang:1.7.4

Вышеупомянутая команда создаст bin / consul-replicate, который может быть вызван как двоичный файл. В следующей таблице показан полный список подкоманд, которые он охватывает.

вариант Описание
авт Имя пользователя базовой аутентификации (и необязательный пароль), разделенные двоеточием. Там нет значения по умолчанию.
консул * Расположение экземпляра консула для запроса (может быть IP-адрес или полное доменное имя) с портом.
макс-несвежий Максимальная устаревание запроса. Если указано, Consule будет распределять работу по всем серверам, а не только по лидерам. Значение по умолчанию 0 (нет).
SSL Используйте HTTPS во время разговора с Консулом. Требует, чтобы потребительский сервер был настроен на безопасные соединения с сервером. Значение по умолчанию неверно.
SSL-проверить Проверяйте сертификаты при подключении через SSL. Это требует использования -ssl. Значение по умолчанию верно.
системный журнал Отправьте вывод журнала в syslog (в дополнение к stdout и stderr). Значение по умолчанию неверно
Syslog-объект Возможность использовать при отправке в системный журнал. Это требует использования -syslog. По умолчанию это МЕСТНОЕ
знак Консул API-токен. Там нет значения по умолчанию.
префикс * Префикс источника, включая префикс назначения с параметрами, разделенный двоеточием (:). Этот параметр является аддитивным и может указываться несколько раз для репликации нескольких префиксов.
исключать Префикс для исключения во время репликации. Этот параметр является аддитивным и может быть указан несколько раз для исключения нескольких префиксов.
Подождите Минимум (: максимум) для ожидания стабильности перед репликацией, разделенный двоеточием (:). Если необязательное максимальное значение опущено, предполагается, что оно в 4 раза превышает требуемое минимальное значение. Там нет значения по умолчанию.
повторить попытку Время ожидания, если Consule возвращает ошибку при взаимодействии с API. Значение по умолчанию составляет 5 секунд.
конфиг Путь к файлу конфигурации или каталогу файлов конфигурации на диске относительно текущего рабочего каталога. Значения, указанные в CLI, имеют приоритет над значениями, указанными в файле конфигурации. Там нет значения по умолчанию.
срубы уровень Уровень журнала для вывода. Это относится к ведению журнала stdout / stderr, а также к ведению журнала syslog (если возможно). Допустимые значения: «debug», «info», «warn» и «err». Значением по умолчанию является «warn».
один раз Запустите Consule Replicate один раз и выйдите (в отличие от поведения демона по умолчанию). (CLI-только)
версия Вывести информацию о версии и выйти. (CLI-только)

Снимки

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

  • Консул снимок сохранить
  • Консул снимок агента
  • Консул снимок осмотреть
  • Консул восстановление снимка

Давайте разберемся с каждым из них в деталях.

Консул Снимок Сохранить

Эта команда настроена на получение атомарного моментального снимка состояния серверов Consul на момент времени, который включает в себя записи ключей / значений, каталог услуг, подготовленные запросы, сеансы и ACL. Снимок сохраняется в указанном имени файла.

$ consul snapshot save <name-of-the-file>.snap

Вывод будет таким, как показано на следующем скриншоте.

Снимок Сохранить

Чтобы проверить наличие файла в текущем каталоге, проверьте его, запустив в текущем каталоге. В случае узла без лидера, пожалуйста, выполните следующую команду —

$ consul snapshot save -stale <name-of-file>.snap

Консул Агент Снимков

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

Агент моментальных снимков

Консул Снимок Осмотреть

Он используется для проверки моментального снимка состояния серверов Consul, который включает в себя записи ключа / значения, каталог услуг, подготовленные запросы, сеансы и ACL. Команда может быть выполнена следующим образом —

Примечание. Помните, что следующую команду можно выполнить только в каталоге, где сохранен снимок.

$ consul snapshot save <name-of-the-file>.snap

Вывод будет таким, как показано на следующем скриншоте.

Снимок Осмотреть

Консул Восстановление Снимка

Команда восстановления моментального снимка используется для восстановления моментального снимка состояния серверов Consul, который включает записи ключа / значения, каталог услуг, подготовленные запросы, сеансы и списки ACL. Снимок считывается из сохраненного файла резервной копии.

Примечание. Помните, что следующую команду можно выполнить только в каталоге, в котором сохранен снимок.

$ consul snapshot restore <name-of-the-file>.snap

Вывод будет таким, как показано на следующем скриншоте.

Восстановление снимка

Если вы работаете в Консуле с AWS, этот проект может помочь вам сэкономить время — https://github.com/pshima/consul-snapshot .