Alta disponibilidad con Pacemaker
Ing. Nelson Calero, OCP
nelson.calero@awen.com.uy
@ncalerouy
MySQL / NoSQL / Cloud Latin America Conference
Martes 15 de Octubre 2013 - Buenos Aires, Argentina
Nelson Calero
• http://www.linkedin.com/in/ncalero
• Ingeniero en Computación. OCP DBA 10g. Especializado en
performance y HA (MySQL / Cluster / Oracle / RAC)
• Trabajando con herramientas Oracle y entorno linux desde 1996
• DBA Oracle (desde 2001) & MySQL (desde 2005)
• Instructor de Oracle University desde 2011
• Co-fundador y Presidente del Grupo de Usuarios
Oracle de Uruguay (UYOUG) desde 2009
• Orador frecuente en eventos como Oracle OpenWorld
Latinoamérica, Collaborate, OTN Tour Uruguay/Argentina, JIAP,
MySQL Argentina
• Co-fundador y director de Awen Consulting

Octubre 2013

2/45
Agenda
1)¿Pacemaker?
2)Instalación
3)Configuración
•
•
•

Recursos
Agentes
Fencing

4)Monitoreo
5)Operación
6)Ejemplos / Demos
Octubre 2013

3/45
HA en BD
Distintos sabores nativos en cada motor
• Mysql – Cluster shared nothing, replicación
• Postgres – Replicación, standby
• Oracle – Cluster shared storage, replicación, standby
Soluciones de terceros
• Replicación – Continuent, GoldenGate (ex, ahora Oracle)
• HA – Heartbeat, Pacemaker
• Específicas:
– Galera – replicación sincrónica MySQL
– DBVisit – standby sobre Oracle Standard Edition
– ...
Octubre 2013

4/45
¿Pacemaker?
Cluster resource manager - http://www.clusterlabs.org/
• Detecta y recupera fallas de nodo y recursos.
• Solución de HA gpl (v2), no hay versión enterprise.
– Apoyado por RedHat, Novell y LinBit.
• Componentes: mensajería + agentes + recursos
• Soporta varios stacks de mensajería: Heartbeat, Corosync
(fork de OpenAIS) y CMAN (redhat)
• Maneja cualquier recurso que se pueda gestionar con
scripts.
• Robusto: 9 años en el mercado.
– Usado por control de tráfico aéreo de Alemania
Octubre 2013

5/45
Arquitectura

Octubre 2013

http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Pacemaker_Explained/_pacemaker_architecture.html
6/45
Arquitectura

Octubre 2013

http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Pacemaker_Explained/_pacemaker_architecture.html
7/45
Topologías soportadas

http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Pacemaker_Explained/_types_of_pacemaker_clusters.html
Octubre 2013
8/45
Pacemaker...
• Funcionalidad incluida en Heartbeat hasta versión 2.1.3.
– Ahora heartbeat es solo mensajería y membresía
("cluster stack" o "cluster infrastructure").
• Instalación por defecto usa Corosync como cluster stack.
– fork de OpenAIS que implementa solo lo necesario
– protocolo Totem, UDP (puerto 5405), multicast
• Configuración almacenada en archivo XML
– CIB (cluster information base).
• Implementa STONITH como mecanismo de fencing.
• No requiere storage compartido.
Octubre 2013

9/45
Octubre 2013

http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Pacemaker_Explained/_internal_components.html

10/45
Pacemaker con BD
• Hay agentes para bases de datos MySQL, Postgres, Oracle,
SAP y DB2: http://www.linux-ha.org/wiki/Resource_Agents
• Opción oficial de HA en MySQL:
Chapter 15 High Availability and Scalability
15.2 Overview of MySQL with DRBD/Pacemaker/Corosync/Oracle Linux

http://dev.mysql.com/doc/refman/5.6/en/ha-drbd.html

• Gran comunidad de usuarios
• percona-prm: Mysql Replication Manager
– Versión Alpha en 2011, parte del paquete resource-agents
desde la versión 3.9.3 (OpenSUSE tiene cambios)
https://github.com/percona/percona-pacemaker-agents
Octubre 2013

11/45
MySQL con pacemaker
• Evaluar uso de
– innodb_support_xa=1
– sync_binlog=1
• Si hay réplicas
– No usar log-slave-updates
– Configurar read-only?
• Al ejecutar failover, que ocurre con:
– Init-connect
– event scheduler

Octubre 2013

12/45
¿Uso simple?
• Versión depende el SO a usar
• Configurar cluster-stack (Heartbeat, Corosync o CMAN)
• Configurar recursos en pacemaker
– afinar parámetros
– quitar inicio automático en SO
• Configurar stonith para producción
• Probar escenarios de fallas
– Bajar recurso en SO
– Bajar recurso en SO y evitar que levante
– Poner nodo en standby (crm node standby/online)
• Implementar monitoreo
Octubre 2013

13/45
Instalación
• OpenSUSE 12.3
nodo1:~ # zypper in pacemaker
...
The following NEW packages are going to be installed:
OpenIPMI cluster-glue corosync crmsh libcorosync4 libdlm libdlm3
libglue2 libnet1 libopenais3 libpacemaker3 openais openhpi pacemaker
perl-TimeDate pssh python-curses python-dateutil python-pssh python-six
python-tk resource-agents tk
The following recommended packages were automatically selected:
crmsh libdlm resource-agents

• Tools son paquetes separados sin dependencia
pacemaker-mgmt-client pacemaker-mgmt hawk

Octubre 2013

14/45
Configuración cluster-stack
Define servidores que participan, interfaz a usar, timeouts.
• Heartbeat
– /etc/ha.d/ha.cf - http://linux-ha.org/wiki/Ha.cf
• Corosync
– /etc/corosync/corosync.conf
bindnetaddr: 10.10.1.0
← cambiar
– Versiones 1.x (plugin) y 2.x. OpenSUSE usa corosync 1.4
https://en.opensuse.org/openSUSE:High_Availability

