Другая виртуализация
TRANSCRIPT
Другая сторона
Sergey Vasilenko
виртуализации
Готовимся к переезду в облакоВозьмем проект
business logic
WEB-frontend
database
Visitor
Три сервера8Задача — перенести в облако, для:8• увеличения масштабируемости8• уменьшения времени простоя при обслуживании8• повышения отказоустойчивости8• оптимизации расходов на содержание проекта88Напрашивается решение — начать с трех VM в облаке.
Готовимся к переезду в облакоbusiness logic WEB-frontend database
Для нормальной работы нашим серверам надо:8• сетевая связанность (IP адреса, внутренняя сеть, канал в Internet)8• Среда исполнения основной задачи88>> Мы что-то забыли???
ext.IP int.IP
HTTP-server
int.IP-addrBusiness logic.
software
int.IP-addr
Database
Готовимся к переезду в облакоbusiness logic WEB-frontend database
Да! Мы забыли дисковую подсистему. 888Плохая идея:8• использовать дисковые разделы виртуальных машин в облаке88Хорошая идея:8• воспользоваться сетевым облачным хранилищем
ext.IP int.IP
HTTP-server
storage
int.IP-addrBusiness logic.
softwarestorage
int.IP-addr
Database
storage
Переезд в облакоbusiness logic WEB-frontend database
ext.IP int.IPnet.storage+FS
HTTP-server
int.IP-addrnet.storage+FS
Business logic. software
int.IP-addrnet.storage+FS
Database
Что еще мы можем получить от облака:8• мониторинг состояния VM8• регулярные бэккапы8• балансировку входящего траффика8• защиту от DDOS атак8
Переезд в облако
Что еще мы можем получить от облака:8• мониторинг состояния VM8• регулярные бэккапы8• балансировку входящего траффика8• защиту от DDOS88Чего нам облако не даст:8• резервирования всего того, что крутится внутри наших VM
Переезд в облако
Примерно с 2004 года при активном участии компаний RedHat и Linbit разрабатывается кластерный ресурс-менеджер с открытым кодом.
8
Для решения нашей задачи мы можемиспользовать связку
Pacemaker / Corosync
Велосипед давно изобретен!
Resource-managerОтвечает за своевременный запуск/остановку:8• в нужной последовательности8• с соблюдением зависимостей между ресурсами8• распределяя нагрузку между нодами кластера88Обеспечивает отказоустойчивость:8• мониторя запущенные ресурсы8• контролируя состояния нод8• отслеживая кворум88Облегчает масштабирование:8• обеспечивая работу групповых ресурсов8• реализуя событийную модель
Нижний уровень комуникаций в кластере:8● Отслеживает состояния нод кластера, принимает решение о наличии или отсутствии кворума (v2)8
● Обеспечивает синхронизацию состояний ресурсов кластера8
● Предоставляет транспортный уровень для сервисных служб более высокого уровня8
8
Имеет три режима работы с сетью: Multicast, Broadcast, Unicast (c перечислением нод кластера в конфиге). 8
/etc/corosync/corosync.conf8/etc/corosync/service.d/*
Corosync
● Unicast: все узлы перечислены в конфиге, сообщения передаются от узла к узлу. Все просто, железобетонно. Добавлять и удалять ноды в кластере — неудобно.
● Broadcast: более удобный способ. Ноды кластера в конфигах не перечисляются, добавляются авто-матически. Авторизация — по ключу. Однако этот способ работает только в случае, если все ноды находятся в одном широковещательном ethernet-домене. Если единого L2 сегмента сети нет – этот метод неприемлим.
● Multicast: тоже удобен. Единый сегмент сети не нужен. Однако коммутаторы должны правильно пропускать мультикаст-траффик.
Corosync. Транспорт.
● Контролирует состояние ресурсов ● Распределяет ресурсы по нодам кластера ● Помогает производить выборы для master/slave ресурсов ● Отслеживает кворум ● Экстренно выключает ресурсы 8
Работает поверх Corosync.Собственных конфигурационных файлов не имеет.
Конфигурируется через утилиты команднойстроки с любого узла кластера.
Практически мгновенно синхронизирует свою конфигурацию между узлами.
Pacemaker
● Corosync 1.xx (1.4.6)
● Pacemaker (1.1.10)
● PCS (замена устаревшему crmsh)
Пакеты и утилиты
Ресурсы (все что исполняется на кластере): ● Имеют состояние (started, stopped, master...) ● Могут быть сгруппированы ● Могут зависеть один от другого ● Могут быть привязаны к каким-то определенным узлам кластера ● Могут иметь атрибуты 8Ноды (узлы кластера): ● Могут иметь атрибуты ● Могут иметь состояние 8Кворум ● Может присутствовать или отсутствовать.
В кластере
Ресурсы могут управляться: ● Upstart ● Systemd ● Service ● LSB ● OCF – родное средство Pacemaker
/usr/lib/ocf/resource.d/*
OCF-скрипты
Обычный ресурс ● существует в одном экземпляре ● на одной из нод кластера ● в процессе жизнедеятельности может мигрировать на другие ноды
Ресурсы
● Обычные атрибутыэто параметры с которыми ресурс был создан. В принципе на ресурс можно повесить любой атрибут, но создать ресурс с атрибутом, который не упомянут в его Metadata Pacemaker не даст.
● Meta-атрибуты (служебные) это атрибуты, которые имеют значение для Pacemaker’a, но бессмысленны для самого ресурса. Они управляют поведением.Например с мета-атрибутом target-role=”Stopped” ресурс будет создан, но не запустится автоматически.
Атрибуты ресурса
Создается так: #pcs resource create ClusterIP ocf:heartbeat:IPaddr2 \ ip=192.168.0.120 cidr_netmask=32 \ nic=eth0 mac=AA:BB:CC:00:11:22 \ op monitor interval=5s
#pcs status
#pcs resource show ClusterIP
Ресурс обыкновенный
● Обычный ресурс ● Clone 8
ресурс, который существует в нескольких экземплярах, по одному на ноду. 8
8
Наиболее частый случай применения – существовать везде.
Ресурсы. Clone.
#pcs resource create httpd ocf:heartbeat:nginx \ configfile=/etc/nginx.conf port=80 \ meta target-role=”Stopped” \ op monitor interval=10s
#pcs resource clone httpd \ notify=true \ ordered=true \ clone-max=2
#pcs resource enable httpd
8#pcs status
#pcs resource show httpd
#pcs resource show httpd-clone
Ресурсы. Clone.
● Обычный ресурс ● Clone ● Master/slave 8
Специальный вид Клона, в котором один из ресурсов назначается старшим. Старшинство определяется выборами. Любой экземпляр ресурса может выдвинуть свою кандидатуру. Но утвер-ждает ее и назначает старшего – Pacemaker.
Ресурсы. Master/slave.
Создается так: #pcs resource create httpd ocf:heartbeat:nginx \ configfile=/etc/nginx.conf port=80 \ meta target-role=”Stopped” \ op monitor interval=10s \ op monitor interval=7s role=”Master”
#pcs resource master httpd \ notify=true \ master-max=1 \ master-node-max=1
#pcs resource enable httpd
8#pcs status
Ресурсы. Master/slave.
Мина замедленного действия#pcs resource create ntpd lsb:ntpd \ meta target-role='Stopped' \ op monitor interval='60'
#pcs resource clone ntpd
#pcs resource enable ntpd 88
!!! НЕ КЛОНИРУЙТЕ СИСТЕМНЫЙ SSH !!!
Операции Коды возврата● meta-data ● start ● stop ● monitor ● notify ● promote ● demote ● migrate_to ● migrate_from ● reload
● 0: OCF_SUCCESS ● 7: OCF_NOT_RUNNING ● 8: OCF_RUNNING_MASTER 8● 1: OCF_ERR_GENERIC ● 9: OCF_FAILED_MASTER 8● 2: OCF_ERR_ARGS ● 3: OCF_ERR_UNIMPLEMENTED ● 4: OCF_ERR_PERM ● 5: OCF_ERR_INSTALLED 8● 6: OCF_ERR_CONFIGURED
OCF — а что внутри?
/usr/lib/ocf/resource.d/*
Вызванный с этими аргументами ocf-скрипт должен правильно стартовать/останавливать ресурс. 8
Например процесс остановки должен не только гасить ресурс, но и проверять успешно ли прошло гашение. Ждать если надо, и снова проверять. Если ничего не помогает kill -TERM, или даже kill -KILL.
OCF: start/stop
C этим аргументом ocf-скрипт регулярно вызывается для проверки состояния ресурса. Случаи бывают разными. В одном случае стоит всего лишь проверить, что процесс с PIDом из PID-файла действительно запущен, в другом имеет смысл убедиться, что процесс реально работает, а не просто завис и занимает место в памяти. У одного ресурса может быть несколько мониторов, запускающихся через разные промежутки времени, выполняющие различные действия. (depth=NN)
OCF: monitor
Эту особую операцию Pacemaker применяет перед стартом ресурса. Он расчитывает получить в ответ XML с описанием какие атрибуты есть у ресурса, какие обязательны, какие операции к нему можно применять и как часто нужно его мониторить. Частоту можно переопределить при создании ресурса. 8
Ответ строго стардартизирован, примеры можно посмотреть запустив OCF-скрипт руками с этим параметром: 8#OCF_ROOT=/usr/lib/ocf OCF_RESOURCE_INSTANCE=test-1 \ /usr/lib/ocf/resource.d/xxx/test meta-data
OCF: meta-data
http://bit.ly/1fejrJS
Теория закончиласьПортативная лаборатория быстрого
развертывания
IP address
Взаимодействие ресурсов
FS
httpd
IP address FS
httpd
блочное устройство запрашивается изнутри VM
блочное устройство запрашивается через cloud-API, и подается в VM как
pluggable device
Цепочка ресурсов
# pcs resource create IPADDR ocf:heartbeat:Ipaddr2 \ ip=10.0.0.201 nic=eth1
# pcs resource create FS ocf:heartbeat:Dummy # pcs resource create HTTPD ocf:heartbeat:nginx
# pcs constraint colocation add FS with IPADDR# pcs constraint colocation add HTTPD with FS
# pcs constraint order start IPADDR then start FS# pcs constraint order start FS then start HTTPD# pcs constraint order stop HTTPD then stop FS# pcs constraint order stop FS then stop IPADDR
8# pcs status # pcs resource enable/disable/move
Взаимодействие ресурсов
Множественная зависимость
# pcs resource create IPADDR ocf:heartbeat:IPaddr2 \ ip=10.0.0.201 nic=eth1
# pcs resource create FS ocf:heartbeat:Dummy # pcs resource create HTTPD ocf:heartbeat:nginx
# pcs constraint colocation add HTTPD with IPADDR# pcs constraint colocation add HTTPD with FS# pcs constraint colocation add IPADDR with FS
# pcs constraint order start IPADDR then start HTTPD# pcs constraint order start FS then start HTTPD# pcs constraint order stop HTTPD then stop FS# pcs constraint order stop HTTPD then stop IPADDR
8# pcs resource delete XXX
Взаимодействие ресурсов
Для мониторинга и отладки у нас есть: ● crm_mon ● pcs status ● pcs config ● pcs cluster edit ● А для начала неплохо бы проверить сетевую связанность между узлами кластера и синхронизацию времени.
Утилиты диагностики
Pacemaker – не волшебная таблетка “сделать все хорошо” – это этакий init на стеройдах, способный к эффективной коллективной работе.
Итого: ….
… включая НДС
8● Pacemaker: http://clusterlabs.org/ ● Corosync: http://corosync.github.io/corosync/ ● Лаба: http://bit.ly/1fejrJS
8
8
8
[email protected] Skype: xenolog13
СПАСИБО!