Как настроить Консул в производственной среде на Ubuntu 14.04

Вступление

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

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

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

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

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

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

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

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

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

Hostname IP Address Role

server1.example.com

192.0.2.1

bootstrap consul server

server2.example.com

192.0.2.2

consul server

server3.example.com

192.0.2.3

consul server

agent1.example.com

192.0.2.50

consul client

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

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

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

Если вы еще не установили консул в ссылке: [первоначальное введение в руководство консула], вам придется сделать это сейчас. Мы будем устанавливать консул в качестве приложения системного уровня на каждой из четырех конфигурируемых машин.

Прежде чем мы заглянем в консул приложение, нам нужно получить + unzip +, чтобы извлечь исполняемый файл. Обновите кеш пакета локальных систем, а затем установите пакет с помощью + apt +:

apt-get update
apt-get install unzip

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

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

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

cd /usr/local/bin
wget

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

unzip *.zip
rm *.zip

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

Создайте необходимый каталог и структуру системы

Мы можем легко опробовать консул неструктурированным способом с помощью команды + consul +. Это позволит вам проверить некоторые функции. Мы сделали это в последнем руководстве, чтобы ознакомиться с программным обеспечением.

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

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

Создайте пользователя сейчас, набрав:

adduser consul

Вы можете пропустить все запросы (Вы можете установить пароль. Будет жаловаться иначе) если хотите.

Далее мы создадим иерархию конфигурации, в которой будут находиться различные конфигурации, которые мы будем использовать, в зависимости от того, как мы хотим запустить службу. Чтобы сделать это проще, мы создадим родительский каталог + consul.d + в структуре конфигурации + / etc + и поместим подкаталоги с именами + bootstrap +, + server + и + client + в каждой системе :

mkdir -p /etc/consul.d/{bootstrap,server,client}

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

Нам также нужно создать место, где консул может хранить постоянные данные между перезагрузками. Для этого мы создадим каталог в + / var / consul + и передадим его пользователю + consul +, чтобы он мог управлять данными:

mkdir /var/consul
chown consul:consul /var/consul

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

Создание конфигурации начальной загрузки

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

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

Файлы конфигурации хранятся в простом формате JSON, поэтому ими довольно легко управлять. Создайте первый файл в подкаталоге + bootstrap +:

nano /etc/consul.d/bootstrap/config.json

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

{
   "bootstrap": true,
   "server": true
}

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

Мы также можем передать каталог данных, который мы создали в + / var / consul +. Консул будет использовать это для хранения информации о состоянии кластера:

{
   "bootstrap": true,
   "server": true,
   "datacenter": "nyc2",
   "data_dir": "/var/consul"
}

Далее, мы хотим внедрить некоторое шифрование в шепот протокол, который использует консул. Он имеет эту функциональность, встроенную с использованием общей секретной системы. Секрет должен быть 16-битной строкой в ​​кодировке base-64. Чтобы получить значение, соответствующее этому значению, мы временно выйдем из файла.

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

consul keygen

Скопируйте сгенерированное значение и заново откройте файл конфигурации:

nano /etc/consul.d/bootstrap/config.json

Используйте скопированную строку в качестве значения параметра + encrypt +:

{
   "bootstrap": true,
   "server": true,
   "datacenter": "nyc2",
   "data_dir": "/var/consul",
   "encrypt": ""
}

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

{
   "bootstrap": true,
   "server": true,
   "datacenter": "nyc2",
   "data_dir": "/var/consul",
   "encrypt": "X4SYOinf2pTAcAHRhpj7dA==",
   "log_level": "INFO",
   "enable_syslog": true
}

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

Создание обычной конфигурации сервера

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

Начните с копирования файла начальной загрузки из + server1 + в подкаталог сервера на этом компьютере для редактирования:

cp /etc/consul.d/bootstrap/config.json /etc/consul.d/server

Откройте файл, чтобы внести необходимые изменения:

nano /etc/consul.d/server/config.json

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

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

{
   "bootstrap": ,
   "server": true,
   "datacenter": "nyc2",
   "data_dir": "/var/consul",
   "encrypt": "X4SYOinf2pTAcAHRhpj7dA==",
   "log_level": "INFO",
   "enable_syslog": true,
   "start_join": ["", ""]
}

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

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

Вам следует скопировать содержимое этого файла конфигурации на другие машины, которые будут действовать как ваши консул-серверы. Поместите их в файл по адресу + / etc / consul.d / server / config.json +, как вы это делали на первом хосте.

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

{
   "bootstrap": false,
   "server": true,
   "datacenter": "nyc2",
   "data_dir": "/var/consul",
   "encrypt": "X4SYOinf2pTAcAHRhpj7dA==",
   "log_level": "INFO",
   "enable_syslog": true,
   "start_join": ["", "192.0.2.3"]
}

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

Создание конфигурации клиента

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

Откройте файл конфигурации в подкаталоге клиента на клиентском компьютере:

nano /etc/consul.d/client/config.json

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

Мы начнем с удаления любого упоминания параметра + bootstrap +, поскольку это относится только к конфигурации сервера, и изменения параметра + server + на false.

Далее мы добавим параметр, указывающий местоположение каталога веб-интерфейса. Через некоторое время мы получим необходимые для этого файлы. Место, где они будут проживать, это + / home / consul / dist +.

