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

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


Автор: Chemtech

Отказоустойчивый кластер - это комбинация из одного или более узлов (серверов) на двух или более общих дисках, которые называются группой ресурсов. Группу ресурсов вместе с ее сетевым именем и IP-адресом, которые составляют кластерное приложение или сервер, называют отказоустойчивым кластером или экземпляром отказоустойчивого кластера. В сети отказоустойчивый кластер представлен как один компьютер, но при этом он обеспечивает переход на другой узел в случае, если текущий узел становится недоступным. Отказоустойчивый кластер в сети выступает в роли обычного приложения или отдельного компьютера, но поддерживает дополнительные возможности, увеличивающие его доступность.

Чтобы создать HA кластер нужно создать отказоустойчивость по нескольким направлениям:

Содержание

[править] Почему 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 по схеме:

Raid 10 and Raid 1.png

[править] Установка 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

[править] Дополнительная информация