Corosync y Pacemaker
Corosync y Pacemaker
disponibilidad
---
(I) Cluster bsico de alta disponibilidad con Corosync+Pacemaker
(II) Cluster bsico de alta disponibilidad con Corosync+Pacemaker
---
Tengo que reconocer que desde que empec en esto de la informtica el tema del clustering
siempre me !a llamado la atenci"n#
Tambin tengo que decir que !asta !ace muy poquito ni siquiera pod$a imaginarme como
funcionaba esto por dentro#
Coincidiendo con el desarrollo de mi Proyecto Integrado para finali%ar el ciclo de &'I (oy a
escribir una serie de art$culos sobre este tema# &s$ que espero que este sea el primero de una serie de
documentaci"n que profundice ms en la alta disponibilidad (de la que por cierto !ay escasa
documentaci"n en )spa*ol)#
&ntes de empe%ar me gustar$a llamar la atenci"n sobre la gran cantidad de posibles configuraciones
y la amplitud de posibilidades en el mundo del clustering# +o entrar en asuntos de clustering de
supercomputaci"n (no estoy preparado en esa materia)#
,- )l concepto de recurso
.o primero que (amos a encontrar al traba/ar con un cluster es un recurso# )s fundamental
comprender el concepto de recurso porque nos abrir la puerta a entendernos con lo que !ay detrs
y con las posibilidades de configuraci"n#
& priori un recurso se corresponde con un ser(icio# )sto quiere decir lo siguiente0
-1 'er(icio !ttp (apac!e) -1 2ecurso !ttp (apac!e)
-1 'er(icio sgbd (mysql) -1 2ecurso sgbd (mysql)
3etc###4
5na (e% comprendida e interiori%ada esta correspondencia podemos decir que un recurso puede ser
algo muc!o ms completo que un ser(icio y que tiene caracter$sticas a*adidas0
6o(ilidad0 5n ser(icio pertenece a una mquina# 5n recurso no pertenece a una mquina
(ya lo (eremos)#
Integraci"n0 Podemos conseguir un grado muy alto de integraci"n entre distintos recursos7
relaciones de locali%aci"n relaciones de orden de arranque y parada etc###
&grupaci"n0 Podr$amos decir que un recurso en algunos casos est compuesto de (arios
ser(icios e incluso de otros recursos#
&s$ que podemos resumir que cuando !ablamos de un cluster de alta disponibilidad nos referimos a
un recurso que se ofrece y no a un ser(icio#
8- )squemas de monta/e
)9isten (arias configuraciones posibles para un cluster de alta disponibilidad#
Tenemos desde un cluster sencillo de dos mquinas (dos nodos llamando a las cosas por su
nombre) a un cluster de + nodos (usando cualquier numero de mquinas)#
)s importante tener en mente el tipo de cluster que necesitamos y que estamos montando# Por
supuesto supongo que cada uno puede in(entarse su propio esquema de monta/e aunque los ms
comunes son0
&cti(o:Pasi(o -1 Configuraci"n bsica de 8 o ms nodos# ;ay un nodo principal o maestro
donde estn corriendo la mayor$a de recursos y una serie de nodos escla(os o de backup que
entrarn en funcionamiento cuando el nodo principal falle#
&cti(o:&cti(o -1 Configuraci"n tambin bsica de 8 o ms nodos# Con este tipo de clusters
se desarrolla (entre otras cosas) lo que se llama <balanceo de carga<# =eneralmente los
recursos estn duplicados (clonados) en (arios nodos y mediante alg>n mecanismo (dns
s?itc!es etc##) repartiremos la carga entre cada nodo#
++, -1 Combinaci"n de (arios tipos de clusters en uno solo# )sta configuraci"n es ms
a(an%ada y requiere que el administrador tenga las cosas muy claras sobre lo que est
!aciendo# )n un mismo cluster (por e/emplo acti(o:pasi(o) podemos combinar un nodo de
backup (de a!$ el nombre) o incluso usar (arios nodos de backup#
+-to-+ -1 Cuando e9iste posibilidad de usar almacenamiento compartido (lase '&+ o
+&') y los requisitos necesarios de !ard?are cada nodo puede usarse para lo que
queramos osea configuraciones de balanceo de carga con clones m>ltiples de backup# )s
una de las configuraciones ms a(an%adas y tengo que decir que por a!ora a m$ me (iene un
poco grande la (erdad#
6s informaci"n sobre esquemas de configuraci"n con dibu/os (bien !ec!os /e/e) se pueden
encontrar en la ?eb:?iki de clusterlabs#org
@- )l soft?are que permite esto
;ay (arias tecnolog$as que permiten la construcci"n de clusters# 6uc!as de ellas son libres y otras
pri(adas7 lo normal en estos casos# Ao (oy a centrarme en la combinaci"n de dos !erramientas que
son ;eartbeat y Pacemaker aunque !ay muc!as otras posibilidades0
Corosync
BpenI&'
.C'
Deepali(ed
Ao !e llegado tarde a esto pero parece que la comunidad de alta disponibilidad !a tendido a
estandari%arse !aciendo uso de esquemas de funcionamiento similiares y configuraciones basadas
en E6. (que aunque feas son fciles a la !ora de mo(er entre distintos programas)#
Fsicamente necesitamos dos elementos completamente distintos y que son0
,# Comunicaci"n entre nodos para la (aloraci"n de sus estados# (!eartbeat)
8# =esti"n de recursos desplegados en el cluster# (pacemaker)
Por lo tanto ser en !eartbeat donde declararemos qu mquinas forman parte del cluster y en
pacemaker qu recursos !ay repartidos por el cluster (y en que nodo y el resto de opciones de
configuraci"n)#
G- Cista%o al soft?are y configuraci"n
'in meternos en muc!o detalle dir que la configuraci"n de !eartbeat es relati(amente sencilla y
en un par de fic!eros de configuraci"n tendremos lista la declaraci"n del cluster#
Para pacemaker el asunto es un poco ms comple/o# )l tema se mane/a por E6. aunque !ay una
buena cantidad de !erramientas que permiten !acer una administraci"n rpida y ob(iando
totalmente los fic!eros de configuraci"n#
C26 s!ell -1 lo ms e9tendido programa en terminal que mane/a el E6.#
H2FH-6C -1 programa grfico en /a(a que realmente mane/a cibadmin por deba/o
mediante ss! pero que presenta un aspecto (isualmente atracti(o e intuiti(o#
;eartbeat gui -1 Interfa% ?eb# .a (erdad es que ni lo !e probado#
)n la mayor$a de manuales se encuentran referencias a C26 s!ell y es lo que yo mostrar en los
siguientes art$culos que escriba (si es que eso ocurre)#
Tengo que decir que !ay muc!as referencias documentales a !eartbeat como >nico soft?are de
gesti"n para el cluster y es cierto# &ntes !eartbeat cumpl$a las funciones de control de recursos
adems de encargarse de la comunicaci"n de estados entre nodos# Esto ya no es as y !ay que !uir
pa(orosamente de todas las documentaciones que usen el fic!ero <:etc:!a#d:!aresources< #
NOTA EDITADA:
'eg>n me comentan los desarrolladores el proyecto "heartbeat" no a a recibir nueas
actuali!aciones dado que 2ed;at y +o(ell:'5') !an apostado fuerte por Corosync#
)n cualquier caso con el desarrollo actual de !eartbeat toda($a se puede traba/ar#
I- +omenclatura propia
&l principio es un l$o tremendo (er tantas abre(iaturas y palabras nue(as as$ que de/o un peque*o
resumen de los conceptos ms importantes0
,# C26 -1 Cluster 2esouce 6anager# )s el soft?are que pro(ee del control sobre los recursos
desplegados en el cluster# Ao !e !ablado de pacemaker mediante la !erramienta C26 '!ell#
8# CIF -1 Cluster Information Fase# )s el fic!ero E6. donde se refle/a la configuraci"n de los
recursos que se !a !ec!o mediante el C26# 'e genera y se propaga automticamente a todos
los nodos del cluster cuando es modificado# )st muy escondido y no es nada recomendable
tocarlo a mano#
@# BCJ -1 Bpen Cluster Jrame?ork# Podriamos llamarlo el standar mediante el cual el C26
interactua con los ser(icios que corren en cada mquina# 6ediante los standares BCJ
(realmente son scripts que interactuan con otros scripts) se mane/an los scripts t$picos de
<:etc:init#d< para obtener el estado de cada ser(icio pararlos arrancarlos etc##
G# 6essaging .ayer -1 Honde se coloca ;eartbeat Bpen&I' u otro soft?are# 'e refiere al
programa o demonio que controla la comunicaci"n de estados entre los nodos#
I# CIP -1 Cirtual IP# =eneralmente un cluster tendr una IP (irtual que identificar al con/unto
de nodos# 'uele ser el primer paso en la configuraci"n de recursos y testeo de
configuraciones#
K# failo(er:failback -1 Cuando un nodo del cluster cae (de/a de funcionar) y cuando (uel(e a
estar acti(o respecti(amente# Cuando se !ace por ra%ones administrati(as tambin puede
llamarse s?itc!o(er#
)sto que yo !e escrito aqu$ pienso que es una buena base para empe%ar a meterse en el mundo del
clustering de alta disponibilidad# & mi me !a costado alcan%ar claridad en estos conceptos bastante
tiempo y tenia muc!as ganas de plasmar este resumen y que le sir(a a otro#
&l !ilo del anterior post <&pro9imaci"n al clustering de <a Hisponibilidad< (oy a e9plicar como
construir y mane/ar un cluster bsico basado en Corosync+Pacemaker#
)l ob/eti(o es sentar una base desde la que partir a reali%ar configuraciones ms a(an%adas y
e9plicar un poco el mane/o y funcionamiento de Pacemaker mediante la !erramienta C26#
Por a!ora solo (oy a tratar una configuraci"n de tipo acti(o:pasi(o y es posible que ms adelante
escriba algo sobre acti(o:acti(o (con balanceo de carga) u otras configuraciones ms a(an%adas#
.as !erramientas que (oy a usar son "orosync#$acema%er ya se sabe0
Corosync para la <mensa/er$a< entre nodos del cluster#
Pacemaker para la gesti"n de recursos en alta disponibilidad#
;ay otras !erramientas disponibles para la construcci"n de clusters de alta disponibilidad que son0
Deepali(ed#
.C'
Lackamole
;eartbeat
;eartattack
Bpen&I'
Pero yo (oy a centrarme en "orosync#$acema%er porque despus de in(estigar un poco se
detecta rpidamente que son las !erramientas con ms desarrollo proyecci"n de futuro y acti(idad#
He !ec!o !ay algunas !erramientas que estn prcticamente muertas como son ;eartbeat y
Lackamole#
Como base para un cluster de alta disponibilidad la combinaci"n Corosync+Pacemaker cumple
perfectamente con los requerimientos y funcionalidades necesarios teniendo adems la (enta/a de
una comunidad muy acti(a (que puede ayudarnos en determinados calle/ones sin salida)#
;ard?are necesario
)n cada nodo del cluster necesitaremos al menos 8 interfaces de red , para la comunicaci"n directa
entre nodos y otra para los ser(icios ofrecidos al e9terior#
&unque ser$a posible traba/ar con una >nica interfa% es muy recomendable !acerlo de esta manera
por moti(os de estabilidad seguridad escalabilidad etc##
)l reparto de IPs puede (erse en el esquema con las interfaces que son0
et!M para atender a los clientes#
et!, para la red interna de comunicaci"n entre nodos#
IPC0 ,N8#,KO#M#, (que alternati(amente ser asignada al nodo, y al nodo 8)
Instalaci"n
)l proceso de instalaci"n es sencillo0 desde los repositorios oficiales de nuestra distribuci"n fa(orita
(Hebian en mi caso)# )n entornos tipo 2;). tendremos que instalar un repositorio e9terno#
Instalamos los paquetes en todas las mquinas del cluster#
Hebian
(root#) aptitude install corosync pacemaker
2;).
(root#) rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i!"/epel-
release-5-.noarch.rpm
(root#) w#et -$ /etc/yum.repos.d/pacemaker.repo
http://clusterlabs.or#/rpm/epel-5/clusterlabs.repo
(root#) yum install -y pacemaker corosync heartbeat
'e instala !eartbeat por dependencias cuyos paquetes contienen algunas librer$as necesarias para
Pacemaker#
Configuraci"n y arranque de Corosync
5na configuraci"n bsica del demonio de Corosync se incluye al instalar la !erramienta y algo
definiti(o puede quedar as$0
:etc:corosync:corosync#conf
compatibility: whitetank
totem %
version: &
secauth: off
threads: '
interface %
rin#number: '
bindnetaddr: ()&.(".'.'
mcastaddr: &&".*+.(.(
mcastport: 5+'5
,
,
lo##in# %
fileline: off
to-stderr: yes
to-lo#file: yes
to-syslo#: yes
lo#file: /tmp/corosync.lo#
debu#: off
timestamp: on
lo##er-subsys %
subsys: ./0
debu#: off
,
,
amf %
mode: disabled
,
)sta configuraci"n es com>n (en este caso concreto) a todos los nodos del cluster y no se propaga
automticamente#
Hebemos crear la carpeta <:etc:corosync:ser(ice#d:< y a*adir el siguiente fic!ero0
:etc:corosync:ser(ice#d:pcmk
service %
name: pacemaker
ver: '
,
)l parmetro <(er< determina si es Corosync el que debe arrancar a Pacemaker o no# 'eg>n qu
(ersi"n del soft?are que estemos usando debe estar a , o a M (en , e9iste un script .'F en
:etc:init#d: para Pacemaker y es el sistema operati(o el que lo arranca con M es Corosync el que lo
arranca y no e9iste script .'F)#
Fa/o Hebian necesitamos tocar otro fic!ero de configuraci"n sin el cual Corosync no arrancar
ba/o ning>n concepto0
:etc:default:corosync
12.324yes
Aa podemos arrancar el ser(icio y monitori%ar el cluster0
(root#)/etc/init.d/corosync start
(root#)crm status
444444444444
5ast updated: 2ue /ay ( (:+5:(& &'((
1tack: openais
6urrent 76: nodo( - partition with 8uorum
9ersion: (.'.((-(55+a!db'dce5+"cfdaaff"af((!+f)*ee!)
& :odes confi#ured; & e<pected votes
' 3esources confi#ured.
444444444444
$nline: = nodo( nodo& >
'incroni%aci"n de fic!eros entre nodos
;ay algunos fic!eros interesantes que deben ser iguales entre los nodos del cluster#
+o !ay ning>n mtodo predefinido para !acer una sincroni%aci"n de los mismos as$ que en su
momento desarroll un peque*o script en F&'; que !ace uso de rsync para tal menester#
5sndolo el funcionamiento es transparente# 2ealmente no se si es la me/or opci"n dado que se
usan bastantes recursos del sistemas durante muc!as !oras muertas donde no !ay nada que
sincroni%ar### as$ que estoy abierto a sugerencias#
)st compuesto de dos fic!eros0
:usr:local:bin:cluster:syncPfiles#s!
#?/bin/bash
# @ste script hace uso de rsync para sincroniAar
# ficheros entre los nodos de un cluster.
# @l script esta pensado para eBecutarse varias veces por minuto. (crontab)
# 2odas las ma8uinas 8ue participen deben intercambiar las claves
# para la cone<ion ssh:
# ssh-key#en
# ssh-a#ent C1D@55
# ssh-add
# ssh-copy-id
# .demas; es muy importante 8ue las horas esten sincroniAadas.
# @n caso contrario; el comportamiento es ciertamente problematico.
# 5os nombres de cada ma8uina deben aBustarse a Euname -nE
# :o importa de donde ven#a la lista de nombres mientras se cumpla.
# 7ebe haber un espacio en blanco entre cada nombre de ma8uina.
# 1e comprueba un lock file para 8ue no se superpon#an eBecuciones
# de este script
#########################
# 9ariables #
#########################
5F12.-:$7$14Gnodo( nodo&G
2DF14Euname -nE
5F12.-0F6D@3$14G/etc/rsync.d/sync-files.confG
2DF1-HF74CC
5$6I-0F5@4G/var/run/sync-files.sh.5$6IG
#########################
# Hro#rama #
#########################
# 9alidando eBecucion
if = -e C5$6I-0F5@ >
then
if = GEcat C5$6I-0F5@EG ?4 C2DF1-HF7 >
then
e<it (
fi
else
echo GC2DF1-HF7G J C5$6I-0F5@
fi
# 1incronia
for nodo in C5F12.-:$7$1
do
# 1i el nodo de la lista no es el propio nodo eBecutando este script
# se eBecuta la instruccion de rsync
if = GCnodoG ?4 GC2DF1G >
then
# 1e sincroniAan los ficheros especificados en C5F12.-0F6D@3$1
# Usando como copia maestra el mas reciente.
rsync -urv --files-from4C5F12.-0F6D@3$1 Cnodo:/ /
fi
done
# 0inaliAando eBecucion
rm -f C5$6I-0F5@
A la lista de fic!eros a sincroni%ar0
:etc:rsync#d:syncPfiles#conf
/etc/rsync.d/sync-files.conf
/usr/local/bin/cluster/sync-files.sh
/etc/resolv.conf
/etc/ntp.conf
/etc/corosync/corosync.conf
/etc/corosync/service.d/pcmk
/etc/modules
/etc/sysctl.conf
Para la correcta e/ecuci"n damos permisos al script tipo <c!mod a+9< y a*adimos un par de l$neas
a crontab
:etc:crontab
=...>
K K K K K root /usr/local/bin/cluster/sync-files.sh
K K K K K root sleep ' LL /usr/local/bin/cluster/sync-files.sh
=...>
Como pone en los comentarios del script es importante intercambiar las cla(es de los nodos para
que el proceso de 2sync (ss!) sea totalmente transparente#
&dems es muy interesante indicar que toda comunicaci"n de un nodo con otro se !aga a tra(s de
la interfa% interna (et!,) con lo cual editamos los fic!eros0
:etc:!osts en nodo,
=...>
(&).'.'.( localhost nodo(
()&.(".'.& nodo&
=...>
:etc:!osts en nodo8
=...>
(&).'.'.( localhost nodo&
()&.(".'.& nodo(
=...>
Traba/ando con Pacemaker
6ediante la !erramienta <crm< se interacciona con Pacemaker#
2ealmente mane/amos el cib#9ml (cluster information base) aunque (amos a (er poco E6. por
aqu$#
.as instrucciones de crm pueden introducirse en cualquier nodo y sern propagadas
automticamente por todo el cluster#
Primero indicamos a Pacemaker que nuestro cluster por a!ora solo tiene 8 nodos# +ecesitamos
una configuraci"n un poco especial para ello dado que Pacemaker (iene preparado para traba/ar
con muchos nodos#
rootMnodo(:N# crm confi#ure property stonith-enabled4false
rootMnodo(:N# crm confi#ure property no-8uorum-policy4i#nore
rootMnodo(:N# crm confi#ure rsc-defaults resource-stickiness4(''
Con esto estamos indicando lo siguiente0
'TB+IT; est des!abilitado# 'TB+IT; es un ser(icio que sir(e para garanti%ar que un
nodo est realmente muerto en situaciones de clusters con ser(icios cr$ticos en cuanto a
integridad de datos#
Ignoramos las pol$ticas de Q5B256# +o es necesario para un clusters de 8 nodos y da
problemas si no se des!abilita#
'ituamos el ni(el de <pega/osidad< de un recurso en ,MM# )sto es que un recurso tender a
quedarse donde est (nodo) antes de mo(erse a otro nodo sin moti(o de fuer%a mayor (que
son mo(imiento manual o situaci"n de failo(er)#
2ecursos en alta disponibilidad
.a mayor$a de (eces el primer recurso a crear en alta disponibildad es una IPC (IP (irtual)# 'in ella
no !acemos nada#
Con C26 la instrucci"n es bastante fcil0
rootMnodo(:N# crm confi#ure primitive FH9-( ocf:heartbeat:FHaddr O
params ip4(*&.("!.'.( nic4eth' cidr-netmask4&+ O
op monitor interval45s
)specificamos lo siguiente0
crm configure primiti(e -1 &*adimos un recurso
IPC-, ocf0!eartbeat0IPaddr -1 )l nombre del recurso es <IPC-,< y !ace uso del 2& (resource
agent o script que controla el recurso) <ocf0!eartbeat0IPaddr<#
.os parmetros son la IP la interfa% que atender a esa IP y la mscara de red#
Como opciones el <monitor inter(al< concreta la frecuencia con la que Pacemaker se
asegura de que el recurso est funcionando# )ste (alor es el recomendado en todos sitios#
RC"mo sabemos qu 2esource &gent se usa para cada ser(icioS 6uy fcil el propio C26 buscar
y nos mostrar esa informaci"n0
rootMnodo(:N# crm ra classes
heartbeat
lsb
ocf / heartbeat pacemaker
stonith
rootMnodo(:N# crm ra list ocf heartbeat
=...>
.o@tar#et
.udible.larm
mys8l
mys8l-pro<y
syslo#-n#
tomcat
vmware
=...>
)s posible escribir nuestros propios 2esource &gent aunque los ser(icios ms comunes ya tienen
uno escrito y probado que se distribuye en la instalaci"n del soft?are#
Podemos (er la configuraci"n de nuestro cluster en cualquier momento0
rootMnodo(:N# crm confi#ure show
node nodo(
node nodo&
primitive FH9-( ocf:heartbeat:FHaddr O
params ip4G(*&.("!.'.(G nic4Geth'G netmask4G&55.&55.&55.'G O
op monitor interval4G5sG
property Cid4Gcib-bootstrap-optionsG O
dc-version4G(.'.((-(55+a!db'dce5+"cfdaaff"af((!+f)*ee!)G O
cluster-infrastructure4GopenaisG O
e<pected-8uorum-votes4G&G O
stonith-enabled4GfalseG O
no-8uorum-policy4Gi#noreG
rsc-defaults Cid4Grsc-optionsG O
resource-stickiness4G(''G
Que da como resultado el siguiente status0
rootMnodo&:N# crm status
444444444444
5ast updated: 2ue /ay ( (+:&!:(+ &'((
1tack: openais
6urrent 76: nodo( - partition with 8uorum
9ersion: (.'.((-(55+a!db'dce5+"cfdaaff"af((!+f)*ee!)
& :odes confi#ured; & e<pected votes
( 3esources confi#ured.
444444444444
$nline: = nodo( nodo& >
FH9-( (ocf::heartbeat:FHaddr): 1tarted nodo(
Cuando a*adimos recursos podemos especificar distintas <constraints< o renstricciones que son0
He orden de arranque (es probable que algunos recursos requieran a otros antes de arrancar)#
He colocaci"n (muy importantes seguramente sea necesario que en el nodo que est
colocada una IPC deban correr el resto de recursos)#
He preferencia (especificamos d"nde prefiere un recurso estar)#
.a e9plicaci"n en profundidad de estas caracter$sticas dar$an para escribir muc!o (aunque no es
dif$cil de mane/ar) as$ que de/ar el tema para futuras publicaciones#
Pienso que el ob/eti(o de estos post se !a cumplido que era familiari%arnos con el entorno de
Corosync+Pacemaker y construir algo muy bsico# Tan bsico que nuestro >nico recurso en alta
disponibilidad es una IP /e/e