Конференция highload++ 2014, "Отказоустойчивый...

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

Upload: lenvendo

Post on 06-Jul-2015

2.716 views

Category:

Technology


6 download

DESCRIPTION

inShare 0 views Компания "Ленвендо" занимается созданием, развитием и поддержкой крупномасштабных онлайн-проектов. Сегодня «Ленвендо» отвечает за работу ресурсов «Эльдорадо», «Связной», HomeMe, Газпромбанк, Эхо Москвы в Петербурге

TRANSCRIPT

Page 1: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Отказоустойчивый

микрокластер

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

Page 2: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Суть доклада

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

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

актуальности

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

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

carp/ucarp

Page 3: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

Page 4: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

• Некластеризованные

виртуальные/реальные сервера с

синхронизацией данных «по

необходимости» либо «по расписанию» с

дублированием – избыточные ресурсы,

дополнительные расходы на

синхронизацию

Page 5: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Цель доклада

• Отказоустойчивый микрокластер, «собранный»

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

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

Page 6: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

NO

DE

-LE

FT

NO

DE

-RIG

HT

eth0

eth1

eth2

eth3

eth0

eth1

eth2

eth3

bon

d0

bon

d1

bon

d1

bon

d0

SWITCH1 SWITCH2

EXT IP RIGHTEXT IP LEFT

INT IP RIGHTINT IP LEFT

Page 7: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

NO

DE

-LE

FT

NO

DE

-RIG

HT

eth0

eth1

eth2

eth3

eth0

eth1

eth2

eth3

bo

nd0

bon

d1

bon

d1

bo

nd0

SWITCH1 SWITCH2

EXT IP

RIGHTEXT IP LEFT

INT IP

RIGHTINT IP LEFT

br0

br1

br0

br1

Page 8: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

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

• Бесплатная поддержка (обновления)

• Единый репозиторий как для коммерческих, так и для платных

условий поддержки

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

Page 9: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Разбивка диска• /boot/ - 200 Mb

• SWAP – от 0.5 до 2.0 от

объема RAM

• Остальное под LVM

(группа vg0)

• / - 10Gb

(volume_name = root)

• Остальное не

распределяем

swap boot

data

root

Page 10: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Конфигурация сетевых интерфейсов (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"

Page 11: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Конфигурация сетевых интерфейсов (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

Page 12: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

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

#service iptables restart

Page 13: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Результаты

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

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

mtu=9000

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

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

Page 14: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

• Создаем на каждом сервере раздел

lvcreate --name=data --size= (полный объем свободного места в группе) vg0

Page 15: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

/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;

}

}

• Конфигурируем DRBD

Page 16: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Дисковое пространство• Инициализируем раздел на обоих серверах: # drbdadm create-md

shared

• Запускаем DRBD на обоих серверах:

# service drbd start

# chkconfig drbd on

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

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

синхронизации

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

Page 17: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Результат

• Настроенная пара серверов с синхронизируемым дисковым

пространством (блочным устройством) без файловой системы

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

Page 18: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

# yum install ocfs2-tools

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

# /etc/ocfs2/cluster.confnode:

ip_port = 7777ip_address = INT IP LEFTnumber = 0name = HOSTNAME_LEFTcluster = ocfs2

node:ip_port = 7777ip_address = INT IP RIGHTnumber = 1name = HOSTNAME_RIGHTcluster = ocfs2

cluster:node_count = 2name = ocfs2

# service o2cb configure

Page 19: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Файловая система

(продолжение)• Создаем файловую систему на любом сервере

# 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 20: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Проверка

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

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

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

Page 21: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Результат

• Получили пару серверов с надежной файловой системой

• В случае отказа одного из серверов все данные будут доступны

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

Page 22: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

• /mnt/shared/

• /mnt/shared/data/

• /mnt/shared/data/image1.bin

• …

• /mnt/shared/xml/

• /mnt/shared/xml/vhost1.xml

• …

Page 23: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

А дальше все просто!

• Запускаем установку ОС

# 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 24: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

А дальше все просто!• Живая миграция виртуальной машины

# 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 25: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

• Pacemaker/corosync

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

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

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

Page 26: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

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

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

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

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

по факту отказа

Page 27: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

Решений много

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

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

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

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

Page 28: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

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

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

HSRP Нет

Зависит от

конечного

решения

Требуется аппаратная

поддержка

UCARP Нет Просто

heartbeat Да Сложно

Может некорректно

работать

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

cистему

pacemaker/corosync Да Средне

Может некорректно

работать

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

cистему

Page 29: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

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

своей пары хостов

• Операции ввода-вывода медленнее, чем при некластерной

(например ext3) файловой системе или локальном блочном

устройстве выделенном через LVM

• На каждом хосте необходимо иметь достаточно памяти для

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

хостовых машин

Page 30: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

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

Рассинхронизация DRBD после перезагрузки или аварийного сбоя

• Не запускать виртуальные машины на хосте, на котором идет

восстановление drbd до его завершения

• Минимизировать операции ввода-вывода на неповрежденном

хосте

• При необходимости остановить синхронизацию и запустить ее в

менее нагруженный интервал времени

Page 31: Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "Ленвендо", Виталий Гаврилов

Спасибо за внимание!