– Manual: http://clusterlabs.org/doc/en-US/Pacemaker/1.1plugin/html/Clusters_from_Scratch/s-configure-corosync.html

Octubre 2013

15/45
Configuración Pacemaker
•

Ayuda incluida en los comandos de configuración:
crm ra classes
crm ra list ocf heartbeat
crm ra info ocf:heartbeat:IPaddr2

•

Muy buena documentación:
http://www.clusterlabs.org/wiki/Documentation

Secciones a configurar:
• Opciones globales (cluster options)
• Nodos
• Recursos
• Constraints: relaciones entre recursos
– Orden de inicio (order)

Octubre 2013

– Lugar de ejecución (location)
– Dependencias (colocation)

16/45
Configuración Pacemaker
No se necesita editar el archivo XML directamente
Utilitarios:
• CLI: crm_attribute, crm_resource, cibadmin
• Shell: crm
– configure edit: modificar la configuración en consola
• crm_gui: paquetes pacemaker-mgmt y pacemaker-mgmt-gui
• pcs: Pacemaker Configuration System
• hawk (web): https://github.com/ClusterLabs/hawk
– Pacemaker >= 1.1.8 --> Hawk 0.6.x
< 1.1.8 --> Hawk 0.5.x
Octubre 2013

17/45
Configuración Pacemaker
Algunas cluster options y valores por defecto
– Stonith-enabled
# true
– Stonith-action
# reboot
– no-quorum-policy
# stop
• Cambios en configuración se hacen en un sólo nodo,
internamente sincroniza con el resto.
• Nodo Designated Controller (DC): Elegido al inicio del
cluster. Toma las decisiones. Genera más log.

Octubre 2013

18/45
Pacemaker: recursos
Definidos por los atributos:
• clase: ocf / lsb / heartbeat / stonith
LSB: script de inicio cumpliendo Linux Standard Base
OCF: Open Cluster Framework, extensión de LSB
– Instalados en /usr/lib/ocf/resource.d/
• parámetros
• operaciones de monitoreo
• scores: usado en toma de decisiones
- = no usar
+ = usar
INFINITY = constante

• stickiness: cuanto prefiere el recurso quedarse en el nodo, o el
costo de mover el recurso
Octubre 2013

19/45
Pacemaker: agente
• Ejecutable que maneja un recurso del cluster.
• Implementado en cualquier lenguaje de programación.
• Debe soportar las siguientes acciones:
start — levanta el recurso
stop — baja el recurso
monitor — consulta el estado del recurso
meta-data — muestra metadatos del recurso en el agente
• Opcionales:
promote, demote,
migrate_to, migrate_from,
validate-all, usage/help, status
Octubre 2013

20/45
Pacemaker: agente
• Manual para desarrollar agentes OCF:
– http://www.linux-ha.org/doc/dev-guides/ra-dev-guide.html

• Agente para MySQL: ocf:heartbeat:mysql
– http://www.linux-ha.org/wiki/MySQL_(resource_agent)

– Percona PRM: https://raw.github.com/percona/percona-pacemakeragents/master/agents/mysql_prm

• Más tipos de recursos
– clones
– grupos
– multi-estados

Octubre 2013

21/45
Pacemaker: recursos
Ejemplo de configuración para IP Virtual:
$> crm configure primitive vip1 ocf:heartbeat:IPaddr2 params ip=10.10.1.5
cidr_netmask=32 op monitor interval=30s

Octubre 2013

22/45
Pacemaker: recursos
Parámetros en configuración Multi-state (master/slave, prim/sec)
clone-max="2"

# Sólo puede estar en dos instancias

clone-node-max="1" # Una instancia por nodo
master-max="1"

# Sólo puede haber un master

master-node-max="1" # Un master por nodo
notify="true"

# notificar start/stop de copias al resto de las copias

Detalles en “Configuration explained: An A-Z guide to
Pacemaker's Configuration Options”

Octubre 2013

23/45
Pacemaker: recursos
Ejemplo de configuración para IP Virtual:
$> crm configure primitive vip1 ocf:heartbeat:IPaddr2 params ip=10.10.1.5
cidr_netmask=32 op monitor interval=30s

Configuración para DRBD:
$> crm configure
primitive drbd_disk ocf:linbit:drbd params drbd_resource="disco" 
op monitor interval="29s" role="Master" 
op monitor interval="31s" role="Slave"
primitive fs_drbd ocf:heartbeat:Filesystem 
params device="/dev/drbd0" directory="/varios/01" fstype="ext3"
ms ms_drbd drbd_disk 
meta master-max="1" master-node-max="1" clone-max="2" 
clone-node-max="1" notify="true"
colocation mnt_on_master inf: fs_drbd ms_drbd:Master
order mount_after_drbd inf: ms_drbd:promote fs_drbd:start
Octubre 2013

24/45
Pacemaker: recursos
Ejemplo de configuración MySQL activo/pasivo con DRBD
Se agrega a lo anterior:
$> crm configure
primitive ip_mysql ocf:heartbeat:IPaddr2 
params ip="10.10.1.10" nic="eth0"
primitive mysqld lsb:mysqld
group mysql fs_drbd ip_mysql mysqld
colocation mysql_on_drbd inf: mysql ms_drbd:Master
order mysql_after_drbd inf: ms_drbd:promote mysql:start

Octubre 2013

