DRBD + HEARTBEAT
Hui explicaré com poder tenir un servidor redundant. No estic parlant d’un simple RAID de HDD’s, sino de redundacia de servidor completa, que si per el que siga el servidor es para es puga donar servei igualment. Està clar que per a això fan falta 2 servers, un que és el principal i l’altre que està ‘dormint’ i quan detecta que el primer està ‘caigut’ es ‘desperta’ i continua donant el mateix servei.
Açò s’aconseguix amb el DRBD i el HEARTBEAT. El que fa el DRBD és el mateix que un RAID1 però a nivell de xarxa i el funcionament és el següent: Es sincronitzen dues particions iguals (una a cada servidor) formant una partició virtual visible pels dos servidors, el servidor principal té accés RW i el secundari sols R. Quan el principal cau, el secundari passa a ser el principal i ja té accés RW. Tota la informació que s’escriu a aquesta partició, s’escriu tant a la partició física del propi servidor principal, com a la partició física del servidor secundari (enviant les dades per la xarxa), així quan el servidor primari torna a estar en funcionament es torna a sincronitzar les particions i torna a ser el principal.
El HEARTBEAT és l’encarregat de monitoritzar l’estat dels dos servidors i activar el servidor secundari quan el primari ha caigut, sense el HEARTBEAT aquesta feina s’hauria de fer en manual, que també l’explicaré per si ho tenim que fer alguna vegada.
Una vegada explicat més o menys els conceptes (qui no tinga qualsevol cosa clara que pregunte, jeje) passe ja a començar el tutorial:
No és requisit indispensable que les dues máquines siguen idèntiques, sols les particions a sincronitzar (encara que per a que no es veja afectat el rendiment del servidor si que deuria de ser igual)
Les particions que van a utilitzar-se en el DRBD no tindran cap format ni estaran muntades, en aquest cas anem a dir que les particions que anem a utilitzar són la /dev/sda7 per als dos servidors i que tenen el mateix tamany.
Les proves les he fet en la debian 6.0 i he utilitzat el repositori per a la instal·lació de les aplicacions, no he compilat res (facilet ehhhh), anem allà.
Instal·lació i configuració del DRBD
Instal·lem el paquet drbd8-utils:
root@pc:/# apt-get install drbd8-utils
I ara passem a configurar-ho, comentar que per a la comunicació entre els dos servidors es neccesita tenir oberts els ports 7788/TCP i 7799/TCP, com estic fent més o menys un ‘copy & paste’ del manual de la web oficial (però traduït, per supost) vaig a utilitzar les mateixes ip’s, configuracions,…. Així que les IP’s dels servidors, és a dir que el servidor1 té la IP 10.1.1.31 i el servidor 2 la 10.1.1.32 i utilitcen la tarjeta de xarxa eth1.
Mantenint la configuració que tenen per defecte sols hem de fer la següent modificació en el fitxer /etc/drbd.conf:
resource r0 {
on alice {
device /dev/drbd1;
disk /dev/sda7;
address 10.1.1.31:7789;
meta-disk internal;
}
on bob {
device /dev/drbd1;
disk /dev/sda7;
address 10.1.1.32:7789;
meta-disk internal;
}
}
Si ja tenim un resource el borrem i posem este, i ara toca explicar-lo un poc. En el tag resource es definix les particions locals a utilitzar en el servidors i la partició virtual que es crea. Podem vore que el nom que es definix en resource és el r0 i que hi ha dos servidors dins del resource el servidor ‘alice’ i el ‘bob’. En cada servidor està definit la seva IP, la seva partició que s’utilitzarà i la partició virtual a la que pertany.
Així que per a extrapolar-ho al nostre cas sols falta canviar els noms dels servidors, les IP’s i les particions locals que s’utilitzaran, la partició virtual (el ‘device’) podem mantindre el que apareix en l’exemple.
Continuem en l’activació de l’aplicació amb els següents programes (teniu en compte que on diu ‘r0’ es modificarà per el nom del resource que heu posat vosaltres):
Primer carreguem el mòdul al kernel:
root@pc:/#modprobe drbd
Es crea el metadata del resource, aqueta acció sols es farà la primera vegada que es cree el device (en aquest cas el /dev/drbd1)
root@pc:/#drbdadm create-md r0
Apareixerà un resultat paregut a aquest:
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.
success
i continuem amb
root@pc:/#drbdadm up r0
Si falla aquest comandament es pot provar d’una altra forma:
root@pc:/#drbdadm attach r0
(asocia el device als servidors)
root@pc:/#drbdadm syncer r0
(configura els paràmetres de sincronització)
root@pc:/#drbdadm connect r0
(connecta els servidors)
Be fent la primera opcció o la segona opcio per a comprovar que està tot correcte es fa un
root@pc:/#cat /proc/drbd
I el que mostre per pantalla serà similar al que es mostra
version: 8.3.0 (api:88/proto:86-89)
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by buildsystem@linbit, 2008-12-18 16:02:26
1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:200768
Diu Inconsistent/Inconsistent perquè encara no s’ha sincronitzat.
Si fins a ací ha funcionat tot correcte… ja toca sincronitzar les dues particions, si no ha funcionat tot correcte reviseu la configuració que algo mal hi haurà. Per a sincronitzar les particions i dir quin servidor és el node principal s’executa el següent comandament (sols en el servidor principal):
root@pc:/#drbdadm -- --overwrite-data-of-peer primary r0
i començarà una sincronització completa de les particions, que depenent del tamany de la partició, recursos dels servidors i connexió de xarxa tardarà més o menys (ja vos assegure que tardar si que tarda prou en completar). Per a monitoritzar la sincornització es pot fer un
root@pc:/#watch -n1 cat /proc/drbd
i veurem com va avançant la sincronització.
Posada en marxa i comprovació del sistema
Ara que ja ha acabat de sincronitzar-se les particions ja podem començar a utilitzar-les. Recordar que en aquest sistema el servidor primari té accés de RW a la partició /dev/drbd1 mentre que el servidor secundari sols R.
Com aquesta partició no té format ni està utilitzant-se el primer que es fa és donar-li format
root@pc:/#mkfs.ext3 /dev/drbd1
i la muntem en un directori que creem nosaltres
root@pc:/#mount /dev/drbd1 /mnt
root@pc:/#mount
Aixina que ens mostre si s’ha muntat o no i ja podem accedir a ella i crear qualsevol cosa, ara si s’intenta fer el mateix des del servidor secundari es comprovarà que no es pot fer. Si es necessitara poder accedir es tindria que configurar d’una altra forma (si que es pot) fent els dos servidors com a principals i utilitzar un altre format (GFS per exemple), i açò està explicat en la web principal i en altres blogs.
Passem a comprovar que el que es modifica en el primer servidor també ho fa al secundari. Desmuntem la partició en el primari:
root@pc:/#umount /mnt
Canviem el rol en el server primari a secundari
root@pc:/#drbdadm secondary r0
I ara fem el contrari en el server secundari
root@pc:/#drbdadm primary r0
root@pc:/#mount /dev/drbd1 /mnt
root@pc:/#mount
Així comprovem que està muntat correctament i si accedim al seu punt de muntatge trobarem que les dades són les mateixes, tornem a fer la mateixa operació per a deixar-ho com estava (el servidor principal el tornem a fer principal i el secundari el tornem a fer secundari)
I si tot ha anat be ja tenim en marxa el DRBD!
Instal·lació i configuració del HeartBeat
root@pc:/#apt-get install heartbeat
I ja tenim instal·lada l’aplicació (que senzilles són les coses!), ara passem a la configuració d’aquest. Es necessiten 3 arxius de configuració:
/etc/ha.d/authkeys <- definix el xifratge
/etc/ha.d/ha.cf <-paràmetres per a la monitorització
/etc/ha.d/haresources <- paràmetres d’IPV, servici a monitoritzar,…
Abans de fer res en el fitxer /etc/hosts es posen dues linies amb les ip’s i noms dels dos servidors per a un millor funcionament del heartbeat. Després ja podem passar a crear els arxius de configuració ja que al fer-ho jo he vist que no se me crea cap arxiu, els creem a ma i funciona igual, primer creem el authkeys amb el següent contingut
auth 1
1 crc
és l’autenticació menys forta però per a proves funciona be, per a altres métodes més forts buscar ‘per ahí’
Ara li toca al ha.cf
# File to write debug messages to
debugfile /var/log/ha-debug
#
#
# File to write other messages to
#
logfile /var/log/ha-log
#
#
# Facility to use for syslog()/logger
#
logfacility local0
#
#
# A note on specifying "how long" times below...
#
# The default time unit is seconds
# 10 means ten seconds
#
# You can also specify them in milliseconds
# 1500ms means 1.5 seconds
#
#
# keepalive: how long between heartbeats?
#
keepalive 2
#
# deadtime: how long-to-declare-host-dead?
#
# If you set this too low you will get the problematic
# split-brain (or cluster partition) problem.
# See the FAQ for how to use warntime to tune deadtime.
#
deadtime 30
#
# warntime: how long before issuing "late heartbeat" warning?
# See the FAQ for how to use warntime to tune deadtime.
#
warntime 10
#
#
# Very first dead time (initdead)
#
# On some machines/OSes, etc. the network takes a while to come up
# and start working right after you've been rebooted. As a result
# we have a separate dead time for when things first come up.
# It should be at least twice the normal dead time.
#
initdead 120
#
#
# What UDP port to use for bcast/ucast communication?
#
udpport 694
# Set up a unicast / udp heartbeat medium
# ucast [dev] [peer-ip-addr]
#
# [dev] device to send/rcv heartbeats on
# [peer-ip-addr] IP address of peer to send packets to
#
ucast eth0 (ip_del_otro_servidor)
#
auto_failback on
# Tell what machines are in the cluster
# node nodename ... -- must match uname -n
node server1
node server2
#
bcast eth1
D’on es modifica el ‘ucast eth0 (ip_del_otro_servidor)
‘ posant-li la IP de l’altre servidor (en el servidor primari es posa la IP del servidor secundari i en el secundari la del primari) i en node es posen els noms dels servers. Si s’utilitzara una altra interficie diferent a eth1, es modificaria el bcast.
Ja donem pas al haresources:
servidor1 drbddisk::r0 Filesystem::/dev/drbd1::/mnt::ext3 IPaddr2::192.168.1.10/24/eth1 apache2
Tot està a la mateixa línia, en primer lloc es posa el nom del servidor principal, després del drbddisk:: es posa el nom del resource que s’havia posat en el DRBD, supose que el que està en el filesystem no fa falta que ho explique, no? partició, punt de muntatge i format de la partició, jejeje
El punt de IPaddr2 és important, aquesta és la IP virtual. Gràcies a aquesta IP el sistema és redundant, ja que encara que cada servidor té una IP diferent, el servidor que estiga en actiu també respondrà a la IP virtual, tenint així sempre un servidor que responga a esta IP (a no ser que es paren els 2). Està format per la IP/màscara/interficie de xarxa.
I al final es posa els servicis a monitoritzar, en aquest cas he posat el apache2, que no ho he dit en aquest post però l’he instal·lat també per a poder ser monitoritzat.
Aquestos 3 fitxers de configuració seran iguals en els dos servidors (exeptuant l’apartat ucast del ha.cf)
Es reinicia el Heartbeat en els dos servidors, que si està tot correcte no donarà cap error
root@pc:/#/etc/init.d/heartbeat restart
I ja ho tenim funcionant!
Posada en marxa i comprovació
He posat “posada en marxa” però és mentida, ja està en marxa, dona igual és per a seguir els mateixos apartats en una aplicació que en l’altra.
El primer pas per a comprovar que el HeartBeat funciona correctament és fer un ping a la IP virtual, si respon es que està tot correcte, de vegades quan es posa en marxa per primera vegada li costa un poc respondre al ping.
I el segon pas de comprovació és simular la caiguda del servidor primar i comprovar que el secundari es ‘desperta’. Per a això deixem un ping constant a la IP virtual des d’una màquina que no siga ni el server1 ni el server2 i executem:
root@pc:/#/etc/init.d/heartbeat stop
El ping es pedrà per uns pocs segons i tornarà a fer-se. En aquest moment intentem accedir al punt de muntatge del servidor2 i es comprovarà que s’ha muntat automàticament.
Ara simulem que torna tot a la normalitat
root@pc:/#/etc/init.d/heartbeat start
I es veu que el ping es torna a perdre i torna a fer-se, també es comprova que la partició s’ha muntat en el servidor1 i que ja no està accesible des del servidor2.
Ara ja si que es pot dir que tenim el servidor redundant en marxa. Ara falta utilitzar-lo en algun servei, si puc més endavant penjaré en un nou post com muntar un servidor FTP amb usuari per MySQL sobre aquest sistema.
Webs d’interés
==============
http://www.drbd.org/users-guide/ –D’on he tret la instal·lació del DRBD
http://bytecoders.net/content/servidores-de-alta-disponibilidad-heartbeat.html –D’on he tret la instal·lació del HeartBeat
http://bytecoders.net/content/servidores-de-alta-disponibilidad-drbd.html –D’on he tret la instal·lació del HeartBeat
https://help.ubuntu.com/10.04/serverguide/C/drbd.html
http://www.howtoforge.com/drbd-on-centos-4.5