Как настроить готовый к работе мезосферный кластер в Ubuntu 14.04

Вступление

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

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

Для этого руководства мы будем использовать серверы Ubuntu 14.04.

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

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

В этом уроке мы будем использовать шесть серверов Ubuntu. Это соответствует рекомендации Apache Mesos о наличии как минимум трех мастеров для производственной среды. Он также предоставляет пул из трех рабочих или подчиненных серверов, которым будет назначена работа при отправке задач в кластер.

Шесть серверов, которые мы будем использовать, будут использовать + zookeeper + для отслеживания текущего лидера главных серверов. Слой Mesos, построенный поверх этого, обеспечит распределенную синхронизацию и обработку ресурсов. Он отвечает за управление кластером. Marathon, распределенная система инициализации кластера, используется для планирования задач и ручной работы на подчиненных серверах.

Ради этого руководства мы будем предполагать, что наши машины имеют следующую конфигурацию:

Hostname Function IP Address

master1

Mesos master

192.0.2.1

master2

Mesos master

192.0.2.2

master3

Mesos master

192.0.2.3

slave1

Mesos slave

192.0.2.51

slave2

Mesos slave

192.0.2.52

slave3

Mesos slave

192.0.2.53

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

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

Установите Месосферу на серверы

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

Добавьте хранилища мезосферы к своим хостам

На * всех * хостах (master и slave) выполните следующие шаги.

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

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
CODENAME=$(lsb_release -cs)
echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" | sudo tee /etc/apt/sources.list.d/mesosphere.list

Установите необходимые компоненты

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

sudo apt-get -y update

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

Для ваших * master * хостов вам нужен метапакет + mesosphere +. Это включает в себя приложения + zookeeper +, + mesos +, + marathon + и + chronos +:

sudo apt-get install mesosphere

Для ваших * slave * хостов вам нужен только пакет + mesos +, который также использует + zookeeper + в качестве зависимости:

sudo apt-get install mesos

Настройте информацию о соединении Zookeeper для Mesos

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

Наши главные серверы будут единственными членами нашего кластера + zookeeper +, но всем нашим серверам потребуется некоторая конфигурация для связи с использованием протокола. Файл, который определяет это, является + / etc / mesos / zk +.

На всех ваших хостах выполните следующий шаг. Откройте файл с правами root:

sudo nano /etc/mesos/zk

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

zk://localhost:2181/mesos

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

Для нашего руководства наши мастера имеют IP-адреса + 192.0.2.1 +, + 192.168.2.2 + и + 192.168.2.3 +. Используя эти значения, наш файл будет выглядеть так:

zk://:2181,:2181,:2181/mesos

Строка должна начинаться с + zk: // + и заканчиваться + / mesos +. Между ними указываются IP-адреса ваших главных серверов и порты + zookeeper + (по умолчанию + 2181 +).

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

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

Настройте конфигурацию главного сервера Zookeeper

На ваших * главных * серверах нам потребуется выполнить дополнительную настройку + zookeeper +.

Первым шагом является определение уникального идентификационного номера от 1 до 255 для каждого из ваших главных серверов. Это хранится в файле + / etc / zookeeper / conf / myid +. Откройте его сейчас:

sudo nano /etc/zookeeper/conf/myid

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

Наш первый сервер просто будет иметь это в файле:

1

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

Затем нам нужно изменить ваш конфигурационный файл + zookeeper, чтобы сопоставить наш идентификатор` + zookeeper` с реальными хостами. Это гарантирует, что служба может правильно разрешить каждый хост из системы ID, которую она использует.

Откройте файл конфигурации + zookeeper + сейчас:

sudo nano /etc/zookeeper/conf/zoo.cfg

В этом файле вам нужно сопоставить каждый идентификатор хосту. Спецификация хоста будет включать в себя два порта: первый для связи с лидером, а второй для обработки выборов, когда требуется новый лидер. Серверы «+ zookeeper +» идентифицируются как «сервер», за которым следуют точка и их идентификационный номер.

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

server.=:2888:3888
server.=:2888:3888
server.=:2888:3888

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

На этом настройка нашего + zookeeper + завершена. Мы можем начать сосредотачиваться на Мезосе и Марафоне.

