DRBD/NIC bonding okosságok, HA cluster linuxon

Fórumok

Üdv,

Elkezdtem foglalkozni a HA témakörrel, össze is szerettem volna rakni egy rendszert Ubunu 12.04, ifenslave, DRBD, heartbeat használatával.

Van 4 hálókártyám (2 a külső forgalomra(bond0), 2 pedig a szinkronizációhoz (bond1)).

Amúgy csak a bond0 (eth0, eth1) van engedélyezve szépen megy is, felállnak a kártyák, pingelhető a közös cím. Viszont ha ugyanannak a szisztéma alapján beállitom a bond1-et is (eth2, eth3), akkor már nem éled fel a rendszer.

ifconfig:
auto eth0
iface eth0 inet manual
bond-master bond0
bond-primary eth0

auto eth1
iface eth1 inet manual
bond-master bond0

auto eth2
iface eth2 inet manual
bond-master bond1
bond-primary eth2

auto eth3
iface eth3 inet manual
bond-master bond1

auto bond0
iface bond0 inet static
address 192.168.1.10
netmask 255.255.255.0
bond-mode active-backup
bond-miimon 100
bond-slaves eth0 eth1

auto bond1
iface bond1 inet static
address 192.168.2.10
netmask 255.255.255.0
bond-mode active-backup
bond-miimon 100
bond-slaves eth2 eth3

Hol rontom el?

Hozzászólások

A cat /proc/net/bonding/bond0,1 mit mond?

---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"

A bond1nél az iface név sorban nem az eth2 és eth3nak kellene szerepelnie?

auto eth0
iface eth0 inet manual
bond-master bond0
bond-primary eth0

auto eth1
iface eth1 inet manual
bond-master bond0

auto eth2
iface eth0 inet manual
bond-master bond1
bond-primary eth2

auto eth3
iface eth1 inet manual
bond-master bond1

Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn

Köszönöm, ezen túljutottam, most viszont a következő hibába futottam bele:

DRBD-vel szeretném szinkronban tartani a kép gépen lévő /dev/sdb disket.

Be is állitottam a configban: http://pastebin.com/vgW1wNz5

De amikor kiadom a drbdadmn create-md lamp hibát dob:

Command 'drbmeta 0 v08 /dev/sdb internal create-md' terminated with exit code 40'

És azt javasolja használjak külső metadata tárolót. De én internalt akarok. Az sdb jelenleg egy üres ext3, ami a /data alá van mountolva.

-------------------------
A csapatjáték fontos. Nem csak téged lőhetnek!

Kösz kösz, már csak pár apróság van, de majd holnap folytatom...

mkfs.jfs -q /dev/drbd0
mkdir -p /srv/data
mount /dev/drbd0 /srv/data

Már csak jfsutilst kell felrakni, de ahhoz szét kell bombázni a bondot (virtualboxban van) és egy NAT-olt kártyát belőni.
-------------------------
A csapatjáték fontos. Nem csak téged lőhetnek!

A drbd-t tekinthetető egy hálózati raid mirrornak is. A dolog azért hangsúlyos, mert egy olyan eszközt, amit oda adtunk akár drbd-nek, akár raid tömbnek, azt a továbbiakban csak a megfelelő új eszköz bejegyzésen keresztül kezelünk, direktben soha! Tehát nem teszünk rá fs-t és pláne nem csatoljuk.
A vinnyogás, hogy használj külső metadata tárolót, pont azért van, mert az sdb-re tettél egy ext3-at, ami a teljes lemez kapacitást kihasználja: tehát nincs hely a metadata-nak! Ha előbb hozod létre a drbd tömböt, akkor az üres helyről lefoglalta volna a metadata használatához szükséges területet, majd a maradék helyet használhattad volna te adattárolásra. Így ez nem megy.
A másik, amit gondolj végig: ha ezt így hagyod, akkor bármit is írsz most a /data alatt, az _közvetlenül_ megy a /dev/sdb-re, tehát lekerüli a drbd drivert, így az nem tudja áttolni a változásokat a másik gép lemezére. Pont a lényeg marad le.

A /data-t mindenképpen csatold ki, azt majd úgy kell csatolni, mint /dev/drbd0 eszköz. Az, hogy ez fizikailag majd a /dev/sdb-re fog dolgozni, az egy másik történet.

Döntsd el, hogy meg akarod-e tartani a jelenlegi ext3fs-t az sdb-n. Mivel üres, szerintem nem érdemes. Ennek fényében a következőket javasolnám:
umount /data - sdb kicsatolása
dd if=/dev=zero of=/dev=sdb bs=1M count=100 - winyó elejének pucolása, hogy senki ne jöjjön lázba, hogy ott van valami
/etc/init.d/drbd stop
/etc/init.d/drbd start - ha megy, mehet restart is. a lényeg, hogy olvasson újra mindent, így szembesüljön az sdb lepucolt állapotával
ha eddig megvan, akkor tégy egy próbát ismét a drbdadm create paranccsal...

Hello,

Erre már rájöttem én is, megoldódott ez a probléma. Kapott egy üres particiót, rámetn a metadata, /dev/drbd0 alól van felcsatolva. Ha rakok oda fájt át is kerül:

node1: drbdadm secondary lamp
node1: umount /dev/drbd0

node2: drbdadm primary lamp
node2: mount /dev/drbd0 /data --> ott van a fájl, amit a node1-en hoztam létre. pipa.

A gondom most a heartbeattel van. Egy alap ha.cf-et adtam meg, haresources-ban benne van a közös IP, a drbd lemez és partició. Viszont inditáskor nem hajlandó felvenni a cimet, Starting High-Availability services: IPaddr\[21315\]: INFO: Resource is stopped Done. üzenetet ad. Logban nincs semmi releváns, viszont ha nyomok egy /etc/init.d/heartbeat stop-ot, akkor lelövi a drdb-t (és az lecsatolja a /data-t), viszont a node2-n nem indul és mountolódik fel.

Megjegyzem hogyha a node2-t rakom primary-ra, akkor és kézzel kell mountolnom a lemezt.
-------------------------
A csapatjáték fontos. Nem csak téged lőhetnek!

No, eljutottam addig hogy már majdnem minden szép és jó ( DRBD és HEARTBEAT).

Ha a node1-en elinditom egyedül a hb-t szépen elinditja a processeket, mountolja a /dev/drbd0-t, beállitja az IP cimet, minden klafa. Viszont ha elinditom mellé a node2-t átadja a processeket, a node2 elinditja őket, de utána egyből le is állitja. Ekkor jön az a pont, hogy mindkét nodeom azt hiszi, hogy a másik az aktiv és egyik se futtatja a processeket.

Mi lehet a gond?
-------------------------
A csapatjáték fontos. Nem csak téged lőhetnek!

Ha csak a node2-n inditom a HB-t akkor ez történik:

- észreveszi hogy a node1 halott
- átváltja a státuszát activeba
- beállitja a közös IP-t
- futtatná ezt: /etc/ha.d/resource.d/drbddisk lamp (ez a neve a drbd resourceomnak) start
- resource is stopped - -> ezért már nem fog elindulni a mysql és az apache mivel nem tudja a nem futó drbd0-t mountolni
- mivel nem tudja elinditani a mysql-t és az apacheot visszaadja a processeket a (nem futó) node1-nek.

Még annyi hogy Amikor mindkét node fut egyik sem futtatja a processeket. Ha leállitom a node2-t a node1-en elindulnak a programok, mountolódik a disk is (vica versa nem megy).

A node1 logjában ezt látom:
Node1 Info: node1 wants to go standby [foreign]
Node1 WARN: No reply to standby request. Standby request cancelled.

-------------------------
A csapatjáték fontos. Nem csak téged lőhetnek!

kézzel tudom mountolni a drbd primary nodeon.

drbd-overview:
node1
0:lamp Connected Primary/Secondary UpToDate/UpToDate C r----- /data jfs 2G 31M 2.0G 2%

node2
0:lamp Connected Secondary/Primary UpToDate/UpToDate C r-----

Azt sejtem, hogy azért nem tudja mountolni a ndoe2-n a HB a drbd0-t mert nem váltja át primary-ra. Ez nem lehet?

update: a probléma megoldódott, viszont előjött 1 másik. Ha egyedül inditom bármelyik nodeon a HB-t akkor nem inditja el a processeket, viszont ha mindkettőn elinditom és az egyiket lelövöm, elindulnak a processek a másik nodeon és később már megy az oda-vissza állás gond nélkül..

-------------------------
A csapatjáték fontos. Nem csak téged lőhetnek!

Nem akarok dual primaryt, csak azt, hogy a node1 és node2 egyből menjen HB-vel.

mint irtam most igy megy a dolog:

node1: HB start
node2: HB start
-------------> nem megy egyiken se a process (apache, mysql, drbd mount)
node2: HB stop
-------------> node1-en elindulnak a processek
node2: HB start
-------------> node1 továbbra is aktiv marad
node1: HB stop
-------------> node2-n elindulnak a processek

Tehát az elején kellene rávennem a HB-ket hogy eldöntsék ki az aktiv. Jelnleg auto_failback off-al megy a rendszer (ez jó is igy).
-------------------------
A csapatjáték fontos. Nem csak téged lőhetnek!

Visszatérnék egy kicsit még a bonding témára.

A korábbi config szerint van beállitva a bonding:
bond0:eth0-eth1 és bond1:eth2-eth3

cat /proc/net/bonding/bond0 azt mondja mindkét interface up állapotban van és a jelenlegi aktiv az eth0. Ez jó is. Viszont ha kihúzom a kábel a virtuális hálókártyából (virtualbox), akkor megszakad a ping.

A bond0 státusza még mindig up, át is állt a bond node az eth1-re, viszont a ping nem megy.

Ez mitől van?
-------------------------
A csapatjáték fontos. Nem csak téged lőhetnek!

Igen de a virtualbox csak egy virtuális kárytát kap a windowstól ha jól emlékszem, ergo ha az nem elérhető már mindegy neked az alatt mennyi van a rendszereidnek. Tehát ha azt az egyet osztod 8 fele, akkor ő a szűk keresztmetszet mivel "fizikailag" csak 1 kártyád van ami ugye ebben az esetben virtuális szóval faramuci a helyzet ha jól értem.