Alta disponibilidad con Pacemaker

  • 923 views
Uploaded on

Todo lo que se necesita saber para usar Pacemaker como solución de alta disponibilidad en bases de datos. …

Todo lo que se necesita saber para usar Pacemaker como solución de alta disponibilidad en bases de datos.

Presentación dada en la conferencia MySQL NoSQL & Cloud Latin America en Buenos Aires el 15/10/2013.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
923
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
16
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 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
  • 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. Agenda 1)¿Pacemaker? 2)Instalación 3)Configuración • • • Recursos Agentes Fencing 4)Monitoreo 5)Operación 6)Ejemplos / Demos Octubre 2013 3/45
  • 4. 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
  • 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. Arquitectura Octubre 2013 http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Pacemaker_Explained/_pacemaker_architecture.html 6/45
  • 7. Arquitectura Octubre 2013 http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Pacemaker_Explained/_pacemaker_architecture.html 7/45
  • 8. 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
  • 9. 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
  • 10. Octubre 2013 http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Pacemaker_Explained/_internal_components.html 10/45
  • 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ó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
  • 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 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 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á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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. 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
  • 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 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
  • 42. 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
  • 43. 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
  • 44. ¿Preguntas? nelson.calero@awen.com.uy @ncalerouy Octubre 2013 44/45
  • 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