30
Отказоустойчивый микрокластер своими руками Виталий Гаврилов

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

  • Upload
    ontico

  • View
    463

  • Download
    4

Embed Size (px)

DESCRIPTION

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

Citation preview

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

Отказоустойчивый микрокластер своими

рукамиВиталий Гаврилов

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

Суть доклада

• Построение отказоустойчивой «фермы»

• Блочные устройства с высоким уровнем доступности и актуальности

• «Живая» миграция виртуальных машин внутри «фермы»

• «Отказоустойчивые» ip сервисы на базе corosync/pacemaker или carp/ucarp

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

Типовые решения

• Полноценный кластер – дорого, сложно, тяжело поддерживать

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

Типовые решения

• Некластеризованные виртуальные/реальные сервера с синхронизацией данных «по необходимости» либо «по расписанию» с дублированием – избыточные ресурсы, дополнительные расходы на синхронизацию

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

Цель доклада

Отказоустойчивый микрокластер

«собранный» из попарно соединенных физических серверов.

Бюджетно и надежно.

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

Схема сетевой линковки

NO

DE

-LE

FT

NO

DE

-RIG

HT

eth0

eth1

eth2

eth3

eth0

eth1

eth2

eth3

bond

0bo

nd1

bond

1bo

nd0

SWITCH1 SWITCH2

EXT IP RIGHTEXT IP LEFT

INT IP RIGHTINT IP LEFT

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

Схема сетевой линковкиN

OD

E-L

EF

T

NO

DE

-RIG

HT

eth0

eth1

eth2

eth3

eth0

eth1

eth2

eth3

bond

0bo

nd1

bond

1bo

nd0

SWITCH1 SWITCH2

EXT IP RIGHT

EXT IP LEFT

INT IP RIGHT

INT IP LEFT

br0

br1

br0

br1

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

Операционная система

Операционная система – Oracle Linux• Бесплатная поддержка (обновления)• Единый репозиторий как для

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

• Продолжительный период поддержки

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

Разбивка диска

• /boot/ - 200 Mb• SWAP – от 0.5 до 2.0 от объема RAM• Остальное под LVM (группа vg0)

– / - 10Gb (volume_name = root)– Остальное не распределяем

/boot

data

swaproot

Page 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=bond0SLAVE=yesTYPE="Ethernet"

/etc/sysconfig/network-scripts/bond0DEVICE=bond0BOOTPROTO=noneONBOOT=yesIPADDR=EXT IP (LEFT|RIGHT)NETMASK=X.X.X.XTYPE=BondingUSERCRL=noBONDING_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=bond1SLAVE=yesMTU=9000TYPE="Ethernet“

/etc/sysconfig/network-scripts/bond1DEVICE=bond0BOOTPROTO=noneONBOOT=yesIPADDR=INT IP (LEFT|RIGHT)NETMASK=255.255.255.252TYPE=BondingUSERCRL=noMTU=9000BONDING_OPTS="mode=0 miimon=100"

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

Конфигурация сетевых интерфейсов (bridge)

/etc/sysconfig/network-scripts/bond0DEVICE=bond0BOOTPROTO=noneONBOOT=yesTYPE=BondingUSERCRL=noBONDING_OPTS="mode=1 miimon=100"BRIDGE=br0

/etc/sysconfig/network-scripts/ifcfg-br0DEVICE=br0BOOTPROTO=staticIPADDR=EXT IP (LEFT|RIGHT)NETMASK=X.X.X.XONBOOT=yesTYPE=BrigeIPV6INIT=noSTP=(on|off)

/etc/sysconfig/network-scripts/bond1DEVICE=bond0BOOTPROTO=noneONBOOT=yesTYPE=BondingUSERCRL=noBONDING_OPTS="mode=0 miimon=100“MTU=9000BRIDGE=br1

/etc/sysconfig/network-scripts/ifcfg-br1DEVICE=br1BOOTPROTO=staticIPADDR=INT IP (LEFT|RIGHT)NETMASK=255.255.255.252ONBOOT=yesTYPE=BrigeIPV6INIT=noMTU=9000STP=off

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

