LINUX.ORG.RU

Cluster трудности в настройке


0

0

Здравствуйте.
Есть в наличие два сервера, одинаковой конфигурации.
ОС стоит Centos 5.5.
Задача: Пользователи работают с рашаренными данными, при падении одного сервера, данные на втором должны быть актуальными и работа пользователей не прекращается.
Для отказоустойчивой работы развернут кластер, на нем требуется развернуть следующие службы: Samba, Firebird.
Для сетевой репликации запущена служба drbd, все ноды имеют статус primary.
Кластерную файловую систему я решил применить GFS2.
Конфигурация drbd.conf
resource r0 {
protocol C;
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
become-primary-on both;
}
net {
allow-two-primaries;
after-sb-0pri discard-least-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
disk {
on-io-error detach;
}
syncer {
rate 100M;
}

on srvprod1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.9.195:7789;
meta-disk internal;
}

on srvprod2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.9.161:7789;
meta-disk internal;
}
}
Конфигурация cluster.conf
<?xml version=«1.0»?>
<cluster alias=«cluster» config_version=«12» name=«cluster»>
<fence_daemon post_fail_delay=«0» post_join_delay=«3»/>
<clusternodes>
<clusternode name=«srvprod1.avto.krsn.ru» nodeid=«1» votes=«1»>
<fence>
<method name=«1»>
<device name=«fence_manual» nodename=«srvprod1.avto.krsn.ru»/>
</method>
</fence>
</clusternode>
<clusternode name=«srvprod2.avto.krsn.ru» nodeid=«2» votes=«1»>
<fence>
<method name=«1»>
<device name=«fence_manual» nodename=«srvprod2.avto.krsn.ru»/>
</method>
</fence>
</clusternode>
</clusternodes>
<cman expected_votes=«1» two_node=«1»/>
<fencedevices>
<fencedevice agent=«fence_manual» name=«fence_manual»/>
</fencedevices>
<rm>
<failoverdomains>
<failoverdomain name=«prodaja» ordered=«0» restricted=«0»/>
</failoverdomains>
<resources>
<smb name=«AB» workgroup=«WG»/>
<clusterfs device=«/dev/drbd0» force_unmount=«0» fsid=«56450» fstype=«gfs2» mountpoint=«/mnt/drbd» name=«gfs2» options=«»/>
</resources>
<service autostart=«1» domain=«prodaja» name=«prodaja» recovery=«relocate»>
<smb ref=«AB»/>
</service>
<service autostart=«1» domain=«prodaja» name=«gfs» recovery=«restart»>
<clusterfs ref=«gfs2»/>
</service>
</rm>
</cluster>

Cluster Status for cluster @ Mon Aug 16 09:30:21 2010
Member Status: Quorate

Member Name ID Status
------ ---- ---- ------
srvprod1.avto.krsn.ru 1 Online, Local
srvprod2.avto.krsn.ru 2 Online

Самба установлена, но в настройки smb.conf я не лазил, так как я прочитал, что кластерная служба сама создат нужный файл.
Проблема у меня следующая: я не могу понять как мне добавить в кластер службу самба.
Мне нужно использовать службу drbd или нет?

В гугле я много искал информации. Но часть статей используют кворумный диск (на нем данные пишутся или для нод служебная информация, я не понял) или используется связка lvm+gfs2.
Я понимаю, что у меня каша в голове.
Буду признателен за подсказки или примеры конфигураций кластера с самбой.

Лучше из двух серверов даже не пытаться сделать кластер, т.к. будет обязательно split-brain и прочие бяки, плавали, знаем. В лучшем случае что можно сделать, это обычную (не кластерную) ФС, один сервак в режиме primary, другой - slave. Если основной падает, то поднимает резервный (вручную или через heartbeat). Для нормальной работы кластерной ФС нод должно быть больше 3, чтобы мог образоваться кворум, но DRBD насколько я знаю более двух нод пока не поддерживает...

blind_oracle ★★★★★ ()
Ответ на: комментарий от blind_oracle

А сколько примерно времени занимает переключение? Не будет ли ломаться таблицы при переключении серверов. Имеет смысл делать самбу кластерную (CTDB), через DRBD делать репликацию?