Наконец, мы хотим настроить параметр + start_join +, чтобы получить список всех наших серверов:

{
   "server": ,
   "datacenter": "nyc2",
   "data_dir": "/var/consul",

   "encrypt": "X4SYOinf2pTAcAHRhpj7dA==",
   "log_level": "INFO",
   "enable_syslog": true,
   "start_join": ["", "", ""]
}

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

Загрузка файлов веб-интерфейса

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

На веб-сайте консула щелкните правой кнопкой мыши ссылку на веб-интерфейс consul и выберите «Копировать местоположение ссылки» или любой другой подобный вариант, который у вас есть.

На клиенте используйте + su +, чтобы стать пользователем + + consul + . Мы собираемся настроить веб-каталог в домашнем каталоге пользователя `+ consul +.

su consul
cd ~

Теперь введите + wget +, затем пробел и вставьте ссылку, которую вы скопировали для загрузки веб-интерфейса. На момент написания статьи это будет выглядеть так:

wget

Разархивируйте загруженный файл и удалите zip-файл:

unzip *.zip
rm *.zip

Это создаст каталог с именем + dist + в вашем домашнем каталоге. Это каталог, на который мы указали параметр веб-интерфейса в файле конфигурации.

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

exit

Создать сценарий Upstart

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

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

Наш скрипт выскочки будет похож на наших серверах и на клиенте. На одном из серверов консула создайте файл в каталоге + / etc / init + для хранения конфигурации консула:

nano /etc/init/consul.conf

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

description "Consul server process"

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

Мы также хотим указать, когда процесс должен остановиться. Используя standard Уровни запуска Linux, мы можем сказать ему остановить процесс, когда он не находится в одном из нормальных режимов работы (остановить процесс при остановке или перезагрузке сервер):

description "Consul server process"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

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

description "Consul server process"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

respawn

setuid consul
setgid consul

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

description "Consul server process"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

respawn

setuid consul
setgid consul

exec consul agent -config-dir /etc/consul.d/server

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

Скопируйте содержимое этого файла в файл с именем + / etc / init / consul.conf + на каждом из ваших серверов и на клиенте.

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

Конечный файл должен выглядеть примерно так:

description "Consul  process"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

respawn

setuid consul
setgid consul

exec consul agent -config-dir /etc/consul.d/

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

Начало кластера

Теперь у нас есть все для быстрого запуска и работы консула. Процесс относительно прост.

На сервере, который содержит файл конфигурации начальной загрузки (в нашем случае), используйте + su +, чтобы ненадолго перейти к пользователю консула. Затем мы можем вызвать консул и передать каталог начальной загрузки в качестве аргумента:

su consul
consul agent -config-dir /etc/consul.d/bootstrap

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

На других ваших серверах консула, от имени root, запустите консул сервис, который мы только что создали с помощью сценария upstart, набрав:

start consul

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

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

Чтобы сделать это, нажмите + CTRL-C + в терминале загрузочного сервера:

CTRL-C

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

exit
start consul

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

Теперь, когда кластер полностью работает, клиентские машины могут подключаться. На клиентском компьютере выполните ту же процедуру, что и root:

start consul

Клиент подключится к кластеру как клиент. Вы можете увидеть участников кластера (серверы и клиенты), спросив консула о его членах на любом из компьютеров:

consul members
Node     Address             Status  Type    Build  Protocol
server3  192.0.2.3:8301  alive   server  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
agent1   192.0.2.50:8301    alive   client  0.3.0  2

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

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

Чтобы получить доступ к веб-интерфейсу, мы создадим SSH-туннель к клиентскому компьютеру, на котором хранятся файлы интерфейса. Консул обслуживает HTTP-интерфейс на порту 8500. Мы туннелируем наш локальный порт 8500 на порт 8500 клиентского компьютера. На локальном компьютере введите:

ssh -N -f -L 8500:localhost:8500 root@

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

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

http://localhost:8500

Это даст вам страницу веб-интерфейса по умолчанию:

изображение: https: //assets.digitalocean.com/articles/consul_intro/consul_default.png [целевая страница веб-интерфейса Consul]

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

Когда вы закончите использовать веб-интерфейс, вы можете закрыть SSH-туннель. Найдите номер pid процесса, используя команду + ps + и + grep +, чтобы найти номер порта, который мы перенаправили:

ps aux | grep 8500
1001        0.0  0.0  43900  1108 ?        Ss   12:03   0:00 ssh -N -f -L 8500:localhost:8500 [email protected]
1001      5309  0.0  0.0  13644   948 pts/7    S+   12:12   0:00 grep --colour=auto 8500

Выделенный номер в выводе выше (в строке, содержащей команду туннелирования, которую мы использовали) - это номер pid, который мы ищем. Затем мы можем передать это команде + kill +, чтобы закрыть туннель:

kill

Заключение

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

Несмотря на то, что у нас теперь настроена наша консалтинговая среда, которая позволяет нам легко управлять нашими услугами, мы еще не полностью обеспечили нашу связь. В next гид мы сосредоточимся на том, как настроить Проверка сертификата SSL для шифрования и проверки RPC-сообщений наших участников.

Related