Вообшм повозился с этими зверюшками, настроил настроил и вот наконецто достроил ... башка уже никак некатит ) вот решил обратится к господам гуру ... поставлено на Генте настраивал по этой документации ... вот конфиги: drbd.conf - http://paste2.org/p/126159 ha.cf - http://paste2.org/p/126160 haresources -
Код
hptux1 IPaddr::192.168.0.70/24/eth0/192.168.0.255
hptux1 drbddisk::drbd0 Filesystem::/dev/drbd0::/backup/mysql::ext3::noatime mysql
на обеих сторонах конфиги одинаковы, настраивал на одном потом через сцп на другой ... после первой конфигурации ( ище не было рестарта ), все нормально синхронизировалось (drbd) и статусы соответсвенно были, Primary/Secondary - Secondary/Primary вот после рестарта все началось ...
начал тестить, первый поднимается IP 0.70 эму присвоивается, раздел монитурется ... hptux1>
mount | grep drbd
/dev/drbd0 on /backup/mysql type ext3 (rw,noatime)
drbdadm state drbd0 для обеих машин ... hptux1> Primary/Unknown hptux2> Secondary/Unknown drbdadm cstate drbd0 hptux1> StandAlone hptux2> StandAlone вот тута уже барда ...
когда отключаю первый то второму ИП присваивается, потом уже все, раздел не монтируется и соответсвенно мускул не можт стартануть ...
Читал? http://www.netup.ru/articles.php?n=13 У меня heartbeat+drbd крутися года полтора. Кластер на этой связке построен. На котором UTM (биллинг) крутится. Ну и попутно ты ещё конфиг drbd не привёл. Хошь - могу свой рабочий конфиг привести. Твои логи, честно говоря, смотреть лень. Только drbd у меня старый. В новом синтаксис конфига другой. Кстати - перекидывать ресурсы между нодами кластера можно принудительно. Командами - /usr/lib/heartbeat/hb_standby, /usr/lib/heartbeat/hb_takeover Мануалы посмотри на эти команды.
Схема, для этого конфига: 1. На каждой ноде 2 сетевые. Одна - IP 10.10.10.20 (на одной ноде) и 10.10.10.21 (на второй). 2 сетевые соединены между собой гиговым кросс-овер кабелем и имеют адреса 192.168.0.1, 0.2. 2. Общий шлюз (см. выше) - 10.10.10.1. Он же используется в качестве "пингера". 3. Синхронизация drbd делается через гиговый линк. 4. Общий интерфейс - eth0:0 - он и поднимается на основной ноде. IP - 10.10.10.22 Состояние drbd можно проверять ещё /etc/init.d/drbd status
Видать, у тебя более новая версия drbd. Я писал выше - эти умники в 8-й версии синтаксис очень сильно поменяли. Я на одной ноде обновил сдуру. Трахался минут 40, чтобы поднять. Потом плюнул и откатился на старую версию. Надо будет в стороне где-нить прогнать. А вообще эта ситуация описана для ситуации "сплит-брейн" - когда обе ноды считают себя главными и начинается маппет-шоу. У меня, когда начинает дурить drbd (было как-то несколько раз) давал другую команду - drbdadm -- --do-what-I-say primary all
SOLDIER пишет: Чё-то опять хвалёный Битрикс глючит.
а я думал что эт токо у меня )))
вот вчера посмотрел уже 8.3.0 вышла, навсякий скачанул, в ченджлогах посмотрел, подумал можт есть кокой то баг с этим "мозгом", но не было ...
вот что нашелся на форуме ...
Цитата
If you have different data across each node then you may have a split brain. To fix this run the following command. Note this assumes that testcluster1 is more up to date than testcluseter2. If the opposite is true reverse the commands for each.
testcluster1: drbdadm connect all testcluster2: drbdadm -- --discard-my-data connect all
вообшм с этим разабрался, синхронизация закончилась, рестартнул и все нормально со статусами, отключаю первый второй встает ...
вот написал маленький скриптик для решения проблемы, можт кому-то понадобицо ...
но эт для 8.3.0 версии, так как команду state заменили на role
Код
#!/bin/bash
##########################################
# split-brain detection script for drbd
##########################################
# System enviroments
PATH=/usr/bin:/bin:/usr/sbin:/sbin
NODE1="hptux1"
NODE2="hptux2"
ROLE_STATUS=$(drbdadm role drbd0)
NORM_STATUS="Primary/Secondary"
if [ "${HOSTNAME}" == "${NODE1}" ]; then
PING_NODE="${NODE2}"
else
PING_NODE="${NODE1}"
fi
if [ "${ROLE_STATUS}" != "${NORM_STATUS}" ]; then
echo ${ROLE_STATUS}
ping -c 4 -W 4 ${PING_NODE} >/dev/null
if [ "$?" -eq "0" ]; then
drbdadm primary all
drbdadm connect all
ssh root@${PING_NODE} '/sbin/drbdadm -- --discard-my-data connect all'
else
echo "${PING_NODE} is unreachable ..."
fi
fi
Да так - что это задача heartbeat - отслеживать доступность с обоих нод некоего внешнего ресурса (у меня, например, кошки, к которой подключены обе ноды), отслеживать пинг через общий линк (через который, собственно, drbd и синхронизирует разделы) И в случае недоступности общего ресурса с основной ноды перекинуть все ресурсы (и службы, и поднять общий IP) на запасную ноду. При этом drbd перекидывается из состояние Primary/Secondary в Secondary/Primary АВТОМАТИЧЕСКИ! По крайней мере - мои эксперименты с кластером это подтвердили.
ну еслиб heartbeat делал такое, то я бы не мучался тута )
пример когда приходит в состояние Secondary/Unknown или Primary/Unknown. "auto_failback OFF" Включаем первый нод, потом второй, все нормально работает, статусы Primary/Secondary и наоборот ... Отключаем первый, второй все берет на себя (status:Pryimary/Unknown), включаем первый и опля, получаем статус ... Нод1: Secondary/Unknown Нод2: Primary/Unknown. в этом случае heartbeat нифига не берет на себя ... незнаю можт что-то криво настроил ...
SOLDIER пишет: Да так - что это задача heartbeat - отслеживать доступность с обоих нод некоего внешнего ресурса (у меня, например, кошки, к которой подключены обе ноды), отслеживать пинг через общий линк (через который, собственно, drbd и синхронизирует разделы) И в случае недоступности общего ресурса с основной ноды перекинуть все ресурсы (и службы, и поднять общий IP) на запасную ноду. При этом drbd перекидывается из состояние Primary/Secondary в Secondary/Primary АВТОМАТИЧЕСКИ!
При разрыве соединения heartbeat только запускает один из скриптов прописанных в конфиге. То что называется АВТОМАТИЧЕСКИ делается либо за счет ручками написанного скрипта либо за счет Xen в котором четко прописан тип ресурса не phy а drbd.