Инструменты – СУБД

advertisement
Повышаем отказоустойчивость без
дорогих решений
Технический директор «Ленвендо»
Виталий Гаврилов
Предпосылки
Выполнение обновления ПО (ну например часовые
пояса) потребовало даунтайма сайта на время
перезапуска сервиса СУБД
Изменились требования SLA
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Предпосылки
Сервер «умер» и выяснилось что восстановление
займет длительное время
Сервер еще не умер но вы об этом задумались…
… а денег на железо много не дадут… кризис
Просто захотелось сделать надежнее
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Требования
Не дорого
Надежно
Быстро (без сильных потерь производительности)
Масштабируемо
Низкая стоимость владения (простота поддержки)
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Требования
Обновления, требующие перезапуска сервисов или
серверов без потери доступности
Условная аппаратная независимость (отказ одного
сервера не должен приводить к отказу в доступности)
Минимизация неиспользованных ресурсов (не должно
быть незадействованных вычислительных мощностей)
Защита от потери данных за счет дублирования
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Принимаемые риски
Риск сетевой недоступности ЦОД в целом
Риск нарушения сетевой связности внутри
инфраструктуры
Риск «выгорания» стойки и аналогичные форсмажорные обстоятельства
Риск ДДОС (должен решаться за пределами системы)
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Минимальные аппаратные требования
Минимум 2 физических сервера
Обязательное использование Hardware RAID с BBU
Производительная дисковая подсистема SAS 10k+
Минимум 2, желательно 4 сетевых интерфейса на
сервер
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Начинаем собирать кластер (сеть)
eth2
eth3
eth3
+7 (812) 322-95-87 (Санкт-Петербург)
EXT IP
RIGHT
NODE-RIGHT
eth2
br0
eth1
bond0
eth1
bond1
br1
eth0
bond1
INT IP LEFT
eth0
br1
NODE-LEFT
EXT IP LEFT
SWITCH2
br0
bond0
SWITCH1
INT IP
RIGHT
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Продолжаем собирать кластер (диски)
/boot/ - 200 Mb
SWAP – от 0.5 до 2.0 от объема RAM
Остальное под LVM (группа vg0)
root
swap
boot
/ - 10Gb (volume_name = root)
Остальное не распределяем
+7 (812) 322-95-87 (Санкт-Петербург)
data
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Приступаем к реализации
Операционная система с поддержкой кластерной ФС (я
рекомендую Oracle Linux и OCFS2)
LVM для динамического управления размером томов
drbd для синхронизации данных между узлами
KVM как платформу виртуализации
virsh как интерфейс управления виртуализацией
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Собираем кластер (операционная система)
Операционная система – Oracle Linux
Бесплатная поддержка (обновления)
Единый репозиторий как для коммерческих, так и для платных
условий поддержки
Продолжительный период поддержки
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Чего мы добились
Физическое оборудование слинковано
Операционная система, поддерживающая кластерные
ФС установлена
Можно переходить к настройке системы
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Настраиваем сеть (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/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/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/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"
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Настраиваем сеть (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/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-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/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
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Настраиваем Firewall (на каждом сервере)
#/etc/sysconfig/iptables
-A INPUT -i br1 -j ACCEPT
#service iptables restart
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Разметка дисков LVM на каждом сервере
# lvcreate --name=data --size= (полный объем
свободного места в группе) vg0
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Конфигурируем 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;
}
}
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Инициализируем DRBD
Инициализируем раздел на обоих серверах:
# drbdadm create-md shared
Запускаем DRBD на обоих серверах:
# service drbd start
# chkconfig drbd on
На любом сервере
# drbdadm invalidate shared
Ожидаем пока #service drbd status покажет завершение синхронизации
На обоих узлах
# drbdadm primary shared
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Файловая система
Ставим нужные пакеты
# yum install ocfs2-tools
Конфигурируем /etc/ocfs2/cluster.conf
# service o2cb configure
# /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
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Файловая система
Создаем файловую систему на любом сервере
# 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=remountro,localflocks,commit=60,localalloc=4,data=writeback,barrier=0
Монтируем файловую систему на обоих узлах
# mkdir –p /mnt/shared/;chkconfig ocfs2 on;service ocf2 start
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Проверка
Перезагружаем любой сервер и убеждаемся, что все
работает…
…делаем, чтобы работало
Не забываем, что узлов 2
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Результат
Сервера настроены, корректно видят друг друга
Имеют достаточно надежное файловое хранилище
До какой-то степени серверам не опасны проблемы
потери связи (bonding)
Получили два сервера с общей файловой системой которая остается
доступна даже после падания любого из серверов… но зачем?
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Что дальше…?
А дальше мы будем делать виртуальные машины
Их диски в виде файлов будут размещены на
высокодоступной файловой системе
Конфиги виртуальных машин также сохраним в
высокодоступную файловую систему
Обеспечим балансировку запросов внутри виртуальных
машин
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Структура раздела /mnt/shared
/mnt/shared/
/mnt/shared/data/
/mnt/shared/data/image1.bin
…
/mnt/shared/xml/
/mnt/shared/xml/vhost1.xml
…
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Создаем виртуальную машину
Запускаем установку ОС
# virt-install -n vhost1 -l
http://mirror.yandex.ru/centos/7/os/x86_64/ --vnc -disk path=/mnt/shared/data/iamge1-root.bin,size=200 –
prompt
Устанавливаем ОС через VNC
Сохраняем конфигурацию
# virsh dumpxml vhost1 > /mnt/shared/xml/vhost1.xml
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Тестируем различные фишки
Живая миграция виртуальной машины
# 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
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Что мы получили
Ферму, на которой работает несколько независимых
виртуальных машин
Каждая виртуальная машина может быть мигрирована
на любой из двух узлов в случае аварии или с целью
оптимизации ресурсов
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Добились ли мы цели?
Тут должен быть красивый
вопросик но я его не нашел

