DRBD All about

Vozdra,

imam DRBD konfigurusan mirroring i na njemu NFS export. Zanima me da li je moguce DocumentRoot podesiti tako da koristi NFS?

Fala.

ako to hoces da radis moras onda documentroot exportovat preko nfs-a i eventualno dati mu rw pristup i mountat nfs na apache server . zasto to uopste radis ?

imam apache cluster i trebam mirror sa jednog node-a na drugi. Sa rsyncom ne mogu raditi jer se radi o dinamicnom sadrzaju i java sesijama. Ako imas neki bolji prijedlog, bio bih jako zahvalan. Inace nisam u ovom svijetu a dalo mi to da radim u firmi pa se evo patim. Dakle, pitanje: kako napraviti high availability apache cluster? Moja ideja je bila sa DRBD-om napraviti block device, na njemu nakaciti NFS i DocumentRoot definisati preko NFS-a. Sve motriti sa Heartbeat-om. Bilo kakav savjet bi bio i vise nego dobrodosao.

najbolje bi ti bilo da taj storage stavis direktno u apache server-e … i “otarasis” se tih nfs server-a … direktno mirrorujes preko apache masina storage drbd-om (dodijelis mu komplet disk ili particiju) i preko heartbeat-a nadgledas servise i drbd particije. ovako kako si zamislio ide takodje , samo sto ce ti storage biti sporiji nego direktno da diskove stavis u masine gdje ti je apache i bit ce ti malo teze za podesit heartbeat posto ako nadgledas nfs server-e onda imas 4 masine u clusteru inace bi imo 2 i constraints bi ti bili onda u heartbeat-u laksi za konfigurisat . takodje nebi vise moro na 4 masine konfigurisat heartbeat .

Pa to sam i ja htio uraditi. Dakle, imam ovako:

node1:

1 HDD - System - ovdje je instaliran apache
2 HDD - Storage - ovaj disk ce DRBD koristiti

node2:

1 HDD - System - ovdje je instaliran apache
2 HDD - Storaga - ovaj HDD je mirrror prvog storage diska

DRBD je kontrolisan sa Heartbeatom.

load1:
1 HDD - System - ovdje je instaliran ldirector i vrsi loadbalancing za apache

load2:
1 HDD - System - backup balancer

load1 i load2 kontrolise Heartbeat. Apache-u se pristupa preko virtuelne IP adrese.

Ono sto sam ja dalje htio uraditi je na storage prebaciti samo web sadrzaj (/var/www) a instalaciju ostaviti na System. Problem mi je, kako to definisati u httpd.conf-u? I sta ako recimo DRBD rikne na node1 i node2 preuzme, sta se onda desava sa DocumentRoot-om?

Koliko znam, drbd se predstavlja kao layer iznad dvije masine, dakle ako na jednoj rikne, druga ce raditi bez problema, s tim sto ce se izvrsiti sync novijih podataka kada se “pokvareni” node vrati u zivot.

[quote=Amar]Pa to sam i ja htio uraditi. Dakle, imam ovako:

node1:

1 HDD - System - ovdje je instaliran apache
2 HDD - Storage - ovaj disk ce DRBD koristiti

node2:

1 HDD - System - ovdje je instaliran apache
2 HDD - Storaga - ovaj HDD je mirrror prvog storage diska

DRBD je kontrolisan sa Heartbeatom.

load1:
1 HDD - System - ovdje je instaliran ldirector i vrsi loadbalancing za apache

load2:
1 HDD - System - backup balancer

load1 i load2 kontrolise Heartbeat. Apache-u se pristupa preko virtuelne IP adrese.

Ono sto sam ja dalje htio uraditi je na storage prebaciti samo web sadrzaj (/var/www) a instalaciju ostaviti na System. Problem mi je, kako to definisati u httpd.conf-u? I sta ako recimo DRBD rikne na node1 i node2 preuzme, sta se onda desava sa DocumentRoot-om?[/quote]
Ok , skonto sam sta hoces. Odradi DRBD i Heartbeat kako si zamislio , koristi protokol C za DRBD (pogledaj config koji sam ti pastiro dole). Posto vidim da ce ti konfiguracija apache-a ostat u /etc diru MORAS je manuelno sinhronizovat. Druga mogucnost ti je da konfiguraciju premjestis na DRBD particiju i samo na tom mjestu / aktivnom node-u konfigurises. Ako premjestis konfiguraciju morat ces apache-u reci gdje ti je config (pogledaj OCF resource skriptu za apache u heartbeatu)

