Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Отказоустойчивый 
микрокластер своими 
руками 
Виталий Гаврилов
Суть доклада 
• Построение отказоустойчивой «фермы» 
• Блочные устройства с высоким уровнем 
доступности и актуальности 
•...
Типовые решения 
• Полноценный кластер – дорого, 
сложно, тяжело поддерживать
Типовые решения 
• Некластеризованные 
виртуальные/реальные 
сервера с 
синхронизацией данных 
«по необходимости» 
либо «п...
Цель доклада 
Отказоустойчивый 
микрокластер 
«собранный» из 
попарно соединенных 
физических серверов. 
Бюджетно и надежн...
Схема сетевой линковки
Схема сетевой линковки
Операционная система 
Операционная система – Oracle Linux 
• Бесплатная поддержка (обновления) 
• Единый репозиторий как д...
Разбивка диска 
• /boot/ - 200 Mb 
• SWAP – от 0.5 до 2.0 от объема RAM 
• Остальное под LVM (группа vg0) 
– / - 10Gb (vol...
Конфигурация сетевых интерфейсов (bonding) 
/etc/sysconfig/network-scripts/eth[0-1] 
DEVICE="eth[0-1]" 
BOOTPROTO="static"...
Конфигурация сетевых интерфейсов (bridge) 
/etc/sysconfig/network-scripts/bond0 
DEVICE=bond0 
BOOTPROTO=none 
ONBOOT=yes ...
Настраиваем Firewall 
#/etc/sysconfig/iptables 
-A INPUT -i br1 -j ACCEPT 
#service iptables restart
Результаты 
• Пара серверов 
• Отказоустойчивая связность между 
собой с размером пакеты mtu=9000 
• Отказоустойчивый выхо...
Дисковое пространство 
• Создаем на каждом сервере раздел 
lvcreate --name=data --size=(полный объем свободного места в гр...
Дисковое пространство 
• Инициализируем раздел на обоих серверах 
# drbdadm create-md shared 
• Запускаем DRBD на обоих се...
Результат 
• Настроенная пара серверов с 
синхронизируемым дисковым 
пространством (блочным устройством) 
без файловой сис...
Файловая система 
• Ставим нужные пакеты 
# yum install ocfs2-tools 
• Настраиваем 
# /etc/ocfs2/cluster.conf 
node: 
ip_p...
Файловая система (продолжение) 
• Создаем файловую систему 
на любом сервере 
# mkfs.ocfs2 -F -N 3 -J block64 -L drbd_ocfs...
Проверка 
• Перезагружаем любой сервер 
и убеждаемся что все работает 
• Делаем чтобы работало 
• Не забываем что узлов 2
Результат 
• Получили пару серверов с надежной 
файловой системой при этом в случае 
отказа одного из серверов все данные ...
Структура раздела /mnt/shared 
• /mnt/shared/ 
• /mnt/shared/data/ 
• /mnt/shared/data/image1.bin 
• … 
• /mnt/shared/xml/...
А дальше все просто! 
• Запускаем установку ОС 
• # virt-install -n vhost1 -l 
http://mirror.yandex.ru/centos/6.5/os/x86_6...
А дальше все просто! 
• Живая миграция виртуальной машины 
# virsh --connect=qemu:///system --quiet migrate 
--live vhost1...
А как бы автоматизировать 
• Pacemaker/corosync 
• Не забываем про STONITH девайсы 
• Ставим на мониторинг 
• Переодически...
Отказоустойчивость сервиса 
• Оперативный запуск виртуальных 
машин – 1-15 минут в зависимости от 
сервиса 
• Наличие пасс...
Отказоустойчивые ip адреса и 
сервисы 
Решений много 
1. HSRP – надежное аппаратное решение, требует 
наличия поддерживающ...
Отказоустойчивые ip адреса и 
сервисы 
Инструмент 
Управление 
сервисами 
Простота 
настройки Особенности 
HSRP Нет 
Завис...
Ограничение решения 
• Виртуальные машины не могут быть 
смигрированы за пределы своей пары хостов 
• Операции ввода-вывод...
Типовые проблемы и решения 
• Рассинхронизация DRBD после 
перезагрузки или аварийного сбоя 
Не запускать виртуальные маши...
Вопросы
Upcoming SlideShare
Loading in …5
×

Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)

1,447 views

Published on

Доклад Виталия Гаврилова на HighLoad++ 2014.

Published in: Internet
  • Be the first to comment

  • Be the first to like this

Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)

  1. 1. Отказоустойчивый микрокластер своими руками Виталий Гаврилов
  2. 2. Суть доклада • Построение отказоустойчивой «фермы» • Блочные устройства с высоким уровнем доступности и актуальности • «Живая» миграция виртуальных машин внутри «фермы» • «Отказоустойчивые» ip сервисы на базе corosync/pacemaker или carp/ucarp
  3. 3. Типовые решения • Полноценный кластер – дорого, сложно, тяжело поддерживать
  4. 4. Типовые решения • Некластеризованные виртуальные/реальные сервера с синхронизацией данных «по необходимости» либо «по расписанию» с дублированием – избыточные ресурсы, дополнительные расходы на синхронизацию
  5. 5. Цель доклада Отказоустойчивый микрокластер «собранный» из попарно соединенных физических серверов. Бюджетно и надежно.
  6. 6. Схема сетевой линковки
  7. 7. Схема сетевой линковки
  8. 8. Операционная система Операционная система – Oracle Linux • Бесплатная поддержка (обновления) • Единый репозиторий как для коммерческих так и для платных условий поддержки • Продолжительный период поддержки
  9. 9. Разбивка диска • /boot/ - 200 Mb • SWAP – от 0.5 до 2.0 от объема RAM • Остальное под LVM (группа vg0) – / - 10Gb (volume_name = root) – Остальное не распределяем /boot data swap root
  10. 10. Конфигурация сетевых интерфейсов (bonding) /etc/sysconfig/network-scripts/eth[0-1] DEVICE="eth[0-1]" BOOTPROTO="static" HWADDR=“XX:XX:XX:XX:XX:XX" NM_CONTROLLED="no" ONBOOT="yes" MASTER=bond0 SLAVE=yes TYPE="Ethernet" /etc/sysconfig/network-scripts/bond0 DEVICE=bond0 BOOTPROTO=none ONBOOT=yes IPADDR=EXT IP (LEFT|RIGHT) NETMASK=X.X.X.X TYPE=Bonding USERCRL=no BONDING_OPTS="mode=1 miimon=100" /etc/sysconfig/network-scripts/eth[2-3] DEVICE="eth[2-3]" BOOTPROTO="static" HWADDR=“XX:XX:XX:XX:XX:XX" NM_CONTROLLED="no" ONBOOT="yes" MASTER=bond1 SLAVE=yes MTU=9000 TYPE="Ethernet“ /etc/sysconfig/network-scripts/bond1 DEVICE=bond0 BOOTPROTO=none ONBOOT=yes IPADDR=INT IP (LEFT|RIGHT) NETMASK=255.255.255.252 TYPE=Bonding USERCRL=no MTU=9000 BONDING_OPTS="mode=0 miimon=100"
  11. 11. Конфигурация сетевых интерфейсов (bridge) /etc/sysconfig/network-scripts/bond0 DEVICE=bond0 BOOTPROTO=none ONBOOT=yes TYPE=Bonding USERCRL=no BONDING_OPTS="mode=1 miimon=100" BRIDGE=br0 /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 BOOTPROTO=static IPADDR=EXT IP (LEFT|RIGHT) NETMASK=X.X.X.X ONBOOT=yes TYPE=Brige IPV6INIT=no STP=(on|off) /etc/sysconfig/network-scripts/bond1 DEVICE=bond0 BOOTPROTO=none ONBOOT=yes TYPE=Bonding USERCRL=no BONDING_OPTS="mode=0 miimon=100“ MTU=9000 BRIDGE=br1 /etc/sysconfig/network-scripts/ifcfg-br1 DEVICE=br1 BOOTPROTO=static IPADDR=INT IP (LEFT|RIGHT) NETMASK=255.255.255.252 ONBOOT=yes TYPE=Brige IPV6INIT=no MTU=9000 STP=off
  12. 12. Настраиваем Firewall #/etc/sysconfig/iptables -A INPUT -i br1 -j ACCEPT #service iptables restart
  13. 13. Результаты • Пара серверов • Отказоустойчивая связность между собой с размером пакеты mtu=9000 • Отказоустойчивый выход в сеть • Операционная система с поддержкой файловой системы OCFS2
  14. 14. Дисковое пространство • Создаем на каждом сервере раздел lvcreate --name=data --size=(полный объем свободного места в группе) vg0 • Конфигурируем DRBD /etc/drbd.d/shared.res resource shared { protocol C; net { allow-two-primaries; sndbuf-size 0; } disk { no-disk-barrier; no-disk-flushes; } startup { become-primary-on both; } on HOSTNAME_LEFT { device minor 1; disk /dev/vg0/data; address INT IP LEFT:7789; meta-disk internal; } on HOSTNAME_RIGHT { device minor 1; disk /dev/vg0/data; address INT IP RIGHT:7789; meta-disk internal; } }
  15. 15. Дисковое пространство • Инициализируем раздел на обоих серверах # drbdadm create-md shared • Запускаем DRBD на обоих серверах # service drbd start # chkconfig drbd on • На любом сервере # drbdadm invalidate shared • Ожидаем пока #service drbd status покажет завершение синхронизации • На обоих узлах # drbdadm primary shared
  16. 16. Результат • Настроенная пара серверов с синхронизируемым дисковым пространством (блочным устройством) без файловой системы • На каждом сервере устройство доступно лдя чтения и записи
  17. 17. Файловая система • Ставим нужные пакеты # yum install ocfs2-tools • Настраиваем # /etc/ocfs2/cluster.conf node: ip_port = 7777 ip_address = INT IP LEFT number = 0 name = HOSTNAME_LEFT cluster = ocfs2 node: ip_port = 7777 ip_address = INT IP RIGHT number = 1 name = HOSTNAME_RIGHT cluster = ocfs2 cluster: node_count = 2 name = ocfs2 # service o2cb configure
  18. 18. Файловая система (продолжение) • Создаем файловую систему на любом сервере # mkfs.ocfs2 -F -N 3 -J block64 -L drbd_ocfs --mount cluster -T (datafiles|vmstore) /dev/drbd/by-res/shared • Настраиваем таблицу разделов на обоих серверах # /etc/fstab /dev/drbd1 /mnt/shared ocfs2 defaults,noexec,nosuid,noacl,nouser_xattr,errors=remount-ro,localflocks • Монтируем файловую систему на обоих узлах # mkdir –p /mnt/shared/;chkconfig ocfs2 on;service ocf2 start
  19. 19. Проверка • Перезагружаем любой сервер и убеждаемся что все работает • Делаем чтобы работало • Не забываем что узлов 2
  20. 20. Результат • Получили пару серверов с надежной файловой системой при этом в случае отказа одного из серверов все данные будут доступны • Можно переходить к виртуальным машинам
  21. 21. Структура раздела /mnt/shared • /mnt/shared/ • /mnt/shared/data/ • /mnt/shared/data/image1.bin • … • /mnt/shared/xml/ • /mnt/shared/xml/vhost1.xml • …
  22. 22. А дальше все просто! • Запускаем установку ОС • # virt-install -n vhost1 -l http://mirror.yandex.ru/centos/6.5/os/x86_64/ --vnc --disk path=/mnt/shared/data/iamge1- root.bin,size=200 –prompt • Ставим ОС • Сохраняем конфигурацию • # virsh dumpxml vhost1 > /mnt/shared/xml/vhost1.xml
  23. 23. А дальше все просто! • Живая миграция виртуальной машины # virsh --connect=qemu:///system --quiet migrate --live vhost1 qemu+ssh://INT_IP/system (лучше происать внутренние адреса серверов в /etc/hosts) • Один сервер умер, срочно запускам на втором # virsh define /mnt/shared/xml/vhost1.xml # virsh start vhost1
  24. 24. А как бы автоматизировать • Pacemaker/corosync • Не забываем про STONITH девайсы • Ставим на мониторинг • Переодически проверяем
  25. 25. Отказоустойчивость сервиса • Оперативный запуск виртуальных машин – 1-15 минут в зависимости от сервиса • Наличие пассивного дублера – миграция ip адресов • Поддержка двух активных сервисов с автоматическим запуском по факту отказа
  26. 26. Отказоустойчивые ip адреса и сервисы Решений много 1. HSRP – надежное аппаратное решение, требует наличия поддерживающего оборудования. Не знает ничего про другие сервисы, чем и ограничивается возможность применения. 2. carp/ucarp – просто, надежно. Не знает ничего про другие сервисы, чем и ограничивается возможность применения. 3. Heartbeat – фактически предок pacemaker/corosync. Конфигурировать сложно 4. Pacemaker/corosync – аналог heartbeat но проще настраивать.
  27. 27. Отказоустойчивые ip адреса и сервисы Инструмент Управление сервисами Простота настройки Особенности HSRP Нет Зависит от конечного решения Требуется аппаратная поддержка UCARP Нет Просто heartbeat Да Сложно Может некорректно работать при высокой нагрузке на систему pacemaker/corosync Да Средне Может некорректно работать при высокой нагрузке на систему
  28. 28. Ограничение решения • Виртуальные машины не могут быть смигрированы за пределы своей пары хостов • Операции ввода-вывода медленнее чем при некластерной (например ext3) файловой системе или локальном блочном устройстве выделенном через LVM • На каждом хосте необходимо иметь достаточно памяти для размещения всех критичных виртуальных машин этой пары хостовых машин
  29. 29. Типовые проблемы и решения • Рассинхронизация DRBD после перезагрузки или аварийного сбоя Не запускать виртуальные машины на хосте. На котором идет восстановление drbd до его завершения. Минимизирвоать операции ввода- вывода на неповрежденном хосте. При необходимости остановить синхронизацию и запустиьт ее в менее нагруженный интервал времени.
  30. 30. Вопросы

×