Другая виртуализация

35
Другая сторона Sergey Vasilenko виртуализации

Upload: yandex

Post on 16-Apr-2017

1.477 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Другая виртуализация

Другая сторона

Sergey Vasilenko

виртуализации

Page 2: Другая виртуализация

Готовимся к переезду в облакоВозьмем проект

business logic

WEB-frontend

database

Visitor

Три сервера8Задача — перенести в облако, для:8• увеличения масштабируемости8• уменьшения времени простоя при обслуживании8• повышения отказоустойчивости8• оптимизации расходов на содержание проекта88Напрашивается решение — начать с трех VM в облаке.

Page 3: Другая виртуализация

Готовимся к переезду в облако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

Page 4: Другая виртуализация

Готовимся к переезду в облако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

Page 5: Другая виртуализация

Переезд в облако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

Page 6: Другая виртуализация

Что еще мы можем получить от облака:8• мониторинг состояния VM8• регулярные бэккапы8• балансировку входящего траффика8• защиту от DDOS атак8

Переезд в облако

Page 7: Другая виртуализация

Что еще мы можем получить от облака:8• мониторинг состояния VM8• регулярные бэккапы8• балансировку входящего траффика8• защиту от DDOS88Чего нам облако не даст:8• резервирования всего того, что крутится внутри наших VM

Переезд в облако

Page 8: Другая виртуализация

Примерно с 2004 года при активном участии компаний RedHat и Linbit разрабатывается кластерный ресурс-менеджер с открытым кодом.

8

Для решения нашей задачи мы можемиспользовать связку

Pacemaker / Corosync

Велосипед давно изобретен!

Page 9: Другая виртуализация

Resource-managerОтвечает за своевременный запуск/остановку:8• в нужной последовательности8• с соблюдением зависимостей между ресурсами8• распределяя нагрузку между нодами кластера88Обеспечивает отказоустойчивость:8• мониторя запущенные ресурсы8• контролируя состояния нод8• отслеживая кворум88Облегчает масштабирование:8• обеспечивая работу групповых ресурсов8• реализуя событийную модель

Page 10: Другая виртуализация

Нижний уровень комуникаций в кластере:8● Отслеживает состояния нод кластера, принимает решение о наличии или отсутствии кворума (v2)8

● Обеспечивает синхронизацию состояний ресурсов кластера8

● Предоставляет транспортный уровень для сервисных служб более высокого уровня8

8

Имеет три режима работы с сетью: Multicast, Broadcast, Unicast (c перечислением нод кластера в конфиге). 8

