Введение в использование Consul, системы обнаружения сервисов, в Ubuntu 14.04

Вступление

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

Консул предоставляет множество различных функций, которые используются для предоставления согласованной и доступной информации о вашей инфраструктуре. Это включает в себя механизмы обнаружения служб и узлов, систему маркировки, проверки работоспособности, процедуры выбора на основе консенсуса, общесистемное хранение ключей / значений и многое другое. Используя консул в своей организации, вы можете легко внедрить сложный уровень осведомленности в свои приложения и услуги.

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

Предпосылки и цели

В этом руководстве мы познакомимся с использованием консулов ​​для построения системы обнаружения и настройки служб для вашей инфраструктуры.

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

Для целей данного руководства и всей этой серии мы будем настраивать 4 компьютера. Первые три будутconsul servers, как описано выше. Последним будетconsul agent, который действует как клиент и может использоваться для запроса информации о системе.

Чтобы реализовать некоторые механизмы безопасности на более позднем этапе, нам нужно назвать все наши машины в одном домене. Это сделано для того, чтобы в будущем мы могли использовать SSL-сертификат с подстановочными знаками.

Детали наших машин здесь:

Hostname Айпи адрес Role

server1.example.com

192.0.2.1

сервер консула начальной загрузки

server2.example.com

192.0.2.2

консул сервер

server3.example.com

192.0.2.3

консул сервер

agent1.example.com

192.0.2.50

консул-клиент

Для этой демонстрации мы будем использовать 64-битные серверы Ubuntu 14.04, но любой современный сервер Linux должен работать одинаково хорошо.

Загрузка и установка Консул

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

Прежде чем мы заглянем в приложение consul, нам нужно получитьunzip для извлечения исполняемого файла. Мы также будем использовать приложениеscreen, чтобы позволить нам легко проводить несколько сеансов в одном окне терминала. Это полезно для нашего вступления, так как консул обычно занимает весь экран, когда не запускается как служба.

Обновите кеш пакетов локальной системы, а затем установите пакет с помощьюapt:

apt-get update
apt-get install unzip screen

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

screen

Нажмите ввод, если вы получаете сообщение об авторских правах. Вы попадете обратно в окно терминала, но теперь вы находитесь внутри сеанса экрана.

Теперь мы можем получить программу консула. consul project’s page предоставляет ссылки для загрузки двоичных пакетов для Windows, OS X и Linux.

Перейдите на страницу выше и щелкните правой кнопкой мыши по операционной системе и архитектуре, которая представляет ваши серверы. В этом руководстве, поскольку мы используем 64-разрядные серверы, мы будем использовать ссылку «amd64» в разделе «linux». Выберите «Копировать ссылку» или любой другой аналогичный вариант, который предоставляет ваш браузер.

В вашем терминале перейдите в каталог/usr/local/bin, где мы будем хранить исполняемый файл. Введитеwget и пробел, а затем вставьте URL-адрес, который вы скопировали с сайта:

cd /usr/local/bin
wget https://dl.bintray.com/mitchellh/consul/0.3.0_linux_amd64.zip

Теперь мы можем извлечь двоичный пакет с помощью командыunzip, которую мы установили ранее. Затем мы можем удалить заархивированный файл:

unzip *.zip
rm *.zip

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

Запуск сервера начальной загрузки

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

Первое, что нам нужно сделать, это запустить программу consul на одном из наших серверов в режимеserver иbootstrap. Режим сервера означает, что консул будет запускаться как экземпляр сервера, а не как клиент. Опция начальной загрузки используется для первого сервера. Это позволяет ему назначать себя «лидером» для кластера без выборов (поскольку он будет единственным доступным сервером).

В таблице, в которой указаны наши хосты, мы обозначили нашserver1 как сервер начальной загрузки. На сервере server1 запустите экземпляр начальной загрузки, набрав:

consul agent -server -bootstrap -data-dir /tmp/consul

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