Настройте Mesos на главных серверах

Далее мы настроим Mesos на трех главных серверах. Эти шаги должны быть предприняты на каждом из ваших главных серверов.

Измените Кворум, чтобы отразить размер вашего кластера

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

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

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

Откройте файл конфигурации кворума:

sudo nano /etc/mesos-master/quorum

Измените значение на «2»:

2

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

Настройте имя хоста и IP-адрес

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

Для наших главных серверов IP-адрес должен быть помещен в эти файлы:

  • / И т.д. / Mesos-мастер / IP

  • / И т.д. / Mesos-мастер / имя хоста

Сначала добавьте индивидуальный IP-адрес каждого главного узла в файл + / etc / mesos-master / ip +. Не забудьте изменить это для каждого сервера, чтобы соответствовать соответствующему значению:

echo  | sudo tee /etc/mesos-master/ip

Теперь мы можем скопировать это значение в файл имени хоста:

sudo cp /etc/mesos-master/ip /etc/mesos-master/hostname

Сделайте это на каждом из ваших главных серверов.

Настройте марафон на главных серверах

Теперь, когда Mesos настроен, мы можем настроить Marathon, реализацию кластерной системы инициализации Mesosphere.

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

Во-первых, нам нужно снова установить имя хоста для каждого экземпляра Marathon на сервере. Опять же, мы будем использовать IP-адрес, который у нас уже есть в файле. Мы можем скопировать это в нужное нам местоположение файла.

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

sudo mkdir -p /etc/marathon/conf
sudo cp /etc/mesos-master/hostname /etc/marathon/conf

Далее нам нужно определить список мастеров + zookeeper +, к которым Marathon будет подключаться для получения информации и планирования. Это та же строка соединения + zookeeper +, которую мы использовали для Mesos, поэтому мы можем просто скопировать файл. Нам нужно поместить его в файл с именем + master +:

sudo cp /etc/mesos/zk /etc/marathon/conf/master

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

Сначала скопируйте файл в папку Zookeeper Marathon:

sudo cp /etc/marathon/conf/master /etc/marathon/conf/zk

Далее откройте файл в вашем редакторе:

sudo nano /etc/marathon/conf/zk

Единственная часть, которую мы должны изменить в этом файле - это конечная точка. Мы изменим его с + / mesos на` + / marathon`:

zk://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3:2181/

Это все, что нам нужно сделать для нашей конфигурации Marathon.

Настройте правила инициализации службы и перезапустите службы

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

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

sudo stop mesos-slave
echo manual | sudo tee /etc/init/mesos-slave.override

Теперь все, что нам нужно сделать, это перезапустить + zookeeper +, который установит наши главные выборы. Затем мы можем запустить наш мастер Mesos и процессы Marathon:

sudo restart zookeeper
sudo start mesos-master
sudo start marathon

Чтобы получить максимум от того, что вы только что настроили, посетите один из ваших главных серверов в веб-браузере по порту + 5050 +:

http://:5050

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

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/mesos_main.png [основной интерфейс Mesos]

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

Мы также настроили Marathon, долгосрочный контроллер задач Mesosphere. Это будет доступно в порту + 8080 + на любом из ваших мастеров:

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/marathon_main.png [основной интерфейс марафона]

Мы кратко рассмотрим, как использовать эти интерфейсы, как только мы настроим наших подчиненных.

Настройте подчиненные серверы

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

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

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

sudo stop zookeeper
echo manual | sudo tee /etc/init/zookeeper.override

Затем мы хотим создать еще один файл переопределения, чтобы убедиться, что основной процесс Mesos не запускается на наших подчиненных серверах. Мы также позаботимся о том, чтобы он был остановлен в данный момент (эта команда может завершиться ошибкой, если процесс уже остановлен Это не проблема):

echo manual | sudo tee /etc/init/mesos-master.override
sudo stop mesos-master

Далее нам нужно установить IP-адрес и имя хоста, как мы это делали для наших главных серверов. Это включает помещение IP-адреса каждого узла в файл, на этот раз в каталоге + / etc / mesos-slave +. Мы также будем использовать это как имя хоста для легкого доступа к сервисам через веб-интерфейс:

