Поиск по сайту:

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


Введение

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

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

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

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

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

В этом руководстве мы будем использовать шесть серверов 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 с актуальными пакетами, которые легко установить.

Добавьте репозитории Mesosphere на свои хосты

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

Сначала добавьте репозиторий 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

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

Для главных хостов вам понадобится метапакет mesosphere. Сюда входят приложения zookeeper, mesos, marathon и chronos:

sudo apt-get install mesosphere

Для подчиненных хостов вам нужен только пакет 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://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3: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 с реальными хостами. Это гарантирует, что служба сможет правильно разрешить каждый хост из системы идентификаторов, которую она использует.

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

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

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

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

server.1=192.168.2.1:2888:3888
server.2=192.168.2.2:2888:3888
server.3=192.168.2.3:2888:3888

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

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

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

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

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

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

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

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

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

sudo nano /etc/mesos-master/quorum

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

2

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

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

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

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

  • /etc/mesos-master/ip
  • /etc/mesos-master/имя хоста

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

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

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

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

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

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

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

Marathon будет работать на каждом из наших главных хостов, но только ведущий главный сервер сможет планировать задания. Другие экземпляры 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 в качестве основы и просто изменим конечную точку.

Сначала скопируйте файл в расположение зоопарка 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

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

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

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

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

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

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

sudo restart zookeeper
sudo start mesos-master
sudo start marathon

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

http://192.168.2.1:5050

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

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

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

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

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

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

Мы уже настроили наши ведомые устройства с информацией о соединении 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 192.168.2.51 | sudo tee /etc/mesos-slave/ip
sudo cp /etc/mesos-slave/ip /etc/mesos-slave/hostname

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

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

sudo start mesos-slave

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

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

http://192.168.2.1:5050

Теперь вы должны увидеть количество активных ведомых устройств в \3 в интерфейсе:

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

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

Запуск сервисов на Mesos и Marathon

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

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

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

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

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

http://192.168.2.1:8080

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

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

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

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

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

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

http://192.168.2.1:5050

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

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

Запуск службы через API

Мы также можем предоставлять услуги через API Marathon. Это включает в себя передачу объекта 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' -d@hello2.json 192.168.2.1:8080/v2/apps

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

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

Заключение

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

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