Настраиваем Firewall

#/etc/sysconfig/iptables-A INPUT -i br1 -j ACCEPT

#service iptables restart

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

Результаты

• Пара серверов

• Отказоустойчивая связность между собой с размером пакеты mtu=9000

• Отказоустойчивый выход в сеть

• Операционная система с поддержкой файловой системы OCFS2

Page 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; }}

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

Дисковое пространство

• Инициализируем раздел на обоих серверах# drbdadm create-md shared

• Запускаем DRBD на обоих серверах# service drbd start# chkconfig drbd on

• На любом сервере# drbdadm invalidate shared

• Ожидаем пока #service drbd status покажет завершение синхронизации

• На обоих узлах# drbdadm primary shared

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

Результат

• Настроенная пара серверов с синхронизируемым дисковым пространством (блочным устройством) без файловой системы

• На каждом сервере устройство доступно лдя чтения и записи

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

Файловая система• Ставим нужные пакеты

# yum install ocfs2-tools

• Настраиваем# /etc/ocfs2/cluster.confnode: ip_port = 7777 ip_address = INT IP LEFT

number = 0 name = HOSTNAME_LEFT cluster = ocfs2node: ip_port = 7777 ip_address = INT IP RIGHT number = 1 name = HOSTNAME_RIGHT cluster = ocfs2cluster: node_count = 2 name = ocfs2# service o2cb configure

Page 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

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

Проверка

• Перезагружаем любой сервери убеждаемся что все работает

• Делаем чтобы работало

• Не забываем что узлов 2

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

Результат

• Получили пару серверов с надежной файловой системой при этом в случае отказа одного из серверов все данные будут доступны

• Можно переходить к виртуальным машинам

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

Структура раздела /mnt/shared

• /mnt/shared/

• /mnt/shared/data/

• /mnt/shared/data/image1.bin

• …

• /mnt/shared/xml/

• /mnt/shared/xml/vhost1.xml

• …

Page 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

Page 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

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

А как бы автоматизировать

• Pacemaker/corosync

• Не забываем про STONITH девайсы

• Ставим на мониторинг

• Переодически проверяем

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

Отказоустойчивость сервиса

• Оперативный запуск виртуальных машин – 1-15 минут в зависимости от сервиса

• Наличие пассивного дублера – миграция ip адресов

• Поддержка двух активных сервисов с автоматическим запуском по факту отказа

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

Отказоустойчивые ip адреса и сервисы

Решений много1. HSRP – надежное аппаратное решение, требует

наличия поддерживающего оборудования. Не знает ничего про другие сервисы, чем и ограничивается возможность применения.

2. carp/ucarp – просто, надежно. Не знает ничего про другие сервисы, чем и ограничивается возможность применения.

3. Heartbeat – фактически предок pacemaker/corosync. Конфигурировать сложно

4. Pacemaker/corosync – аналог heartbeat но проще настраивать.

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

Отказоустойчивые ip адреса и сервисы

ИнструментУправление

сервисамиПростота

настройки Особенности

HSRP НетЗависит от конечного

решения Требуется аппаратная поддержка

UCARP Нет Просто  

heartbeat Да СложноМожет некорректно работать при

высокой нагрузке на систему

pacemaker/corosync Да СреднеМожет некорректно работать при

высокой нагрузке на систему

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

Ограничение решения

• Виртуальные машины не могут быть смигрированы за пределы своей пары хостов

• Операции ввода-вывода медленнее чем при некластерной (например ext3) файловой системе или локальном блочном устройстве выделенном через LVM

• На каждом хосте необходимо иметь достаточно памяти для размещения всех критичных виртуальных машин этой пары хостовых машин

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

Типовые проблемы и решения

• Рассинхронизация DRBD после перезагрузки или аварийного сбояНе запускать виртуальные машины на хосте. На котором идет восстановление drbd до его завершения. Минимизирвоать операции ввода-вывода на неповрежденном хосте. При необходимости остановить синхронизацию и запустиьт ее в менее нагруженный интервал времени.

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

Вопросы