echo  | sudo tee /etc/mesos-slave/ip
sudo cp /etc/mesos-slave/ip /etc/mesos-slave/hostname

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

Теперь у нас есть все, что нужно для запуска наших рабов в Месосе. Нам просто нужно включить сервис:

sudo start mesos-slave

Сделайте это на каждой из ваших ведомых машин.

Чтобы увидеть, успешно ли ваши ведомые устройства регистрируются в вашем кластере, вернитесь на один из ваших главных серверов через порт + 5050 +:

http://:5050

Вы должны увидеть количество активных подчиненных в «3» теперь в интерфейсе:

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/three_slaves.png [Месос трех рабов]

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

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/resources.png [ресурсы Mesos]

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

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/slaves_page.png [страница Mesos slaves]

Запуск Сервисов на Мезосе и Марафоне

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

Вы можете добавить сервисы и задачи в Marathon несколькими различными способами. Мы будем покрывать только основные услуги. Контейнеры Docker будут рассмотрены в будущем руководстве.

Запуск службы через веб-интерфейс

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

Сначала посетите веб-интерфейс Marathon на одном из главных серверов. Помните, что интерфейс Marathon находится на порту + 8080 +:

http://:8080

Отсюда вы можете нажать кнопку «Новое приложение» в правом верхнем углу. Появится наложение, где вы можете добавить информацию о вашем новом приложении:

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/marathon_new_app.png [новое приложение марафона]

Заполните поля с требованиями для вашего приложения. Единственные поля, которые являются обязательными:

  • * ID *: уникальный идентификатор, выбранный пользователем для идентификации процесса. Это может быть что угодно, но должно быть уникальным.

  • * Command *: это фактическая команда, которая будет выполняться Marathon. Это процесс, который будет отслеживаться и перезапускаться в случае сбоя.

Используя эту информацию, вы можете настроить простой сервис, который просто печатает «привет» и спит в течение 10 секунд. Мы назовем это «привет»:

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/simple_app.png [простое приложение Marathon]

Когда вы вернетесь к интерфейсу, сервис перейдет от «Развертывание» к «Запуск»:

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/running.png [Запуск приложения марафона]

Каждые 10 секунд или около того показание «Задачи / Экземпляры» будет изменяться от «1/1» до «0/1» по мере того, как количество переходов в спящий режим и обслуживание прекращается. Затем Marathon автоматически перезапускает задачу снова. Мы можем увидеть этот процесс более четко в веб-интерфейсе Mesos на порту + 5050 +:

http://:5050

Здесь вы можете увидеть, как процесс завершается и перезапускается:

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/restart_task.png [Задача перезапуска Mesos]

Если вы нажмете «Sandbox», а затем «stdout» в любой из задач, вы увидите вывод «hello»:

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/output.png [вывод Mesos]

Запуск Сервиса через API

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

Это относительно простой процесс. Опять же, единственными обязательными полями являются + id + для идентификатора процесса и + cmd +, который содержит фактическую команду для запуска.

Таким образом, мы могли бы создать файл JSON с именем + hello.json + с этой информацией:

nano hello.json

Внутри минимальная спецификация будет выглядеть так:

{
   "id": "hello2",
   "cmd": "echo hello; sleep 10"
}

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

{
   "id": "hello2",
   "cmd": "echo hello; sleep 10",
   "mem": 16,
   "cpus": 0.1,
   "instances": 1,
   "disk": 0.0,
   "ports": [0]
}

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

Далее мы можем отправить его с помощью Marathon API. Цель - один из сервисов Marathon нашего мастера в порту + 8080 +, а конечной точкой является + / v2 / apps +. Полезные данные - это наш JSON-файл, который мы можем прочитать в + curl +, используя флаг + -d + с флагом + @ + для обозначения файла.

Команда для отправки будет выглядеть так:

curl -i -H 'Content-Type: application/json' [email protected] :8080/v2/apps

Если мы посмотрим на интерфейс Marathon, то увидим, что он был успешно добавлен. Кажется, он обладает теми же свойствами, что и наш первый сервис:

изображение: https: //assets.digitalocean.com/articles/mesos_cluster/two_services.png [Марафон двух сервисов]

Доступ к новой услуге можно отслеживать точно так же, как и к первой услуге.

Заключение

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

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

Related