. . .
2014/07/07 14:32:15 [ERR] agent: failed to sync remote state: No cluster leader
2014/07/07 14:32:17 [WARN] raft: Heartbeat timeout reached, starting election
2014/07/07 14:32:17 [INFO] raft: Node at 192.0.2.1:8300 [Candidate] entering Candidate state
2014/07/07 14:32:17 [INFO] raft: Election won. Tally: 1
2014/07/07 14:32:17 [INFO] raft: Node at 192.0.2.1:8300 [Leader] entering Leader state
2014/07/07 14:32:17 [INFO] consul: cluster leadership acquired
2014/07/07 14:32:17 [INFO] consul: New leader elected: server1.example.com
2014/07/07 14:32:17 [INFO] consul: member 'server1.example.com' joined, marking health alive

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

Запуск других серверов

Наserver2 иserver3 теперь мы можем запустить службу consulwithout как параметр начальной загрузки, набрав:

consul agent -server -data-dir /tmp/consul

Для этих серверов вы также увидите записи в журнале. К концу вы увидите такие сообщения:

. . .
2014/07/07 14:37:25 [ERR] agent: failed to sync remote state: No cluster leader
2014/07/07 14:37:27 [WARN] raft: EnableSingleNode disabled, and no known peers. Aborting election.
2014/07/07 14:37:53 [ERR] agent: failed to sync remote state: No cluster leader

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

Чтобы соединиться друг с другом, нам нужно соединить эти серверы друг с другом. Это можно сделать в любом направлении, но самый простой - с помощью нашей машиныserver1.

Поскольку мы запускаем консул-сервер в текущем окне терминалаserver1, нам придется создать еще один терминал сscreen, чтобы выполнить дополнительную работу. Создайте новое окно терминала в существующем сеансе экранаserver1, набрав:

CTRL-A C

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

CTRL-A N

Вернувшись в свой новый терминал, присоединитесь к двум другим экземплярам, ​​указав их IP-адреса следующим образом:

consul join 192.0.2.2 192.0.2.3

Это должно немедленно объединить все три сервера в один кластер. Вы можете проверить это дважды, набрав:

consul members
Node                 Address             Status  Type    Build  Protocol
server1.example.com  192.0.2.1:8301  alive   server  0.3.0  2
server2.example.com  192.0.2.2:8301  alive   server  0.3.0  2
server3.example.com  192.0.2.3:8301  alive   server  0.3.0  2

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

Удаление сервера начальной загрузки и повторное присоединение в качестве обычного сервера

Все три наших сервера объединены в кластер, но мы еще не закончили.

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

Для этого нам нужно остановить службу консула наserver1. Это позволит оставшимся машинам выбрать нового лидера. Затем мы можем перезапустить службу consul наserver1 без опции начальной загрузки и снова присоединиться к кластеру.

На сервере 1 вернитесь к терминалу с консулом:

CTRL-A N

Остановите службу, набрав:

CTRL-C

Теперь перезапустите сервис без опции начальной загрузки:

consul agent -server -data-dir /tmp/consul

Вернитесь к открытому терминалу и присоединитесь к кластеру, подключившись к одному из двух серверов в кластере:

CTRL-A N
consul join 192.0.2.2

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

Присоединение к кластеру в качестве клиента и обслуживание веб-интерфейса

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

Мы собираемся разместить веб-интерфейс консула на нашем клиентском компьютере, чтобы мы могли взаимодействовать с кластером и отслеживать его работоспособность. Для этогоvisit the download page for the web UI. Щелкните правой кнопкой мыши по кнопке загрузки и выберите «Копировать местоположение ссылки» или любой другой подобный вариант, который у вас есть.

На вашем клиентском компьютере перейдите в домашний каталог. Введитеwget и пробел, а затем вставьте URL-адрес, который вы скопировали со страницы:

cd ~
wget https://dl.bintray.com/mitchellh/consul/0.3.0_web_ui.zip

Когда загрузка будет завершена, разархивируйте и удалите архив:

unzip *.zip
rm *.zip

Будет каталог с именемdist, содержащий все файлы, необходимые для визуализации веб-интерфейса консула. Нам просто нужно указать этот каталог, когда мы подключаемся к кластеру.

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

Мы не будем использовать флагserver, так как хотим работать в клиентском режиме. По умолчанию клиентский интерфейс каждого узла доступен через локальный петлевой интерфейс. Поскольку мы хотим получить удаленный доступ к веб-интерфейсу, вместо этого мы должны указать публичный IP-адрес клиента.