Za podesavanje DocumentRoot-a napravi poseban Virtuelni host za tu “Shared IP” adresu i samo u tom vhostu koristi “DocumentRoot /drbd/mount/point/path/to/www”

to je u biti sve sto moras konfigurisat sto se tice documentroot-a … onaj u apache2.conf -u ostavi netaknut i u /var/www folder ubaci samo prazan index.html … nastimaj logove da se spasavaju na drbd particiji tako ces moc vrsiti rotaciju na jednom mjestu i statistiku. osim toga morat ces za apache podesit logrotate skripte tj. nove napraviti koje ce logove rotirati na drbd particiji (ako za vhost napravis logove da budu na drbd particiji).

Pogledaj drbd dokumentaciju jer ces vjerovatno morat promijenit “al-extents 31;” . Posto ta vrijednost za moju konfiguraciju odgovara , preporucujem ti da sam svoju prokalkulises (sve pise u dokumentaciji). Osim toga podesi syncer rate (kalkulaciju ces naci isto u dokumentaciji).

I pogasi sve module iz apache-a koji ti ne trebaju smanjit ce ti probleme kod update-a i preporucio bi ti da napravis dvije identicne virtuelne masine da mozes update na njima testirat pa tek onda na “live” serveru installirat. cim heartbeat dodje u igru a i shared storage tu ima sta po zlu krenut.
Koristi “stonith” u heartbeatu (ali ne preko ssh-a , vec ako imas neki PDU koji mozes kontrolisat preko mreze ili iLO ili DRAC ili neku slicnu stvar)

[code]global {
usage-count no;
}

common {
syncer {
rate 10M;
verify-alg md5;
}
}

resource apache {
protocol C;

handlers {
local-io-error “echo o > /proc/sysrq-trigger ; reboot -f”;
}

startup {
wfc-timeout 0;
degr-wfc-timeout 120;
}

disk {
on-io-error detach;
}

net {
sndbuf-size 1M;
timeout 60;
connect-int 10;
ping-int 10;
ping-timeout 5;
max-buffers 32768;
cram-hmac-alg “sha512”;
shared-secret “somepasswordherepls”;
after-sb-0pri discard-least-changes;
after-sb-1pri call-pri-lost-after-sb;
after-sb-2pri call-pri-lost-after-sb;
rr-conflict disconnect;
}

syncer {
rate 10M;
verify-alg md5;
al-extents 31;
}

on node1 {
device /dev/drbd0;
disk /dev/sda2;
address 172.16.11.21:7790;
flexible-meta-disk internal;

}

on node2 {
device /dev/drbd0;
disk /dev/sda2;
address 172.16.11.22:7790;
meta-disk internal;
}
}[/code]

DRBD i nije toliki problem.

Recimo rikne DRBD na node1. Heartbeat ce dici DRBD kao primary na node2, mountdati drbd block device i nema problema.

Sta u ovoj situaciji:

Na node1 rikne apache. DRBD i dalje fercera, dakle storage je mount-ovan na node1.

Apache i dalje fercera na node2. Problem je sto drb block device nije mountovan na node2 jer drbd fercera na node1 i drb device moze biti mount-an samo na primary-ju.

Kako konfigurisati httpd.conf da koristi raspolozivi drbd block device?

Ili sam ja totalno na pogresnom putu.

@amar: zasto imas loadbalancer ?

[quote=Amar]DRBD i nije toliki problem.

Recimo rikne DRBD na node1. Heartbeat ce dici DRBD kao primary na node2, mountdati drbd block device i nema problema.

Sta u ovoj situaciji:

Na node1 rikne apache. DRBD i dalje fercera, dakle storage je mount-ovan na node1.

Apache i dalje fercera na node2. Problem je sto drb block device nije mountovan na node2 jer drbd fercera na node1 i drb device moze biti mount-an samo na primary-ju.

Kako konfigurisati httpd.conf da koristi raspolozivi drbd block device?

Ili sam ja totalno na pogresnom putu.[/quote]
pa lijepo napravi vhost i tamo upisi documentroot za taj host.
onda moras napraviti service / resource monitoring za apache u heartbeat-u . tako da ces gledat svako malo vremena dali je apache dostupan i dali je stranica dostupna i ako je sve tu heartbeat nista ne radi , cim monitor operacija ne vrati dobre rezultate (recimo “resource not running” ili tako nesto) heartbeat gasi sve servise na aktivnom node-u i pokusa ih startat na drugom / pasivnom node-u.