25/45
Pacemaker: recursos
Ejemplo de configuración Postgres 9.1 activo/pasivo (1/4)
$> crm configure
property no-quorum-policy="ignore" stonith-enabled="false" 
crmd-transition-delay="0s"
rsc_defaults resource-stickiness="INFINITY" migration-threshold="1"
primitive pgsql ocf:heartbeat:pgsql params 
pgctl="/usr/pgsql-9.1/bin/pg_ctl" psql="/usr/bin/psql"
pgdata="/data/pg" rep_mode="sync" node_list="db01 db02" 
restore_command="cp /data/pg/archive/%f %p" 
primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 
keepalives_count=5" master_ip="192.168.2.51" stop_escalate="0" 
op start timeout="30s" interval="0s" on-fail="restart" 
op stop timeout="30s" interval="0s" on-fail="block" 
op monitor timeout="30s" interval="11s" on-fail="restart" 
op monitor timeout="30s" interval="10s" on-fail="restart" role="Master" 
op promote timeout="30s" interval="0s" on-fail="restart" 
op demote timeout="30s" interval="0s" on-fail="block" 
op notify timeout="60s" interval="0s"
Octubre 2013

26/45
Pacemaker: recursos
Ejemplo de configuración Postgres 9.1 activo/pasivo (2/4)
...
ms msPostgresql pgsql meta master-max="1" master-node-max="1" 
clone-max="2" clone-node-max="1" notify="true"
primitive vip-master ocf:heartbeat:IPaddr2 
params ip="192.168.2.100" nic="eth0" cidr_netmask="24" 
op start
interval="0s" timeout="60s" on-fail="restart" 
op monitor interval="10s" timeout="60s" on-fail="restart" 
op stop
interval="0s" timeout="60s" on-fail="block"
primitive vip-rep ocf:heartbeat:IPaddr2 
params ip="192.168.2.110" nic="eth0" cidr_netmask="24" 
meta migration-threshold="0" 
op start
interval="0s" timeout="60s" on-fail="stop" 
op monitor interval="10s" timeout="60s" on-fail="restart" 
op stop
interval="0s" timeout="60s" on-fail="block"
Octubre 2013

27/45
Pacemaker: recursos
Ejemplo de configuración Postgres 9.1 activo/pasivo (3/4)
...
primitive vip-slave ocf:heartbeat:IPaddr2 params ip="192.168.2.120"
nic="eth0" cidr_netmask="24" meta resource-stickiness="1" 
op start timeout="60s" interval="0s" on-fail="restart" 
op monitor timeout="60s" interval="10s" on-fail="restart" 
op stop timeout="60s" interval="0s" on-fail="block"
primitive pingCheck ocf:pacemaker:ping 
params name="default_ping_set" host_list="192.168.2.100" multiplier="100" 
op start interval="0s" timeout="60s" on-fail="restart" 
op monitor interval="5s" timeout="60s" on-fail="restart" 
op stop interval="0s" timeout="60s" on-fail="ignore"
clone clnPingd pingCheck
group master-group vip-master vip-rep meta ordered="false"
Octubre 2013

28/45
Pacemaker: recursos
Ejemplo de configuración Postgres 9.1 activo/pasivo (4/4)
...
location rsc_location-1 msPostgresql 
rule -inf: not_defined default_ping_set or default_ping_set lt 100
location rsc_location-2 vip-slave 
rule 200: pgsql-status eq "HS:sync" 
rule 100: pgsql-status eq "PRI" 
rule -inf: not_defined pgsql-status 
rule -inf: pgsql-status ne "HS:sync" and pgsql-status ne "PRI"
colocation rsc_colocation-1 inf: msPostgresql
colocation rsc_colocation-2 inf: master-group

clnPingd
msPostgresql:Master

order rsc_order-1 0: clnPingd
msPostgresql
symmetrical=false
order rsc_order-2 inf: msPostgresql:promote master-group:start symmetrical=false
order rsc_order-3 0: msPostgresql:demote master-group:stop symmetrical=false
Octubre 2013

29/45
Pacemaker: debug
• Se habilita debug creando el archivo de log:
mkdir -p /tmp/mysql.ocf.ra.debug
touch /tmp/mysql.ocf.ra.debug/log

• Testear los scripts OCF configurando las variables esperadas:
export OCF_ROOT=/usr/lib/ocf
export OCF_RESKEY_binary=/usr/sbin/mysqld
export OCF_RESKEY_config=/etc/my.cnf
export OCF_RESKEY_datadir=/var/lib/mysql
export OCF_RESKEY_log=/var/lib/mysql/nodo1.err
export OCF_RESKEY_pid=/var/lib/mysql/mysql.pid
export OCF_RESKEY_socket=/var/lib/mysq/mysql.sock
export OCF_RESKEY_user=root
/usr/lib/ocf/resource.d/heartbeat/mysql start
Octubre 2013

30/45
Pacemaker: fencing
• Dos tipos de Fencing: por recurso o por nodo
• Implementado con:
– un proceso (stonithd)
– plugins para cada dispositivo soportado
• Categorías de dispositivos usados para Stonith:
– UPS (Uninterruptible Power Supply)
– PDU (Power Distribution Unit)
– Blade power control devices
– Lights-out devices: IBM RSA, HP iLO, Dell DRAC
– Testing devices
• Documentación: http://www.clusterlabs.org/doc/crm_fencing.html
Octubre 2013

31/45
Pacemaker: fencing
En virtuales: dispositivo fence_virsh o external/xen0
Ver http://linux-ha.org/wiki/DomUClusters
Posibilidad de usar shared storage: dispositivo sbd
Dispositivos soportados:
stonith -L
●
●
●
●
●
●
●
●
●
●
●
●

Octubre 2013

●

apcmaster
apcmastersnmp
apcsmart
baytech
bladehpi
cyclades
drac3
external/drac5
external/dracmc-telnet
external/hetzner
external/hmchttp
external/ibmrsa
external/ibmrsa-telnet

●
●
●
●
●
●
●
●
●
●
●
●
●

external/ipmi
external/ippower9258
external/kdumpcheck
external/libvirt
external/nut
external/rackpdu
external/riloe
external/sbd
external/vcenter
external/vmware
external/xen0
external/xen0-ha
ibmhmc

