Ubuntu Cluster con Pacemaker

De Ardemans Wiki
Saltar a: navegación, buscar

Apuntes sobre como he instalado un cluster en ubuntu, para distribuir recursos en HA entre dos máquinas.

En este caso lo que buscaba era tener solamente unas IP's balanceando entre las dos máquinas, para que si una de ellas se caia fuera la otra la que asumiera el rol de esa VIP.

Las pruebas son con Ubuntu 14.04

En primero lugar he instalado el paquete pacemaker de Ubuntu, el cual me ha instalado otros tantos, entre ellos corosync y cluster-glue

apt-get install pacemaker
The following NEW packages will be installed:
  cluster-glue corosync crmsh libcfg6 libcib3 libcmap4 libcorosync-common4
  libcpg4 libcrmcluster4 libcrmcommon3 libcrmservice1 libesmtp6 libheartbeat2
  libibverbs1 liblrm2 liblrmd1 libnet1 libnspr4 libnss3 libnss3-nssdb
  libopenhpi2 libopenipmi0 libpe-rules2 libpe-status4 libpengine4 libperl5.18
  libpils2 libplumb2 libplumbgpl2 libqb0 libquorum5 librdmacm1 libsam4
  libsnmp-base libsnmp30 libstonith1 libstonithd2 libtotem-pg5
  libtransitioner2 libvotequorum6 libxslt1.1 openhpid pacemaker
  pacemaker-cli-utils python-lxml resource-agents

Una vez instalados los paquetes necesarios parece que hace falta que se vean entre las dos máquinas através del servicio corosync, para lo cual hay que generar unas claves ssh que hay pasar de una a otra máquina.

Desde una de las máqiunas, en este caso la llamada secmon1, he creado la clave con:

root# corosync-keygen

hay que generar entropia pulsando muchas vece sel teclado. Una vez finalizado ya tenemos nuestro nuevo fichero con la clave, en /etc/corosync/authkey

Este fichero tendremos que copiarlo de alugna forma a los otros nodos, en mi caso al secmon2, en la misma ruta.

Después editamos el fichero de configuracion de /etc/corosync/corosync.conf, para editar la parte en el que especificamos la interface por la que se va a sincronizar:

        interface {
                # The following values need to be set based on your environment
                ringnumber: 0
                '''bindnetaddr: 10.15.74.0'''
                mcastaddr: 226.94.1.1
                mcastport: 5405
        }

Y tambien para que el servicio se pueda arrancar tenemos que editar en ambas máqiunas el fichero /etc/default/corosync:

# start corosync at boot [yes|no]
START=yes

Ahora ya podemos arrancar el servicio corosync y de pacemaker

# service corosync start
# service pacemaker start


DRBD

Para configurar el disco compartido entre las dos máqiunas con DRBD, tendremos que instalar en primer lugar el paquete necesario

root# apt-get install drbd8-utils

También tendremos que cargar el módulo de kernel

modprobe drbd

y tendremos que añadir el módulo en el /etc/modules

Para este ejemplo vamos a usar un disco lógico de LVM para hacer la replicación de los discos

El disco con el que voy a trabajar se llama:

/dev/mapper/tde--pro--secmon1--vg-quorum

Sobre este disco vamos a hacer una partición primaria que será la que vamos a replicar a l otro nodo:

isk /dev/mapper/tde--pro--secmon1--vg-quorum: 524 MB, 524288000 bytes
189 heads, 61 sectors/track, 88 cylinders, total 1024000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x7488a29d

                                   Device Boot      Start         End      Blocks   Id  System
/dev/mapper/tde--pro--secmon1--vg-quorum1            2048     1023999      510976   83  Linux


Tenemos que realizar la misma operación en el otro nodo, ya que las particiones han de ser idénticas. Podemos hacer uso de sfdisk -d para hacer volcado de la configuración del primero de los servers para después aplicarlo en los sucesivos


Una vez tengamos las particiones creadas y preparadas en las máquinas podemos definir la configuracion de nuestro cluster DRDM. Editamos el fichero de configuracion: /etc/drbd.d/quorum.res

resource quorum {
  device /dev/drbd0;
  disk /srv/vdisks/quorum.disk;
  meta-disk internal;
  on tde-pro-secmon1 {
    address 10.15.74.226:7788;
  }
  on tde-pro-secmon2 {
    address 10.15.74.227:7788;
  }
  syncer {
    rate 10M;
  }
}

Esta configuración va en cada uno de los servidores con drbd, teniendo en cuenta el nombre de disco en cada caso (en mi caso era diferente para un servidor y para otro, porque el vg de lvm se llamaba diferente en cada servidor)

En cada uno de los servidores creamos el sistema de bloques de drbd

drbdadm create-md quorum

y levantamos el disco

drbdadm up quorum

Podemos ver el estado de este disco con:

drbd-overview


Ahora tenemos que inicializar la sincronización de los discos, para lo cual:

drbdadm -- --overwrite-data-of-peer primary quorum

y con esto tendremos que ver que ya están sincronizados, en ambos lados:

oot@tde-pro-secmon2:/etc/drbd.d# drbd-overview
  0:quorum/0  Connected Secondary/Primary UpToDate/UpToDate C r-----

Ahora, podemos darle formato al disco, asegurándonos que en nodo en el que lo vamos a hacer tiene el rol de primario

# drbdadm primary quorum
# mkfs.ext4 /dev/drbd0


Si el nodo actual es el primario veremos mensajes como el siguiente

Wed Mar 25 15:54:28 UTC 2015
  0:vote/0  Connected Primary/Secondary UpToDate/UpToDate C r-----

Pone lo de Primary por delante, si este fuera el nodo secundario sería al revés. Si el nodo no estuvieria conectado, y por lo tanto sincronizando, en vez de connected veríamos un "StandAlone". Otra posibilidad es que veamos un WFConnecting, lo que quiere decir que no es capaz de conectar contra el otro nodo.

Antes de empezar a configurar el cluster en sí, tendremos que parar el servicio DRBD, y hacer que no se arranque el servicio de forma automática, ya que será pacemaker el encargado de levantarlo.

# service drbd stop
# update-rc.d drbd remove 

Configurando el cluster

Antes de nada, es una lectura muy recomendable la de este enlace, que comenta la problématica cuando tenemos un cluster de solo dos nodos.