+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Тогда продолжим
Делаем «правильные» виртуальные машины для web-
проекта
Настраиваем сервисы повышающие доступность
Тестируем
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Правильные виртуальные машины
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Инструменты
Отказоустойчивые адреса – ucarp, corosync+pacemaker
и т.д.
Файловая синхронизация – csync2, OCFS2
БД – зависит от БД
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Инструменты – отказоустойчивые адреса
HSRP – надежное аппаратное решение, требует наличия
поддерживающего оборудования. Не знает ничего про другие сервисы,
чем и ограничивается возможность применения.
carp/ucarp – просто, надежно. Не знает ничего про другие сервисы, чем и
ограничивается возможность применения.
Heartbeat – фактически предок pacemaker/corosync. Конфигурировать
сложно
Pacemaker/corosync – аналог heartbeat но проще настраивать.
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Инструменты – отказоустойчивые адреса
Управление
сервисами
Простота настройки
Особенности
HSRP
Нет
Зависит от
конечного
решения
Требуется аппаратная
поддержка
UCARP
Нет
Просто
Инструмент
heartbeat
Да
pacemaker/corosync
Да
Сложно
Может некорректно
работать
при высокой нагрузке на
cистему
Средне
Может некорректно
работать
при высокой нагрузке на
cистему
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Инструменты – файловая синхронизация
Асинхронная – csync2
Работает по cron
Нагружает дисковую подсистему на время
синхронизации
Позволяет выполнять обновления кода с провекой
до публичного показа посетителю
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Инструменты – файловая синхронизация
Синхронная – OCFS2, GFS2
Не любит конкурентные операции записи (не
пригодна для ведения файлового кеша
динамичного проекта)
Плохо кешируется средствами ОС (в отличии от
NFS/CIFS)
Гарантирует синхронность изменения на всех узлах
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Инструменты – СУБД
Mysql multimaster replication
«подводные камни» всем известны, обходные
решения достаточно широко распространены
Красическая асинхронность со своими «+» и «–»
MySQL Galera
Синхронная репликация со своими «+» и «-»
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Инструменты – СУБД
PostgreSQL BDR
Есть ряд ограничений, но они обычно обходятся для
типового проекта
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Инструменты – СУБД
Oracle RAC
К сожалению не удалось заставить стабильно
работать. Скорость репликации на уровне drbd
оказалось недостаточно для работы ASM.
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Вопросы..?
И снова тут должен быть
красивый вопросик но я его так
и не нашел…
+7 (812) 322-95-87 (Санкт-Петербург)
+7 (495) 646-85-55 (Москва)
info@lenvendo.ru
Бесперебойного полета Вашим проектам!
www.lenvendo.ru
info@lenvendo.ru
Мы поддерживаем:
Download