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