Intro
En nuestro cluster hemos decidido incluir dos discos SSD para contener las imágenes de los discos duros de las máquinas virtuales.
En estos discos no vamos a emplear lvm. Emplearemos la siguiente estrategia:
Crear la partición a compartir en los discos SSD
Crear el módulo ssd en drbd
Formatear la partición como GFS2
Incluir el módulo como recurso del cluster
Crear la partición a compartir en los discos SSD
Para ver que device le ha asignado el sistema (lo normal es que le haya asignado /dev/sdb) hacemos parted -l, de donde extraemos la siguiente información:
Error: /dev/sdb: unrecognised disk label Model: ATA Crucial_CT250MX2 (scsi) Disk /dev/sdb: 250GB Sector size (logical/physical): 512B/4096B Partition Table: unknown Disk Flags:
De aquí se desprende que le ha asignado el device /dev/sdb
Creamos la partición:
# parted -a optimal /dev/sdb
De la salida anterior de parted -l vemos que el disco no tiene tabla de particiones, así que lo primero que haremos será crearle una. Como no vamos a arrancar desde él, decidimos crearle una tabla de particiones gpt, aunque no supera los 2TB ni por asomo:
(parted) mklabel gpt
Si ahora hacemos un print free:
(parted) print free
Model: ATA Crucial_CT250MX2 (scsi)
Disk /dev/sdb: 250GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Numero Inicio Fin Tamaño Sistema de ficheros Nombre Banderas
17,4kB 250GB 250GB Free Space
Vemos que ya reconoce la tabla de particiones, con lo que podemos crear nuestra prartición:
(parted) mkpart primary 1GB 250GB
Para verla:
(parted) print
Model: ATA Crucial_CT250MX2 (scsi)
Disk /dev/sdb: 250GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Numero Inicio Fin Tamaño Sistema de ficheros Nombre Banderas
1 1000MB 250GB 249GB primary
Sospecho que en los discos SSD no será necesario alinear las particiones, pero por si acaso:
(parted) align-check opt 1
1 aligned
Hacemos lo mismo en el otro nodo.
Añadir el módulo a drbd
Crear el archivo de configuración del nuevo módulo
El nuevo módulo se llamará ssd. Para crearlo copiaremos en el directorio /etc/drbd.d el archivo discodatos.res a discossd.res y lo editaremos para que quede como sigue:
resource ssd {
# nombre del dispositivo
device /dev/drbd1;
# indicamos la localización de los metadatos. Como posibles valores admite internal
# y el dispositivo donde se van a almacenar los metadatos.
meta-disk internal;
startup {
# Indicamos que vamos a poner los dos nodos en primario al arrancar. En nuestro caso será Pacemaker quien se encargue de esto.
# become-primary-on both;
}
net {
# Indica al sistema que va a permitir el que los dos nodos sean primarios a la vez.
allow-two-primaries;
# definimos las políticas de recuperación automática en caso de split-brain
after-sb-0pri discard-zero-changes;
# after-sb-1pri discard-secondary;
after-sb-1pri consensus;
after-sb-2pri disconnect;
# Tunning: Auto-Ajuste del buffer de envío.
# sndbuf-size 0;
# Tunning: Opciones que afecta al rendimiento de escritura en el nodo secundario.
# Para controladoras RAID de alto rendimiento suelen servir estos valores.
# max-buffers 8000;
# max-epoch-size 8000;
# max-buffers 16000;
# max-epoch-size 16000;
# Tunning: Parámetro de optimización muy dependiente del hardware
# unplug-watermark 16;
# unplug-watermark 16000;
}
disk {
# Tunning: estas configuraciones son para optimizar/tunear el rendimiento de DRBD
# y solo deben realizarse en sistemas donde las controladoras de disco disponen de
# batería de respaldo para la cache.
# no-disk-barrier;
# no-disk-flushes;
}
syncer {
# Tunning: Configurar en caso de que usemos sistemas con escritura intensiva
# al-extents 3389;
}
# definimos las ip's, puerto de acceso y los discos en cada uno de los nodos.
on nodo1 {
address ip_de_gestión_del_nodo1:7789;
disk /dev/sdb1;
}
on nodo2 {
address ip_de_gestión_del_nodo2:7789;
disk /dev/sdb1;
}
}
Checkeamos la configuración con drbdadm dump.
Inicializar el módulo
Para inicializar el módulo hemos de hacer lo siguiente en ambos nodos:
# drbdadm create-md ssd
Luego, también en ambos nodos, hemos de levantar el módulo:
# drbdadm up ssd
La salida de drbd-overview:
1:ssd/0 Connected Secondary/Secondary Inconsistent/Inconsistent C r—–
Marcar un nodo como primario
Para marcar uno de los nodos como primario, debemos de hacer:
# drbdadm primary –force ssd
De este modo en el nodo en el que se ejecuta se marca el módulo como primario y se comienza a replicar en el otro nodo.
Configurar los recursos
Configurar las restricciones
# pcs cluster cib cons
# pcs -f cons constraint order start dlm-clone then promote drbd_ssd-clone
Adding dlm-clone drbd_ssd-clone (kind: Mandatory) (Options: first-action=start then-action=promote)
De este modo evitamos que se ponga como master el drbd_ssd antes de que arranque dlm
# pcs -f cons constraint order start clvmd-clone then start ssdFS-clone kind=Serialize
Adding clvmd-clone ssdFS-clone (kind: Serialize) (Options: first-action=start then-action=start)
# pcs -f cons constraint colocation add master drbd_ssd-clone with dlm-clone
# pcs -f cons constraint colocation add ssdFS-clone clvmd-clone
Así evitamos que trate de montar el sistema de ficheros ssd antes de tener el directorio /dev/vg_ssd
# pcs cluster cib-push cons