Отказоустойчивый кластер для виртуализации
Материал из Xgu.ru
- Автор: Chemtech
Отказоустойчивый кластер - это комбинация из одного или более узлов (серверов) на двух или более общих дисках, которые называются группой ресурсов. Группу ресурсов вместе с ее сетевым именем и IP-адресом, которые составляют кластерное приложение или сервер, называют отказоустойчивым кластером или экземпляром отказоустойчивого кластера. В сети отказоустойчивый кластер представлен как один компьютер, но при этом он обеспечивает переход на другой узел в случае, если текущий узел становится недоступным. Отказоустойчивый кластер в сети выступает в роли обычного приложения или отдельного компьютера, но поддерживает дополнительные возможности, увеличивающие его доступность.
Чтобы создать HA кластер нужно создать отказоустойчивость по нескольким направлениям:
- Агрегирование каналов позволяет работать при повреждении одного из кабелей;
- Программный RAID в Linux;
- DRBD распределённое реплицируемое блочное устройство;
- Proxmox VE High Availability Cluster
[править] Почему Proxmox VE?
- Возможность использования как KVM так и OpenVZ.
- Web vnc-client.
- Возможность кластеризации.
- Неплохая система бэкапов виртуальных машин.
[править] Ключевые возможности Proxmox VE
- Простое управление через веб-интерфейс;
- Мониторинг нагрузки в реальном времени;
- Библиотека установочных образов (в локальном или удаленном хранилище);
- Подключение к «физической» консоли гостевых систем непосредственно из браузера (по VNC);
- Объединение серверов в кластер с возможностью живой миграции виртуальных машин (без остановки гостевой * системы);
- Быстрое развертывание гостевых систем из шаблонов (доступно только для OpenVZ);
- Автоматическое резервное копирование виртуальных машин.
[править] Устанавливаем Debian GNU/Linux amd64 Squeeze
Устанавливаем Debian GNU/Linux amd64 Squeeze. О том как установить лучше обратиться к русскому первоисточнику
[править] Дисковая подсистема
Предлагаю два варианта RAID
[RAID 6] — похож на RAID 5, но имеет более высокую степень надёжности — под контрольные суммы выделяется ёмкость 2-х дисков, рассчитываются 2 суммы по разным алгоритмам. Требует более мощный RAID-контроллер. Обеспечивает работоспособность после одновременного выхода из строя двух дисков — защита от кратного отказа. Для организации массива требуется минимум 4 диска[2]. Обычно использование RAID-6 вызывает примерно 10-15% падение производительности дисковой группы, по сравнению с аналогичными показателями RAID-5, что вызвано большим объёмом обработки для контроллера (необходимость рассчитывать вторую контрольную сумму, а также прочитывать и перезаписывать больше дисковых блоков при записи каждого блока).
[RAID 10] — зеркалированный массив, данные в котором записываются последовательно на несколько дисков, как в RAID 0. Эта архитектура представляет собой массив типа RAID 0, сегментами которого вместо отдельных дисков являются массивы RAID 1. Соответственно, массив этого уровня должен содержать как минимум 4 диска. RAID 10 объединяет в себе высокую отказоустойчивость и производительность. Нынешние контроллеры используют этот режим по умолчанию для RAID 1+0. То есть, один диск основной, второй — зеркало, считывание данных производится с них поочередно. Сейчас можно считать, что RAID 10 и RAID 1+0 — это просто разное название одного и того же метода зеркалирования дисков. Утверждение, что RAID 10 является самым надёжным вариантом для хранения данных, ошибочно, т.к., несмотря на то, что для данного уровня RAID возможно сохранение целостности данных при выходе из строя половины дисков, необратимое разрушение массива происходит при выходе из строя уже двух дисков, если они находятся в одной зеркальной паре.
Устанавливаем Raid 10 по схеме:
[править] Установка Debian на Linux RAID
[править] Установка grub на все жесткие диски
На все диски нужно устанвовить загрузчик. Пример установка на диск sda.
grub-install --recheck --no-floppy /dev/sda
После установки сервера можно проверить скорость чтения и записи.
[править] Проверка скорости чтения на диск для linux
hdparm -tT /dev/sd[a,b,c,d,e,f]
[править] Проверка скорости записи на диск для linux
dd bs=1M count=128 if=/dev/zero of=test oflag=dsync
[править] cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] md0 : active raid6 sda1[5] sdd1[4] sde1[3] sdc1[2] sdb1[1] 732584448 blocks super 1.2 level 6, 512k chunk, algorithm 2 [5/5] [UUUUU] unused devices: <none>
[править] cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 UUID=a62944fe-3a52-4983-9cd5-1aede6561711 / ext3 errors=remount-ro 0 1 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 tmpfs /tmp tmpfs nodev,nosuid,size=500M 0 0 /dev/md0p1 /var/lib/vz ext4 defaults 0 2
[править] /var/lib/vz на drbd
[править] debian source.list
deb http://ftp.debian.org/debian squeeze main contrib non-free deb http://ftp.debian.org/debian squeeze-updates main contrib non-free deb http://security.debian.org/ squeeze/updates main contrib non-free
[править] Устанавливаем поддержку кириллицы
aptitude install console-cyrillic
[править] Устанавливаем полезные утилиты
aptitude install atop htop iotop
[править] Устанавливаем утилиту ifenslave и ethtool для настройки bonding
aptitude install ifenslave-2.6 ethtool
[править] Устанавливаем утилиту vlan
aptitude install vlan
[править] Устанавливаем комплект утилит для администрирования bridge-utils
aptitude install bridge-utils
[править] Устанавливаем комплект утилит для получения точного времени
apt-get install ntp ntpdate
[править] Скачивание пакетов на другом сервере для поднятия сети
aptitude download ifenslave-2.6 ethtool vlan bridge-utils
[править] Устанавливаем скачанные пакеты
dpkg -i *.deb
[править] Настройки сети
[править] На сервере
Файл: /etc/network/interfaces |
auto lo iface lo inet loopback # interface GigabitEthernet on the core switch auto eth0 iface eth0 inet manual post-up ethtool -K eth0 tso off #На Intel гигабитных сетевушках # interface GigabitEthernet on the core switch auto eth1 iface eth1 inet manual post-up ethtool -K eth1 tso off #На Intel гигабитных сетевушках auto bond0 iface bond0 inet manual slaves eth0 eth1 bond_miimon 100 bond_mode 4 auto bond0.7 iface bond0.7 inet manual vlan-raw-device bond0 auto bond0.370 iface bond0.370 inet manual vlan-raw-device bond0 auto bond0.371 iface bond0.371 inet manual vlan-raw-device bond0 auto bond0.374 iface bond0.374 inet manual vlan-raw-device bond0 auto bond0.379 iface bond0.379 inet manual vlan-raw-device bond0 auto vmbr7 iface vmbr7 inet manual bridge_ports bond0.7 bridge_stp off bridge_fd 0 auto vmbr370 iface vmbr370 inet manual bridge_ports bond0.370 bridge_stp off bridge_fd 0 auto vmbr371 iface vmbr371 inet manual bridge_ports bond0.371 bridge_stp off bridge_fd 0 auto vmbr374 iface vmbr374 inet static address 10.7.4.45 netmask 255.255.255.0 gateway 10.7.4.1 bridge_ports bond0.374 bridge_stp off bridge_fd 0 auto vmbr379 iface vmbr379 inet manual bridge_ports bond0.379 bridge_stp off bridge_fd 0 |
[править] Загружаемые модули
Файл: /etc/modules |
loop bridge 8021q drbd |
[править] Выбор консольного редактора файлов
update-alternatives --config editor
[править] Версии модулей drbd
До установки pve ядра версия модуля drbd была 8.3.7, а после установки стала 8.3.10.
modinfo drbd filename: /lib/modules/2.6.32-5-amd64/kernel/drivers/block/drbd/drbd.ko version: 8.3.7
modinfo drbd filename: /lib/modules/2.6.32-12-pve/kernel/drivers/block/drbd/drbd.ko version: 8.3.10
Также можно посмотреть версию модуля и API в /Proc
cat /proc/drbd version: 8.3.7 (api:88/proto:86-91)
cat /proc/drbd version: 8.3.10 (api:88/proto:86-96)
При установке drbd из backports версия API изменится и вы не сможете вернуть ее назад.
[править] Если произошла рассинхронизация
drbdadm -- --do-what-I-say primary all
А затем
drbdadm primary all
[править] Устанавливаем Proxmox VE на Debian Squeeze(amd64)
Перед установкой proxmox нужно добавить ip и имя сервера в файл /etc/hosts
127.0.0.1 localhost 10.7.4.48 rxeon.minobr.local rxeon
И обязательно уберите строку:
127.0.1.1 localhost
cat /etc/hostname lxeon
* Устанавливаем Proxmox VE на Debian Squeeze(amd64)
[править] fencing
fencing - часть кластерной системы конфигурации. Эта технология блокирует доступ к узлу, с которым отсутствует связь, к общим ресурсам кластера.
[править] Drbd
[править] Устанавливаем drbd8-utils
Install the necessary build tools: apt-get install git-core git-buildpackage fakeroot debconf-utils docbook-xml docbook-xsl dpatch xsltproc autoconf flex Build the package: mkdir drbd cd drbd git clone http://git.drbd.org/drbd-8.3.git cd drbd-8.3 git checkout drbd-8.3.10 dpkg-buildpackage -rfakeroot -b -uc NOTE: The "git checkout" command is not necessary today since 8.3.10 is the latest version. According to my understanding of the drbd documentation if there is ever a newer version for 8.3 that is the correct way to get the specific version you want to build. To install the newer version of the userland: dpkg -i drbd8-utils_8.3.10-0_amd64.deb
[править] Конфиг DRBD
resource r0 { protocol C; startup { wfc-timeout 15; # non-zero wfc-timeout can be dangerous (http://forum.proxmox.com/threads/3465-Is-it-safe-to-use-wfc-timeout-in-DRBD-configuration) degr-wfc-timeout 60; become-primary-on both; } net { cram-hmac-alg sha1; shared-secret "my-secret"; allow-two-primaries; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } on lxeon { device /dev/drbd0; disk /dev/md2; address 10.7.4.45:7788; meta-disk internal; } on nettop { device /dev/drbd0; disk /dev/sda4; address 10.7.4.9:7788; meta-disk internal; } }
[править] Создание метаданных
Перед стартом лучше выполнить команду для создания метаданных
drbdadm create-md r0
[править] Протокол B в режиме --allow-two-primaries не работает
Restarting all DRBD resources:0: Failure: (139) Protocol C required
[править] Скорость синхронизации
Без опции syncer скорость была
cat /proc/drbd version: 8.3.10 (api:88/proto:86-96) GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by phil@fat-tyre, 2011-01-28 12:17:35 0: cs:SyncSource ro:Secondary/Secondary ds:UpToDate/Inconsistent C r----- ns:250752 nr:0 dw:0 dr:250752 al:0 bm:15 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2535288 [>...................] sync'ed: 9.3% (2535288/2786040)K finish: 0:31:32 speed: 1,336 (1,284) K/sec
Если добавить опцию
syncer { rate 110M; #110 для гигабитной сети }
То скорость возрастет:
cat /proc/drbd version: 8.3.10 (api:88/proto:86-96) GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by phil@fat-tyre, 2011-01-28 12:17:35 0: cs:SyncSource ro:Secondary/Secondary ds:UpToDate/Inconsistent C r----- ns:257284 nr:0 dw:0 dr:265344 al:0 bm:16 lo:0 pe:5 ua:63 ap:0 ep:1 wo:b oos:1771896 [=>..................] sync'ed: 13.0% (1771896/2028664)K finish: 0:00:20 speed: 85,588 (85,588) K/sec
[править] Фильтруем устройства для LVM
/etc/lvm/lvm.conf filter =[ "a|/dev/drbd0|", "r|.*|" ]
pvcreate /dev/drbd0
vgcreate drbdvg /dev/drbd0
[править] Proxmox VE High Availability Cluster
[править] Дополнительная информация
- Агрегирование каналов
- VLAN
- Linux Bridge
- Linux Bonding
- KVM
- DRBD
- Установка и настройка отказоустойчивого кластера на основе drbd8 и heartbeat2
- Gentoo+drbd+ocfs2
- RAID в wikipedia
- http://www.alsigned.ru/?p=490
- http://odba.ru/showthread.php?s=65ef726e8a897f1e6a8d5b6703ce9458&t=474
- http://stormbp.blogspot.com/2012/05/proxmox-ve-2-cluster-with-drbd.html
- http://www.nedproductions.biz/wiki/configuring-a-proxmox-ve-2.x-cluster-running-over-an-openvpn-intranet
- https://alteeve.com/w/Main_Page