@maher_

hvala velika. drbd.conf mi je skoro pa identican. DRBD je vec konfigurisan i fercera bez problema. Ako ti nije frka i ako imas vremena, mozes li postati primjer apache2.conf, dio koji se odnosi na vhost sa virtuelnom IP adresom?

loadbalancer je tu prvenstveno zbog mysql cluster-a. Nije neophodan za apache ali s obzirom da je vec konfigurisan mislim da nece praviti probleme ako dodam loadbalancing i za apache.

[quote=Amar]@maher_

hvala velika. drbd.conf mi je skoro pa identican. DRBD je vec konfigurisan i fercera bez problema. Ako ti nije frka i ako imas vremena, mozes li postati primjer apache2.conf, dio koji se odnosi na vhost sa virtuelnom IP adresom?[/quote]
evo primjera

[code]<VirtualHost *>

DocumentRoot "/opt/chroot/apache"
Options -Indexes
ServerAdmin admin@something.tld

CustomLog /var/log/apache2/www-access-redirect.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" env=redirect
CustomLog /var/log/apache2/www-access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" env=!redirect
ErrorLog /var/log/apache2/www.error.log

ovdje dalje stavi sve sto ti treba (npr. php config opcije ili rewrite engine itd …)

[/code]
procitaj detaljnije ovo http://httpd.apache.org/docs/2.2/vhosts/ i dokumentaciju koja objasnjava gdje i sta radi koji file u apache-u.

Danke sehr.

Bitte sehr :slight_smile:

Dakle, update, sve konfigurisano i fercera bez problema.

Nisam ukljucio auto_failback a trebao bi mi. Nisam bas najbolje skontao stonith, pa ako neko ima volje i vremena da nakaci kakav example config file, bio bih jako zahvalan. (ovo jako zahvalan znaci castim pivom, prvom prilikom).

[quote=Amar]Dakle, update, sve konfigurisano i fercera bez problema.

Nisam ukljucio auto_failback a trebao bi mi. Nisam bas najbolje skontao stonith, pa ako neko ima volje i vremena da nakaci kakav example config file, bio bih jako zahvalan. (ovo jako zahvalan znaci castim pivom, prvom prilikom).[/quote]
evo ga , naravno tvoj config ne mora bit uopste ovakav radi parametara za iLO . ovo je config za heartbeat2 ako koristis heartbeat3 onda ce config malo drugacije izgledat (promijenili su neke parametre , nemam sad pri ruci primjer , ali ce biti slican i kod editovanja ces saznat dali je sve ok ako radis sa heartbeat3 crm shell-om). u ovom dole config-u koristim node1-ilo i node2-ilo to su ip adrese koje sam definiso u /etc/hosts file-u (ako imas dns mozes i dns-om).

sto se tice auto_failback-a zasto ga trebas ?

resources sekcija:

<primitive class="stonith" type="external/riloe" provider="heartbeat" id="stonith-node1"> <operations> <op name="monitor" interval="120s" timeout="55s" id="stonith-node1-monitor" on_fail="restart"/> <op name="start" timeout="60s" id="stonith-node1-start"/> <op name="stop" timeout="60s" id="stonith-node1-stop"/> </operations> <instance_attributes id="stonith-node1-inst-attr"> <attributes> <nvpair id="stonith-node1-inst-attr-hostlist" name="hostlist" value="node1"/> <nvpair id="stonith-node1-inst-attr-RI_HOST" name="RI_HOST" value="node1-ilo"/> <nvpair id="stonith-node1-inst-attr-RI_HOSTRI" name="RI_HOSTRI" value="node1-ilo"/> <nvpair id="stonith-node1-inst-attr-RI_LOGIN" name="RI_LOGIN" value="heartbeat"/> <nvpair id="stonith-node1-inst-attr-RI_PASSWORD" name="RI_PASSWORD" value="njinjakornjaca"/> <nvpair id="stonith-node1-inst-attr-ilo_powerdown_method" name="ilo_powerdown_method" value="button"/> <nvpair name="ilo_can_reset" id="stonith-node1-inst-attr-ilo_can_reset" value="0"/> <nvpair id="stonith-node1-inst-attr-ilo_protocol" name="ilo_protocol" value="2.0"/> </attributes> </instance_attributes> </primitive> <primitive class="stonith" type="external/riloe" provider="heartbeat" id="stonith-node2"> <operations> <op name="monitor" interval="120s" timeout="55s" id="stonith-node2-monitor"/> <op name="start" timeout="60s" id="stonith-node2-start"/> <op name="stop" timeout="60s" id="stonith-node2-stop"/> </operations> <instance_attributes id="stonith-node2-inst-attr"> <attributes> <nvpair id="stonith-node2-inst-attr-hostlist" name="hostlist" value="node2"/> <nvpair id="stonith-node2-inst-attr-RI_HOST" name="RI_HOST" value="node2-ilo"/> <nvpair id="stonith-node2-inst-attr-RI_HOSTRI" name="RI_HOSTRI" value="node2-ilo"/> <nvpair id="stonith-node2-inst-attr-RI_LOGIN" name="RI_LOGIN" value="heartbeat"/> <nvpair id="stonith-node2-inst-attr-RI_PASSWORD" name="RI_PASSWORD" value="njinjakornjaca"/> <nvpair id="stonith-node2-inst-attr-ilo_powerdown_method" name="ilo_powerdown_method" value="button"/> <nvpair name="ilo_can_reset" id="stonith-node2-inst-attr-ilo_can_reset" value="0"/> <nvpair id="stonith-node2-inst-attr-ilo_protocol" name="ilo_protocol" value="2.0"/> </attributes> </instance_attributes> </primitive>
constraints sekcija:

<rsc_location rsc="stonith-node1" id="stonith-location-node1-0"> <rule id="prefered_stonith-location-node1-0" score="-INFINITY" boolean_op="and"> <expression attribute="#uname" value="node2" id="expr-prefered_stonith-location-node1-0" operation="ne"/> </rule> </rsc_location> <rsc_location rsc="stonith-node1" id="stonith-location-node1-1"> <rule id="prefered_stonith-location-node1-1" score="INFINITY" boolean_op="and"> <expression attribute="#uname" value="node2" id="expr-prefered_stonith-location-node1-1" operation="eq"/> </rule> </rsc_location> <rsc_location rsc="stonith-node2" id="stonith-location-node2-0"> <rule id="prefered_stonith-location-node2-0" score="-INFINITY" boolean_op="and"> <expression attribute="#uname" value="node1" id="expr-prefered_stonith-location-node2-0" operation="ne"/> </rule> </rsc_location> <rsc_location rsc="stonith-node2" id="stonith-location-node2-1"> <rule id="prefered_stonith-location-node2-1" score="INFINITY" boolean_op="and"> <expression attribute="#uname" value="node1" id="expr-prefered_stonith-location-node2-1" operation="eq"/> </rule> </rsc_location>

E fala, ziv bio.

failback mi treba jer je primary server znatno bolji od sekundarnog. Ali nije toliko bitno, za sada.

Dakle, nazalost cijeli setup mi ne fercera kako bi trebao.

Napravio sam drb disk i HA ga mount-a u /storage

Tu imam direktorije www, mysql, nfs i config. U config-u mi se nalaze neke konfiguracijske datoteke koje mi je mrsko dva puta editovati, tako da je na hostovima napravljen simbolic link. Taj dio fercera.

Evo moj haresources:

Dakle, HA dodijeljuje virtuelnu IP adresu, mount-a DRB Disk, dize apache2, mysql, nfs, tomcat i activemq.

I ovo sve super fercera, dakle, node1 je primary, na njemu su svi ovi servisi podignuti, a node2 ceka da nesto na node1 rikne kako bi preuzeo servise.

E tu nastaje problem. Naime, koliko sam shvatio HA, dovoljno je da bilo koji od servisa definisanih u haresources rikne, pa da se pogase svi ostali i sve se prebaci na node2. Kod mene to ne fercera. Recimo zaustavim apache2 na node1 i umjesto da se sve pogasi i da node 2 postane primary, to se ne desi. Jedina situacija kada se to desi je kada oborim heartbeat.

Any ideas?

yeah , use heartbeat2 or heartbeat3+pacemaker or corosync (openais)

ovo sto ti koristis je heartbeat1 i on nema mogucnosti nadgledanja resursa. mogo bi koristit npr. ovo http://www.linux-ha.org/mon

zasto radis sa heartbeat1 ?