●
●
●
●
●
●
●
●

Ipmilan
meatware
nw_rpc100s
rcd_serial
rps10
suicide
wti_mpc
wti_nps

- external/ssh
- null
- ssh
32/45
Pacemaker: fencing
¿Qué parámetros hay que configurar de un dispositivo de Stonith dado?
stonith -t external/xen0 -h
STONITH Device: external/xen0 - ssh-based Linux host reset for Xen DomU trough Dom0
Fine for testing, but not really suitable for production!
For more information see http://openssh.org http://www.xensource.com/ http://linuxha.org/wiki
List of valid parameter names for external/xen0 STONITH device:
hostlist
dom0
For Config info [-p] syntax, give each of the above parameters in order as
the -p value.
Arguments are separated by white space.
Config file [-F] syntax is the same as -p, except # at the start of a line
denotes a comment
Octubre 2013

33/45
Pacemaker: fencing
Ejemplos:

primitive stonith-device stonith:external/sbd 
params sbd_device="/dev/sdc" 
op monitor interval="60s"
primitive fence_cluster2.test stonith:fence_virsh params 
ipaddr="192.168.100.1" 
action="reboot" login="root" passwd="password" port="cluster-test-2" 
pcmk_host_list="cluster2.test" pcmk_host_check="static-list" 
pcmk_host_map=""

Octubre 2013

34/45
Pacemaker: monitoreo
• crm status / crm_mon -Arf
-A, --show-node-attributes
-r, --inactive

muestra recursos inactivos

-f, --failcounts

cantidad de fallas de recursos

• OCF ClusterMon notifica cambios de estado
– Snmp / script
– https://github.com/ClusterLabs/pacemaker/blob/master/extra/pcmk_snmp_helper.sh

crm configure primitive monitor ocf:pacemaker:ClusterMon 
params user="root" update="30" 
extra_options="-E /home/scripts/pcmk_notify.sh 
op monitor on-fail="restart" interval="10"
Octubre 2013

35/45
Pacemaker: operación
Tareas de mantenimiento
• respaldar configuración de CIB
cibadmin --query > cib-bkp.xml
• restaurar
cibadmin --replace --xml-file < cib-bkp.xml
• agregar nodo al cluster
– instalar pacemaker y corosync
– copiar corosync.conf (cambiar ip local) y authkey
– Levantar corosync, luego pacemaker
– Aumentar parámetro “clone-max” de recursos

Octubre 2013

36/45
Pacemaker: operación
Actualizar versión de Pacemaker no siempre es una operación
sin baja total del cluster (rolling), obliga a actualizar todos los
nodos al mismo tiempo. Ej: corosync 0.x a 1.x, 1.x a 2.0
http://clusterlabs.org/doc/en-US/Pacemaker/1.1crmsh/html/Clusters_from_Scratch/_configuring_corosync.html

Pasos para upgrade:
1) validar cambios en la configuración en la nueva versión (CIB)
2) detener monitoreo de recursos (mantenance-mode=true)
3) bajar procesos del cluster (pacemaker + corosync)
4) actualizar software y CIB
5) levantar cluster
6) habilitar/configurar monitoreo de recursos
Octubre 2013

37/45
Ejemplos
apache usando dos nodos con DRBD, activo/pasivo y
activo/activo usando GFS2 (en fedora): "clusters from scratch"
Demos:
1) configuración cluster
2) probar failover de VIP
3) Usar HA de MySQL con 2 nodos (DRDB)
En ppt:
4) replicación MySQL

Octubre 2013

38/45
Configuración usada
2 VM 1Gb Ram – 20Gb HD
OpenSUSE 12.3 x64
Eth0 – 10.10.1.x - internal network en Vbox
Eth1 – Bridged en Vbox
Host – Mismo SO, VirtualBox 4.2.18-92.1
OpenSUSE incluye en los repositorios factory:
Pacemaker 1.1.7-3
Corosync 1.4.3-4.1.1
Crmsh 1.2.4-3.1.1
Drbd 8.3.11-5.1.1

Dependencias para instalar todo con pacemaker
– Quedan fuera utilitarios (hawk y crm_gui)

39/45
1) configuración cluster
a) configurar visibildad de nodos (/etc/hosts – ssh keys)
b) instalar corosync y pacemaker en dos nodos
c) configurar corosync (/etc/corosync/corosync.conf)
d) configurar parametros globales pacemaker
e) ver agentes disponibles y sus parámetros

Octubre 2013

40/45
2) probar failover de VIP
f) configurar IP virtual
g) probar fallas
Moviendo recursos a mano
Generando fallas en el SO
h) agregar notificación de transiciones y repetir fallas

Octubre 2013

41/45
3) Usar HA de MySQL con 2 nodos (DRDB)
a) instalar DRBD en ambos nodos
b) agregar un disco nuevo (/dev/sdb)
c) configurar drdb (archivo /etc/drbd.conf)
d) crear disco lógico DRBD en los dos nodos (drbdadm)
e) sincronizar nodo2
f) crear filesystem en nodo1 y montarlo en disco DRBD
g) ver los datos en el nodo2
h) configurar HA para DRBD
i) probar HA de DRBD
j) configurar MySQL usando FS en DRBD
j) probar HA de MySQL

Octubre 2013

42/45
Réplicas MySQL con PRM
percona-prm:
https://github.com/percona/percona-pacemaker-agents/blob/master/doc/PRM-setupguide.rst

• CIB:
– log file y posición del master
– segundos de atraso de slaves
• Promoción: detener resto de slaves
• Caída del master:
– slaves hacen fencing del master si es necesario
– detienen sus réplicas
– eligen el más actualizado para promover en master
– nodo elegido actualiza CIB con esta info
Octubre – el resto apunta a éste tomando datos actualizados del CIB
2013

43/45
¿Preguntas?