zks1980 ()
Ответ на: комментарий от zks1980

Ну переключение зависит от количества сервисов.

Строго говоря происходит так: Heartbeat на вторичном сервере мониторит первичный минимум по двум каналам - кроссовер езернет (по которому к примеру идет репликация DRBD) и по ком-порту, чем больше - тем лучше. Как толька хартбиты от мастера пропадают, он переводит свой DRBD в праймари режим, монтирует ФС, которая ессесно должна быть полностью журналируемая, чтобы сохранить консистентность, и запускает указанные в настройках ресурсы (айпи адреса себе забирает, запускает демонов и т.п.) в нужном порядке. Таблицы в БД рушится не будут, если юзать транзакционные таблицы (InnoDB в MySQL).

Можно форсировать передачу ролей между серваками вручную, тогда мастер контроллируемо остановит все свои ресурсы, а слэйв поднимет их в обратном порядке.

Самбу кластерную не надо.

Проблемы могут возникнуть если по какой-то причине умрут все хартбит-линки, и оба сервака начнут думать что они главные, захавают себе одинаковые адреса, в общем сплит-брейн.

Для предотвращения такого придумали Fencing, физическая изоляция второй ноды. Там методов мульйон, от спец-девайса рубящего ему питалово и отключение порта на свиче до сброса ядерной боеголовки)))

blind_oracle ★★★★★ ()
Ответ на: комментарий от blind_oracle

Решил использовать связку drbd+heartbeat.
На сервере три сетевые карты:
eth0 192.168.100.1-2/24 использую для мониторинга, что сервера живы
eth1 192.168.9.0.24 - клиенты на этой сети
eth2 192.168.1.0.24 - другие клиенты

Конфиг drbd.conf
resource r0 {
protocol C;
startup {
wfc-timeout 60;
degr-wfc-timeout 60;
}
net {
after-sb-0pri discard-younger-primary;
after-sb-1pri consensus;
rr-conflict disconnect;
}
disk {
on-io-error detach;
}
syncer {
rate 100M;
al-extents 257;
}
on srvprod1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.9.195:7789;
meta-disk internal;
}

on srvprod2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.9.161:7789;
meta-disk internal;
}
}

Конфиг ha.cf
debugfile /var/log/ha-debug
logfile   /var/log/ha-log
logfacility   local7
keepalive 1
deadtime 30
warntime 10
initdead 60
#udpport   694
#baud   19200
#serial   /dev/ttyS0   # Linux
bcast   eth0 eth1      # Linux
#mcast eth0 225.0.0.1 694 1 0
#ucast eth0 192.168.1.2
auto_failback on
#stonith baytech /etc/ha.d/conf/stonith.baytech
#stonith_host * baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3 rps10 /dev/ttyS1 kathy 0
#stonith_host kathy rps10 /dev/ttyS1 ken3 0
#watchdog /dev/watchdog
node   srvprod1
node   srvprod2
ping 192.168.9.249
#ping_group group1 10.10.10.254 10.10.10.253
#hbaping fc-card-name
#respawn userid /path/name/to/run
respawn hacluster /usr/lib64/heartbeat/ipfail
#apiauth client-name gid=gidlist uid=uidlist
apiauth ipfail gid=haclient uid=hacluster

Конфиг haresources
srvprod1   192.168.9.252/24/eth1
srvprod1   192.168.1.250/24/eth2
srvprod1   Filesystem::/dev/drbd0::/mnt/drbd::ext3 smb xinetd

service drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:27
m:res cs ro ds p mounted fstype
0:r0 Connected Primary/Secondary UpToDate/UpToDate C /mnt/drbd ext3

Когда я пытаюсь перегрузить компьютер со статусом secondary, первый мастер есть так и остался, но когда мастер перегружаю, то начинается интересное.
То drbd становится Secondary/Secondary то Primary/Unknown
И соответсвенно, самба из-за этого не запускается.
У меня подозрение, что я не правильно drbd настроил.
Ткните носом где я неправильно настроил, а то уже запутался в настройках

zks1980 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.