Нам нужно будет указать консула каталог, в котором находится веб-интерфейс, чтобы обслуживать этот контент. Кроме того, мы собираемся сразу присоединиться к кластеру, передав IP-адрес одного из серверов в кластере. Это позволит нам избежать необходимости присоединяться впоследствии. Мы могли бы сделать это и раньше на примере сервера.

В конце концов, наша команда подключения довольно длинная. Это будет выглядеть так:

consul agent -data-dir /tmp/consul -client 192.0.2.50 -ui-dir /home/your_user/dir -join 192.0.2.1

Это подключит наш клиентский компьютер к кластеру как обычный, не серверный агент. Этот агент будет отвечать на запросы по своему общедоступному IP-адресу вместо обычного интерфейса127.0.0.1. Из-за этого вам нужно будет добавить дополнительный флаг к любым командам consul, указавrpc-addr.

Например, если вы хотите запросить список участников у клиента, вам нужно будет сделать это, указав альтернативный интерфейс и выбранный вами порт:

consul members -rpc-addr=192.0.2.50:8400
Node     Address             Status  Type    Build  Protocol
agent1   192.0.2.50:8301    alive   client  0.3.0  2
server2  192.0.2.2:8301  alive   server  0.3.0  2
server1  192.0.2.1:8301  alive   server  0.3.0  2
server3  192.0.2.3:8301  alive   server  0.3.0  2

Это может показаться хлопотным, но дает нам возможность получить доступ к веб-интерфейсу консула. Вы можете попасть в веб-интерфейс, посетив IP-адрес своего клиента, а затем указав:8500/ui в своем браузере:

http://192.0.2.50:8500/ui

Основной интерфейс будет выглядеть так:

Consul web UI landing page

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

Добавление услуг и проверок

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

Служба связана с узлом, который содержит определение службы. Поэтому, если у нас есть веб-сервер, мы должны установить консул на этом сервере и создать там файл определения сервиса.

Для наших целей мы установим Nginx на нашем клиенте, чтобы продемонстрировать это. Убейте текущий сеанс клиента, набрав:

CTRL-C

Установите Nginx на клиенте, набрав:

apt-get install nginx

Теперь мы можем создать каталог конфигурации для хранения определений наших сервисов:

mkdir ~/services

Внутри этого каталога мы создадим файл JSON, который описывает наш веб-сервис. Назовем этоweb.json:

nano ~/services/web.json

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

Основная схема выглядит следующим образом:

{
    "service": {
        . . .
        "check": {
            . . .
        }
    }
}

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

Для нашего примера это выглядит так:

{
    "service": {
        "name": "web server",
        "port": 80,
        "tags": ["nginx", "demonstration"],
        "check": {
            . . .
        }
    }
}

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

Для нашего сервиса мы реализуем простой веб-запрос сcurl в качестве списка проекта consul вits own documentation. На самом деле нам не нужно знать, что curl может извлечь, мы заботимся только о том, была ли команда выполнена без ошибок. Из-за этого мы можем выбросить любой вывод.

Нам также нужно установить интервал, через который будет выполняться проверка. Это всегда компромисс между производительностью и актуальной информацией. Мы будем использовать 10 секунд, так как хотим относительно скоро узнать, что-то не так:

{
    "service": {
        "name": "web server",
        "port": 80,
        "tags": ["nginx", "demonstration"],
        "check": {
            "script": "curl localhost:80 > /dev/null 2>&1",
            "interval": "10s"
        }
    }
}

Сохраните и закройте файл, когда вы закончите.

Теперь мы можем просто перезапустить сеанс консула клиента и указать на этот каталог с определениями службы:

consul agent -data-dir /tmp/consul -client 192.0.2.50 -ui-dir /home/your_user/dist -join 192.0.2.1 -config-dir /home/your_user/services

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

Consul intro service

Вернувшись на свой клиент, вы можете создать новый терминал и временно остановить веб-сервер:

CTRL-A C
service nginx stop

Когда вы обновляете веб-интерфейс, вы видите, что проверка веб-службы теперь не выполняется, как и ожидалось:

Consul intro failed service

Это показывает, что наша проверка здоровья работает, как ожидалось.

Заключение

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

Вnext guide мы расскажем, как использовать consul в производственной среде. Мы поместим все наши детали конфигурации в файлы для удобства пользования и создадим сценарии запуска для запуска службы при загрузке.

Related