nelson.calero@awen.com.uy
@ncalerouy
Octubre 2013

44/45
Referencias
• Documentación Pacemaker: http://www.clusterlabs.org
• Pacemaker OCF Resource Agents:
http://www.linux-ha.org/wiki/Resource_Agents
• Overview of MySQL with DRBD/Pacemaker/Corosync
http://dev.mysql.com/doc/refman/5.6/en/ha-drbd.html
• Percona PRM setup guide:
https://github.com/percona/percona-pacemaker-agents/blob/master/doc/PRMsetup-guide.rst

• Florian Crouzat Blog: http://floriancrouzat.net
• Heartbeat: http://www.linux-ha.org
Octubre 2013

45/45

Alta disponibilidad con Pacemaker

  • 1.
    Alta disponibilidad conPacemaker Ing. Nelson Calero, OCP nelson.calero@awen.com.uy @ncalerouy MySQL / NoSQL / Cloud Latin America Conference Martes 15 de Octubre 2013 - Buenos Aires, Argentina
  • 2.
    Nelson Calero • http://www.linkedin.com/in/ncalero •Ingeniero en Computación. OCP DBA 10g. Especializado en performance y HA (MySQL / Cluster / Oracle / RAC) • Trabajando con herramientas Oracle y entorno linux desde 1996 • DBA Oracle (desde 2001) & MySQL (desde 2005) • Instructor de Oracle University desde 2011 • Co-fundador y Presidente del Grupo de Usuarios Oracle de Uruguay (UYOUG) desde 2009 • Orador frecuente en eventos como Oracle OpenWorld Latinoamérica, Collaborate, OTN Tour Uruguay/Argentina, JIAP, MySQL Argentina • Co-fundador y director de Awen Consulting Octubre 2013 2/45
  • 3.
  • 4.
    HA en BD Distintossabores nativos en cada motor • Mysql – Cluster shared nothing, replicación • Postgres – Replicación, standby • Oracle – Cluster shared storage, replicación, standby Soluciones de terceros • Replicación – Continuent, GoldenGate (ex, ahora Oracle) • HA – Heartbeat, Pacemaker • Específicas: – Galera – replicación sincrónica MySQL – DBVisit – standby sobre Oracle Standard Edition – ... Octubre 2013 4/45
  • 5.
    ¿Pacemaker? Cluster resource manager- http://www.clusterlabs.org/ • Detecta y recupera fallas de nodo y recursos. • Solución de HA gpl (v2), no hay versión enterprise. – Apoyado por RedHat, Novell y LinBit. • Componentes: mensajería + agentes + recursos • Soporta varios stacks de mensajería: Heartbeat, Corosync (fork de OpenAIS) y CMAN (redhat) • Maneja cualquier recurso que se pueda gestionar con scripts. • Robusto: 9 años en el mercado. – Usado por control de tráfico aéreo de Alemania Octubre 2013 5/45
  • 6.
  • 7.
  • 8.
  • 9.
    Pacemaker... • Funcionalidad incluidaen Heartbeat hasta versión 2.1.3. – Ahora heartbeat es solo mensajería y membresía ("cluster stack" o "cluster infrastructure"). • Instalación por defecto usa Corosync como cluster stack. – fork de OpenAIS que implementa solo lo necesario – protocolo Totem, UDP (puerto 5405), multicast • Configuración almacenada en archivo XML – CIB (cluster information base). • Implementa STONITH como mecanismo de fencing. • No requiere storage compartido. Octubre 2013 9/45
  • 10.
  • 11.
    Pacemaker con BD •Hay agentes para bases de datos MySQL, Postgres, Oracle, SAP y DB2: http://www.linux-ha.org/wiki/Resource_Agents • Opción oficial de HA en MySQL: Chapter 15 High Availability and Scalability 15.2 Overview of MySQL with DRBD/Pacemaker/Corosync/Oracle Linux http://dev.mysql.com/doc/refman/5.6/en/ha-drbd.html • Gran comunidad de usuarios • percona-prm: Mysql Replication Manager – Versión Alpha en 2011, parte del paquete resource-agents desde la versión 3.9.3 (OpenSUSE tiene cambios) https://github.com/percona/percona-pacemaker-agents Octubre 2013 11/45
  • 12.
    MySQL con pacemaker •Evaluar uso de – innodb_support_xa=1 – sync_binlog=1 • Si hay réplicas – No usar log-slave-updates – Configurar read-only? • Al ejecutar failover, que ocurre con: – Init-connect – event scheduler Octubre 2013 12/45
  • 13.
    ¿Uso simple? • Versióndepende el SO a usar • Configurar cluster-stack (Heartbeat, Corosync o CMAN) • Configurar recursos en pacemaker – afinar parámetros – quitar inicio automático en SO • Configurar stonith para producción • Probar escenarios de fallas – Bajar recurso en SO – Bajar recurso en SO y evitar que levante – Poner nodo en standby (crm node standby/online) • Implementar monitoreo Octubre 2013 13/45
  • 14.
    Instalación • OpenSUSE 12.3 nodo1:~# zypper in pacemaker ... The following NEW packages are going to be installed: OpenIPMI cluster-glue corosync crmsh libcorosync4 libdlm libdlm3 libglue2 libnet1 libopenais3 libpacemaker3 openais openhpi pacemaker perl-TimeDate pssh python-curses python-dateutil python-pssh python-six python-tk resource-agents tk The following recommended packages were automatically selected: crmsh libdlm resource-agents • Tools son paquetes separados sin dependencia pacemaker-mgmt-client pacemaker-mgmt hawk Octubre 2013 14/45
  • 15.
    Configuración cluster-stack Define servidoresque participan, interfaz a usar, timeouts. • Heartbeat – /etc/ha.d/ha.cf - http://linux-ha.org/wiki/Ha.cf • Corosync – /etc/corosync/corosync.conf bindnetaddr: 10.10.1.0 ← cambiar – Versiones 1.x (plugin) y 2.x. OpenSUSE usa corosync 1.4 https://en.opensuse.org/openSUSE:High_Availability – Manual: http://clusterlabs.org/doc/en-US/Pacemaker/1.1plugin/html/Clusters_from_Scratch/s-configure-corosync.html Octubre 2013 15/45
  • 16.
    Configuración Pacemaker • Ayuda incluidaen los comandos de configuración: crm ra classes crm ra list ocf heartbeat crm ra info ocf:heartbeat:IPaddr2 • Muy buena documentación: http://www.clusterlabs.org/wiki/Documentation Secciones a configurar: • Opciones globales (cluster options) • Nodos • Recursos • Constraints: relaciones entre recursos – Orden de inicio (order) Octubre 2013 – Lugar de ejecución (location) – Dependencias (colocation) 16/45
  • 17.
    Configuración Pacemaker No senecesita editar el archivo XML directamente Utilitarios: • CLI: crm_attribute, crm_resource, cibadmin • Shell: crm – configure edit: modificar la configuración en consola • crm_gui: paquetes pacemaker-mgmt y pacemaker-mgmt-gui • pcs: Pacemaker Configuration System • hawk (web): https://github.com/ClusterLabs/hawk – Pacemaker >= 1.1.8 --> Hawk 0.6.x < 1.1.8 --> Hawk 0.5.x Octubre 2013 17/45
  • 18.
    Configuración Pacemaker Algunas clusteroptions y valores por defecto – Stonith-enabled # true – Stonith-action # reboot – no-quorum-policy # stop • Cambios en configuración se hacen en un sólo nodo, internamente sincroniza con el resto. • Nodo Designated Controller (DC): Elegido al inicio del cluster. Toma las decisiones. Genera más log. Octubre 2013 18/45
  • 19.
    Pacemaker: recursos Definidos porlos atributos: • clase: ocf / lsb / heartbeat / stonith LSB: script de inicio cumpliendo Linux Standard Base OCF: Open Cluster Framework, extensión de LSB – Instalados en /usr/lib/ocf/resource.d/ • parámetros • operaciones de monitoreo • scores: usado en toma de decisiones - = no usar + = usar INFINITY = constante • stickiness: cuanto prefiere el recurso quedarse en el nodo, o el costo de mover el recurso Octubre 2013 19/45
  • 20.
    Pacemaker: agente • Ejecutableque maneja un recurso del cluster. • Implementado en cualquier lenguaje de programación. • Debe soportar las siguientes acciones: start — levanta el recurso stop — baja el recurso monitor — consulta el estado del recurso meta-data — muestra metadatos del recurso en el agente • Opcionales: promote, demote, migrate_to, migrate_from, validate-all, usage/help, status Octubre 2013 20/45
  • 21.
    Pacemaker: agente • Manualpara desarrollar agentes OCF: – http://www.linux-ha.org/doc/dev-guides/ra-dev-guide.html • Agente para MySQL: ocf:heartbeat:mysql – http://www.linux-ha.org/wiki/MySQL_(resource_agent) – Percona PRM: https://raw.github.com/percona/percona-pacemakeragents/master/agents/mysql_prm • Más tipos de recursos – clones – grupos – multi-estados Octubre 2013 21/45
  • 22.
    Pacemaker: recursos Ejemplo deconfiguración para IP Virtual: $> crm configure primitive vip1 ocf:heartbeat:IPaddr2 params ip=10.10.1.5 cidr_netmask=32 op monitor interval=30s Octubre 2013 22/45
  • 23.
    Pacemaker: recursos Parámetros enconfiguración Multi-state (master/slave, prim/sec) clone-max="2" # Sólo puede estar en dos instancias clone-node-max="1" # Una instancia por nodo master-max="1" # Sólo puede haber un master master-node-max="1" # Un master por nodo notify="true" # notificar start/stop de copias al resto de las copias Detalles en “Configuration explained: An A-Z guide to Pacemaker's Configuration Options” Octubre 2013 23/45
  • 24.
    Pacemaker: recursos Ejemplo deconfiguración para IP Virtual: $> crm configure primitive vip1 ocf:heartbeat:IPaddr2 params ip=10.10.1.5 cidr_netmask=32 op monitor interval=30s Configuración para DRBD: $> crm configure primitive drbd_disk ocf:linbit:drbd params drbd_resource="disco" op monitor interval="29s" role="Master" op monitor interval="31s" role="Slave" primitive fs_drbd ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/varios/01" fstype="ext3" ms ms_drbd drbd_disk meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" colocation mnt_on_master inf: fs_drbd ms_drbd:Master order mount_after_drbd inf: ms_drbd:promote fs_drbd:start Octubre 2013 24/45
  • 25.
    Pacemaker: recursos Ejemplo deconfiguración MySQL activo/pasivo con DRBD Se agrega a lo anterior: $> crm configure primitive ip_mysql ocf:heartbeat:IPaddr2 params ip="10.10.1.10" nic="eth0" primitive mysqld lsb:mysqld group mysql fs_drbd ip_mysql mysqld colocation mysql_on_drbd inf: mysql ms_drbd:Master order mysql_after_drbd inf: ms_drbd:promote mysql:start Octubre 2013 25/45
  • 26.
    Pacemaker: recursos Ejemplo deconfiguración Postgres 9.1 activo/pasivo (1/4) $> crm configure property no-quorum-policy="ignore" stonith-enabled="false" crmd-transition-delay="0s" rsc_defaults resource-stickiness="INFINITY" migration-threshold="1" primitive pgsql ocf:heartbeat:pgsql params pgctl="/usr/pgsql-9.1/bin/pg_ctl" psql="/usr/bin/psql" pgdata="/data/pg" rep_mode="sync" node_list="db01 db02" restore_command="cp /data/pg/archive/%f %p" primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5" master_ip="192.168.2.51" stop_escalate="0" op start timeout="30s" interval="0s" on-fail="restart" op stop timeout="30s" interval="0s" on-fail="block" op monitor timeout="30s" interval="11s" on-fail="restart" op monitor timeout="30s" interval="10s" on-fail="restart" role="Master" op promote timeout="30s" interval="0s" on-fail="restart" op demote timeout="30s" interval="0s" on-fail="block" op notify timeout="60s" interval="0s" Octubre 2013 26/45
  • 27.
    Pacemaker: recursos Ejemplo deconfiguración Postgres 9.1 activo/pasivo (2/4) ... ms msPostgresql pgsql meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" primitive vip-master ocf:heartbeat:IPaddr2 params ip="192.168.2.100" nic="eth0" cidr_netmask="24" op start interval="0s" timeout="60s" on-fail="restart" op monitor interval="10s" timeout="60s" on-fail="restart" op stop interval="0s" timeout="60s" on-fail="block" primitive vip-rep ocf:heartbeat:IPaddr2 params ip="192.168.2.110" nic="eth0" cidr_netmask="24" meta migration-threshold="0" op start interval="0s" timeout="60s" on-fail="stop" op monitor interval="10s" timeout="60s" on-fail="restart" op stop interval="0s" timeout="60s" on-fail="block" Octubre 2013 27/45
  • 28.
    Pacemaker: recursos Ejemplo deconfiguración Postgres 9.1 activo/pasivo (3/4) ... primitive vip-slave ocf:heartbeat:IPaddr2 params ip="192.168.2.120" nic="eth0" cidr_netmask="24" meta resource-stickiness="1" op start timeout="60s" interval="0s" on-fail="restart" op monitor timeout="60s" interval="10s" on-fail="restart" op stop timeout="60s" interval="0s" on-fail="block" primitive pingCheck ocf:pacemaker:ping params name="default_ping_set" host_list="192.168.2.100" multiplier="100" op start interval="0s" timeout="60s" on-fail="restart" op monitor interval="5s" timeout="60s" on-fail="restart" op stop interval="0s" timeout="60s" on-fail="ignore" clone clnPingd pingCheck group master-group vip-master vip-rep meta ordered="false" Octubre 2013 28/45
  • 29.
    Pacemaker: recursos Ejemplo deconfiguración Postgres 9.1 activo/pasivo (4/4) ... location rsc_location-1 msPostgresql rule -inf: not_defined default_ping_set or default_ping_set lt 100 location rsc_location-2 vip-slave rule 200: pgsql-status eq "HS:sync" rule 100: pgsql-status eq "PRI" rule -inf: not_defined pgsql-status rule -inf: pgsql-status ne "HS:sync" and pgsql-status ne "PRI" colocation rsc_colocation-1 inf: msPostgresql colocation rsc_colocation-2 inf: master-group clnPingd msPostgresql:Master order rsc_order-1 0: clnPingd msPostgresql symmetrical=false order rsc_order-2 inf: msPostgresql:promote master-group:start symmetrical=false order rsc_order-3 0: msPostgresql:demote master-group:stop symmetrical=false Octubre 2013 29/45
  • 30.
    Pacemaker: debug • Sehabilita debug creando el archivo de log: mkdir -p /tmp/mysql.ocf.ra.debug touch /tmp/mysql.ocf.ra.debug/log • Testear los scripts OCF configurando las variables esperadas: export OCF_ROOT=/usr/lib/ocf export OCF_RESKEY_binary=/usr/sbin/mysqld export OCF_RESKEY_config=/etc/my.cnf export OCF_RESKEY_datadir=/var/lib/mysql export OCF_RESKEY_log=/var/lib/mysql/nodo1.err export OCF_RESKEY_pid=/var/lib/mysql/mysql.pid export OCF_RESKEY_socket=/var/lib/mysq/mysql.sock export OCF_RESKEY_user=root /usr/lib/ocf/resource.d/heartbeat/mysql start Octubre 2013 30/45
  • 31.
    Pacemaker: fencing • Dostipos de Fencing: por recurso o por nodo • Implementado con: – un proceso (stonithd) – plugins para cada dispositivo soportado • Categorías de dispositivos usados para Stonith: – UPS (Uninterruptible Power Supply) – PDU (Power Distribution Unit) – Blade power control devices – Lights-out devices: IBM RSA, HP iLO, Dell DRAC – Testing devices • Documentación: http://www.clusterlabs.org/doc/crm_fencing.html Octubre 2013 31/45
  • 32.
    Pacemaker: fencing En virtuales:dispositivo fence_virsh o external/xen0 Ver http://linux-ha.org/wiki/DomUClusters Posibilidad de usar shared storage: dispositivo sbd Dispositivos soportados: stonith -L ● ● ● ● ● ● ● ● ● ● ● ● Octubre 2013 ● apcmaster apcmastersnmp apcsmart baytech bladehpi cyclades drac3 external/drac5 external/dracmc-telnet external/hetzner external/hmchttp external/ibmrsa external/ibmrsa-telnet ● ● ● ● ● ● ● ● ● ● ● ● ● external/ipmi external/ippower9258 external/kdumpcheck external/libvirt external/nut external/rackpdu external/riloe external/sbd external/vcenter external/vmware external/xen0 external/xen0-ha ibmhmc ● ● ● ● ● ● ● ● Ipmilan meatware nw_rpc100s rcd_serial rps10 suicide wti_mpc wti_nps - external/ssh - null - ssh 32/45
  • 33.
    Pacemaker: fencing ¿Qué parámetroshay que configurar de un dispositivo de Stonith dado? stonith -t external/xen0 -h STONITH Device: external/xen0 - ssh-based Linux host reset for Xen DomU trough Dom0 Fine for testing, but not really suitable for production! For more information see http://openssh.org http://www.xensource.com/ http://linuxha.org/wiki List of valid parameter names for external/xen0 STONITH device: hostlist dom0 For Config info [-p] syntax, give each of the above parameters in order as the -p value. Arguments are separated by white space. Config file [-F] syntax is the same as -p, except # at the start of a line denotes a comment Octubre 2013 33/45
  • 34.
    Pacemaker: fencing Ejemplos: primitive stonith-devicestonith:external/sbd params sbd_device="/dev/sdc" op monitor interval="60s" primitive fence_cluster2.test stonith:fence_virsh params ipaddr="192.168.100.1" action="reboot" login="root" passwd="password" port="cluster-test-2" pcmk_host_list="cluster2.test" pcmk_host_check="static-list" pcmk_host_map="" Octubre 2013 34/45
  • 35.
    Pacemaker: monitoreo • crmstatus / crm_mon -Arf -A, --show-node-attributes -r, --inactive muestra recursos inactivos -f, --failcounts cantidad de fallas de recursos • OCF ClusterMon notifica cambios de estado – Snmp / script – https://github.com/ClusterLabs/pacemaker/blob/master/extra/pcmk_snmp_helper.sh crm configure primitive monitor ocf:pacemaker:ClusterMon params user="root" update="30" extra_options="-E /home/scripts/pcmk_notify.sh op monitor on-fail="restart" interval="10" Octubre 2013 35/45
  • 36.
    Pacemaker: operación Tareas demantenimiento • respaldar configuración de CIB cibadmin --query > cib-bkp.xml • restaurar cibadmin --replace --xml-file < cib-bkp.xml • agregar nodo al cluster – instalar pacemaker y corosync – copiar corosync.conf (cambiar ip local) y authkey – Levantar corosync, luego pacemaker – Aumentar parámetro “clone-max” de recursos Octubre 2013 36/45
  • 37.
    Pacemaker: operación Actualizar versiónde Pacemaker no siempre es una operación sin baja total del cluster (rolling), obliga a actualizar todos los nodos al mismo tiempo. Ej: corosync 0.x a 1.x, 1.x a 2.0 http://clusterlabs.org/doc/en-US/Pacemaker/1.1crmsh/html/Clusters_from_Scratch/_configuring_corosync.html Pasos para upgrade: 1) validar cambios en la configuración en la nueva versión (CIB) 2) detener monitoreo de recursos (mantenance-mode=true) 3) bajar procesos del cluster (pacemaker + corosync) 4) actualizar software y CIB 5) levantar cluster 6) habilitar/configurar monitoreo de recursos Octubre 2013 37/45
  • 38.
    Ejemplos apache usando dosnodos con DRBD, activo/pasivo y activo/activo usando GFS2 (en fedora): "clusters from scratch" Demos: 1) configuración cluster 2) probar failover de VIP 3) Usar HA de MySQL con 2 nodos (DRDB) En ppt: 4) replicación MySQL Octubre 2013 38/45
  • 39.
    Configuración usada 2 VM1Gb Ram – 20Gb HD OpenSUSE 12.3 x64 Eth0 – 10.10.1.x - internal network en Vbox Eth1 – Bridged en Vbox Host – Mismo SO, VirtualBox 4.2.18-92.1 OpenSUSE incluye en los repositorios factory: Pacemaker 1.1.7-3 Corosync 1.4.3-4.1.1 Crmsh 1.2.4-3.1.1 Drbd 8.3.11-5.1.1 Dependencias para instalar todo con pacemaker – Quedan fuera utilitarios (hawk y crm_gui) 39/45
  • 40.
    1) configuración cluster a)configurar visibildad de nodos (/etc/hosts – ssh keys) b) instalar corosync y pacemaker en dos nodos c) configurar corosync (/etc/corosync/corosync.conf) d) configurar parametros globales pacemaker e) ver agentes disponibles y sus parámetros Octubre 2013 40/45
  • 41.
    2) probar failoverde VIP f) configurar IP virtual g) probar fallas Moviendo recursos a mano Generando fallas en el SO h) agregar notificación de transiciones y repetir fallas Octubre 2013 41/45
  • 42.
    3) Usar HAde MySQL con 2 nodos (DRDB) a) instalar DRBD en ambos nodos b) agregar un disco nuevo (/dev/sdb) c) configurar drdb (archivo /etc/drbd.conf) d) crear disco lógico DRBD en los dos nodos (drbdadm) e) sincronizar nodo2 f) crear filesystem en nodo1 y montarlo en disco DRBD g) ver los datos en el nodo2 h) configurar HA para DRBD i) probar HA de DRBD j) configurar MySQL usando FS en DRBD j) probar HA de MySQL Octubre 2013 42/45
  • 43.
    Réplicas MySQL conPRM percona-prm: https://github.com/percona/percona-pacemaker-agents/blob/master/doc/PRM-setupguide.rst • CIB: – log file y posición del master – segundos de atraso de slaves • Promoción: detener resto de slaves • Caída del master: – slaves hacen fencing del master si es necesario – detienen sus réplicas – eligen el más actualizado para promover en master – nodo elegido actualiza CIB con esta info Octubre – el resto apunta a éste tomando datos actualizados del CIB 2013 43/45
  • 44.
  • 45.
    Referencias • Documentación Pacemaker:http://www.clusterlabs.org • Pacemaker OCF Resource Agents: http://www.linux-ha.org/wiki/Resource_Agents • Overview of MySQL with DRBD/Pacemaker/Corosync http://dev.mysql.com/doc/refman/5.6/en/ha-drbd.html • Percona PRM setup guide: https://github.com/percona/percona-pacemaker-agents/blob/master/doc/PRMsetup-guide.rst • Florian Crouzat Blog: http://floriancrouzat.net • Heartbeat: http://www.linux-ha.org Octubre 2013 45/45