/etc/corosync/corosync.conf8/etc/corosync/service.d/*

Corosync

Page 11: Другая виртуализация

● Unicast: все узлы перечислены в конфиге, сообщения передаются от узла к узлу. Все просто, железобетонно. Добавлять и удалять ноды в кластере — неудобно.

● Broadcast: более удобный способ. Ноды кластера в конфигах не перечисляются, добавляются авто-матически. Авторизация — по ключу. Однако этот способ работает только в случае, если все ноды находятся в одном широковещательном ethernet-домене. Если единого L2 сегмента сети нет – этот метод неприемлим.

● Multicast: тоже удобен. Единый сегмент сети не нужен. Однако коммутаторы должны правильно пропускать мультикаст-траффик.

Corosync. Транспорт.

Page 12: Другая виртуализация

● Контролирует состояние ресурсов ● Распределяет ресурсы по нодам кластера ● Помогает производить выборы для master/slave ресурсов ● Отслеживает кворум ● Экстренно выключает ресурсы 8

Работает поверх Corosync.Собственных конфигурационных файлов не имеет.

Конфигурируется через утилиты команднойстроки с любого узла кластера.

Практически мгновенно синхронизирует свою конфигурацию между узлами.

Pacemaker

Page 13: Другая виртуализация

● Corosync 1.xx (1.4.6)

● Pacemaker (1.1.10)

● PCS (замена устаревшему crmsh)

Пакеты и утилиты

Page 14: Другая виртуализация

Ресурсы (все что исполняется на кластере): ● Имеют состояние (started, stopped, master...) ● Могут быть сгруппированы ● Могут зависеть один от другого ● Могут быть привязаны к каким-то определенным узлам кластера ● Могут иметь атрибуты 8Ноды (узлы кластера): ● Могут иметь атрибуты ● Могут иметь состояние 8Кворум ● Может присутствовать или отсутствовать.

В кластере

Page 15: Другая виртуализация

Ресурсы могут управляться: ● Upstart ● Systemd ● Service ● LSB ● OCF – родное средство Pacemaker

/usr/lib/ocf/resource.d/*

OCF-скрипты

Page 16: Другая виртуализация

Обычный ресурс ● существует в одном экземпляре ● на одной из нод кластера ● в процессе жизнедеятельности может мигрировать на другие ноды

Ресурсы

Page 17: Другая виртуализация

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

● Meta-атрибуты (служебные) это атрибуты, которые имеют значение для Pacemaker’a, но бессмысленны для самого ресурса. Они управляют поведением.Например с мета-атрибутом target-role=”Stopped” ресурс будет создан, но не запустится автоматически.

Атрибуты ресурса

Page 18: Другая виртуализация

Создается так: #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

Ресурс обыкновенный

Page 19: Другая виртуализация

● Обычный ресурс ● Clone 8

ресурс, который существует в нескольких экземплярах, по одному на ноду. 8

8

Наиболее частый случай применения – существовать везде.

Ресурсы. Clone.

Page 20: Другая виртуализация

#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.

Page 21: Другая виртуализация

● Обычный ресурс ● Clone ● Master/slave 8

Специальный вид Клона, в котором один из ресурсов назначается старшим. Старшинство определяется выборами. Любой экземпляр ресурса может выдвинуть свою кандидатуру. Но утвер-ждает ее и назначает старшего – Pacemaker.

Ресурсы. Master/slave.

Page 22: Другая виртуализация

Создается так: #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.

Page 23: Другая виртуализация

Мина замедленного действия#pcs resource create ntpd lsb:ntpd \ meta target-role='Stopped' \ op monitor interval='60'

#pcs resource clone ntpd

#pcs resource enable ntpd 88

!!! НЕ КЛОНИРУЙТЕ СИСТЕМНЫЙ SSH !!!

Page 24: Другая виртуализация

Операции Коды возврата● 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/*

Page 25: Другая виртуализация

Вызванный с этими аргументами ocf-скрипт должен правильно стартовать/останавливать ресурс. 8

Например процесс остановки должен не только гасить ресурс, но и проверять успешно ли прошло гашение. Ждать если надо, и снова проверять. Если ничего не помогает kill -TERM, или даже kill -KILL.

OCF: start/stop

Page 26: Другая виртуализация

C этим аргументом ocf-скрипт регулярно вызывается для проверки состояния ресурса. Случаи бывают разными. В одном случае стоит всего лишь проверить, что процесс с PIDом из PID-файла действительно запущен, в другом имеет смысл убедиться, что процесс реально работает, а не просто завис и занимает место в памяти. У одного ресурса может быть несколько мониторов, запускающихся через разные промежутки времени, выполняющие различные действия. (depth=NN)

OCF: monitor

Page 27: Другая виртуализация

Эту особую операцию 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

Page 28: Другая виртуализация

http://bit.ly/1fejrJS

Теория закончиласьПортативная лаборатория быстрого

развертывания

Page 29: Другая виртуализация

IP address

Взаимодействие ресурсов

FS

httpd

IP address FS

httpd

блочное устройство запрашивается изнутри VM

блочное устройство запрашивается через cloud-API, и подается в VM как

pluggable device

Page 30: Другая виртуализация

Цепочка ресурсов

# 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

Взаимодействие ресурсов

Page 31: Другая виртуализация

Множественная зависимость

# 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

Взаимодействие ресурсов

Page 32: Другая виртуализация

Для мониторинга и отладки у нас есть: ● crm_mon ● pcs status ● pcs config ● pcs cluster edit ● А для начала неплохо бы проверить сетевую связанность между узлами кластера и синхронизацию времени.

Утилиты диагностики

Page 33: Другая виртуализация

Pacemaker – не волшебная таблетка “сделать все хорошо” – это этакий init на стеройдах, способный к эффективной коллективной работе.

Итого: ….

… включая НДС

Page 34: Другая виртуализация

8● Pacemaker: http://clusterlabs.org/ ● Corosync: http://corosync.github.io/corosync/ ● Лаба: http://bit.ly/1fejrJS

8

8

8

[email protected] Skype: xenolog13

СПАСИБО!

Page 35: Другая виртуализация