Обсуждение статьи тематического каталога: Создание кластера высокой доступности для XEN с Live миграцией в CentOS 5.3 с использованием VLAN и DRBD (xen cluster virtual centos)Ссылка на текст статьи: http://www.opennet.me/base/net/xen_cluster_howto.txt.html
Нормальная статья, я через много граблей уже сам прошёл, единственно у меня после установки нового ведра "2.6.18-164.el5xen" устанавливается drbd версии "DRBDADM_VERSION=8.3.2" и модули к ней.
Так вот с новой drbd у меня в HVM (disk = [ 'drbd:resource,hda,w' ]) не видит жёсткий диск, пришлось напрямую устройство использовать, потерял автоматом живую миграцию, но это не критично конечно ))), главное что отказоустойчивость есть.
PS для репликации drbd использую агрегирование интерфейсов, скорость устраивает.
Дык http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=1438 должен исправить "(disk = [ 'drbd:resource,hda,w' ]) не видит жёсткий диск"
Косяк в drbd83-8.3.2-6.el5_3В патче для pygrub
drbdresource = string.strip(os.popen('drbdadm sh-resources ' + file).readline(), " \n")команде drbdadm sh-resources /dev/drbd0 глубоко фиолетово на 3й параметр и она всегда выводит ВСЕ drbd-ресурсы.
Костыль.В патче для pygrub
drbdresource = string.strip(os.popen('drbd_find_resource.sh ' + file).readline(), " \n")
#### drbd_find_resource.sh #####!/bin/sh
DRBDADM="/sbin/drbdadm"
test -x $DRBDADM || exit 5DEV=$1
if [ -z "$DEV" ]
then
echo "Usage: `basename $0` /dev/drbdN"
exit 1
fifor RESOURCE in `$DRBDADM sh-resources`; do
for DEVICE in `$DRBDADM sh-dev $RESOURCE`; do
if [ "$DEVICE" = "$DEV" ]
then echo $RESOURCE
fi
done
done
> на 3й параметрвернее на параметры в принципе :)
CentOS 5.4
stop()
{
# Collect list of domains to shut down
if test "$XENDOMAINS_AUTO_ONLY" = "true"; then
rdnames
fi
echo -n "Shutting down Xen domains:"
while read LN; do
#Добавил строку. Без этого у меня мигрировали абсолютно все домены.
found="0"
#
parseln "$LN"
if test $id = 0; then continue; fi
echo -n " $name"
if test "$XENDOMAINS_AUTO_ONLY" = "true"; then
for i in ${NAMES[@]}
do
if test $found = "0"; then
if test $i = $name; then
found=1
fi
fi
done
if test $found = "0"; then
echo -n "(skip)"
continue
fi
fi
# XENDOMAINS_SYSRQ chould be something like just "s"
# or "s e i u" or even "s e s i u o"
# for the latter, you should set XENDOMAINS_USLEEP to 1200000 or so
SLES 11 SP1 + DRBD + XEN + COROSYNC + HEARTBEAT + PACEMAKERПришлось:
1.пропатчить pygrub как выше.
2.Во всех вирт.машинах прописать что то вроде
disk = [ "phy:drbd0,xvda1,w" ]
3.Мой конфиг "crm configure show":
node ha1
node ha2
primitive xen_vm1 ocf:heartbeat:Xen \
params xmfile="/etc/xen/vm/vm1" \
op monitor interval="10s" \
op start interval="0s" timeout="30s" \
op stop interval="0s" timeout="300s" \
meta allow-migrate="true"
property $id="cib-bootstrap-options" \
dc-version="1.1.2-ecb1e2ea172ba2551f0bd763e557fccde68c849b" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore" \
default-resource-stickiness="1000" \
last-lrm-refresh="1293409634"
pacemaker нормально c drbd работать НЕ умеет! (Если загружается одна нода, то он ждет вторую. Приходится руками делать drbdsetup /dev/drbd0 primary -o и руками запускать машину. А потом зкогда аменишь вышедшие из строя железки на другой мертвой ноде и она заработает. Разгребаешь руками конфликты у drbd на работающей ноде и только что отремонтированой и включенной.)
4.Каждая вирт.машина у меня лежит на отдельном /dev/drbd0. Это важно на случай синхронизации, так как pacemaker не знает ничего о drbd в моей конфигурации. Для свапа уже внутри /etc/fstab вирт.машины подключается обычный файл через loop.
5.Если время появится, то опишу подробно.