De mi viejo manual de Proxmox VE 3.x: Almacenamiento compartido con DRBD 8 en Proxmox VE 3.2

Saludos nuevamente.

En estos días he estado viendo en las estadísticas del blog que algunos están buscando documentación sobre uso de DRBD como almacenamiento compartido en Proxmox VE. Mi intención siempre fue hacer el artículo correspondiente, pero utilizando Proxmox VE 4.0 porque consideré en su momento que no tenía sentido subir el que ya tenía porque la tendencia es migrar hacia la última versión.

No obstante, por la cantidad de búsquedas que he visto, he decidido desempolvar el mamotreto donde tengo impreso mi Manual de Proxmox VE 3.2 (en una carpeta amarilla guardada en casa) para agregar el artículo de cómo configurar un almacenamiento compartido con DRBD 8 (8.3 para ser exactos) en Proxmox VE.

Quiero añadir que esta parte fue el resultado de una ayuda que le di a un amigo porque tenía sendos servidores DELL PE T420 y quería sacarle el máximo provecho. Se me ocurrió hacer un pequeño Clúster HA de Proxmox VE con dos nodos utilizando DRBD como almacenamiento compartido, idea que me sugirió otro amigo de Estonia: Ivan Ilves. Me llevó un tiempo leer todo lo referente a esto en la Wiki de Proxmox y artículos diseminados en Internet, hacer los experimentos correspondientes y llevar a la práctica todo aquello. Al final, mi amigo se fue para otros lares y todo aquello lo abandoné, pero me quedó el pequeño manual que hice, el cual pongo a disposición de ustedes.

NOTA: Tengo que censurar las imágenes porque contienen el dominio real de la institución.

Aquí les va:

(…)

Configuración básica del Clúster Proxmox VE 3.2

Ya instalados los dos nodos, y antes de poner el clúster a funcionar, hay que realizar algunos pasos previos.

Configuración de red

Antes de hacer cualquier cosa, lo primero es configurar las interfaces de red de los nodos. Según el diseño de red que se hizo, la gestión de los nodos se encuentra en la subred o VLAN 2 llamada “Gestión de Hipervisores”, la cual tiene el direccionamiento IP 10.0.1.16/28 donde los nodos tienen la dirección IP siguiente:

Primera tarjeta de red (Interfaz de Gestión) del nodo PRX-C0-1 —> 10.0.1.18/28
Primera tarjeta de red (Interfaz de Gestión) del nodo PRX-C0-2 —> 10.0.1.19/28

Ahora bien, como los servidores supuestamente vienen con la interfaz de gestión remota iDRAC, hay que proporcionarles una dirección IP:

Tarjeta iDRAC del nodo PRX-C0-1 —> 10.0.1.20/28
Tarjeta iDRAC del nodo PRX-C0-2 —> 10.0.1.21/28

Hasta aquí todo bien en parte, porque también hay que establecerle una dirección IP a la segunda tarjeta de red que va a funcionar como enlace para la sincronización del DRBD. Para ello basta con una pequeña subred de 2 equipos (o sea, un enlace punto a punto con un cable cruzado entre los nodos): 10.0.0.0/30.

Segunda tarjeta de red (Interfaz para el DRBD) del nodo PRX-C0-1 —> 10.0.0.1/30
Segunda tarjeta de red (Interfaz para el DRBD) del nodo PRX-C0-1 —> 10.0.0.2/30

En fin, la configuración de las interfaces de red en cada nodo es la siguiente:

Nodo PRX-C0-1

auto lo

iface lo inet loopback

 

iface eth0 inet manual

 

auto vmbr1

iface vmbr1 inet manual

      bridge_ports eth0.1

      bridge_stp off

      bridge_fd 0

 

auto vmbr2

iface vmbr2 inet static

      address 10.0.1.18

      netmask 255.255.255.240

      gateway 10.0.1.17

      bridge_ports eth0.2

      bridge_stp off

      bridge_fd 0

 

auto vmbr3

iface vmbr3 inet manual

      bridge_ports eth0.3

      bridge_stp off

      bridge_fd 0

 

auto vmbr4

iface vmbr4 inet manual

      bridge_ports eth0.4

      bridge_stp off

      bridge_fd 0

 

auto vmbr5

iface vmbr5 inet manual

      bridge_ports eth0.5

      bridge_stp off

      bridge_fd 0

 

auto vmbr6

iface vmbr6 inet manual

      bridge_ports eth0.6

      bridge_stp off

      bridge_fd 0

 

auto eth1

iface eth1 inet static

      address 10.0.0.1

      netmask 255.255.255.252

      network 10.0.0.0

      broadcast 10.0.0.3

      pointtopoint 10.0.0.2

 

Nodo PRX-C0-2

 

auto lo

iface lo inet loopback

 

iface eth0 inet manual

 

auto vmbr1

iface vmbr1 inet manual

      bridge_ports eth0.1

      bridge_stp off

      bridge_fd 0

 

auto vmbr2

iface vmbr2 inet static

      address 10.0.1.19

      netmask 255.255.255.240

      gateway 10.0.1.17

      bridge_ports eth0.2

      bridge_stp off

      bridge_fd 0

 

auto vmbr3

iface vmbr3 inet manual

      bridge_ports eth0.3

      bridge_stp off

      bridge_fd 0

 

auto vmbr4

iface vmbr4 inet manual

      bridge_ports eth0.4

      bridge_stp off

      bridge_fd 0

 

auto vmbr5

iface vmbr5 inet manual

      bridge_ports eth0.5

      bridge_stp off

      bridge_fd 0

 

auto vmbr6

iface vmbr6 inet manual

      bridge_ports eth0.6

      bridge_stp off

      bridge_fd 0

 

auto eth1

iface eth1 inet static

      address 10.0.0.2

      netmask 255.255.255.252

      network 10.0.0.0

      broadcast 10.0.0.3

      pointtopoint 10.0.0.1

Actualización del sistema operativo

Primero que todo, se debe actualizar el sistema operativo de los nodos. El Proxmox, al estar basado en Debian, trae por defecto las URLs de los repositorios de la misma más los de él mismo, pero desgraciadamente hay que pagar una suscripción para poder actualizar.

Algo que sucede con frecuencia es que, inicialmente, no se dispone de un repo en línea  actualizado de Debian, por lo que una opción válida es tener uno local en alguna ubicación e ir actualizándolo mientras se pueda. En este caso, el repo está ubicado dentro de un disco duro externo USB y solamente hay que modificar los archivos de configuración del APT para que lea los paquetes desde esa ubicación adicional (Ver Anexo 1).

Para el caso del repo de Proxmox, para los pobrecitos como nosotros, queda la opción de crear un repo local basado en el CD de instalación cada vez que se emita una nueva versión.

Ejemplo:

Ubicación del repo de Debian:

/media/flash/debian-repo/debian

/media/flash/debian-repo/debian-backports

/media/flash/debian-repo/debian-multimedia

/media/flash/debian-repo/debian-security

/media/flash/debian-repo/debian-updates

 

Ubicación del repo de Proxmox:

/media/flash/proxmox-repo/pve-cd-repository

/media/flash/proxmox-repo/pve-test-repository

 

Según el ejemplo anterior, los archivos de fuentes del APT de los dos nodos se configuran así:

/etc/apt/sources.list:

deb file:///media/flash/debian-repo/debian wheezy main contrib non-free

deb file:///media/flash/debian-repo/debian-security wheezy/updates main contrib non-free

/etc/apt/source.list.d/pve-enterprise:

#deb https://enterprise.proxmox.com/debian wheezy pve-enterprise

deb file://media/flash/proxmox-repo/pve-cd-repository wheezy pve-cd

NOTA: Existen otros repositorios aparte del de pago, pve-no-suscription y pvetest (alias del primero), los cuales son para los usuarios que no tienen una suscripción comprada, pero dichos repositorios [según la documentación de Proxmox] contienen paquetes que no están profundamente probados, o sea, dichos paquetes son para ser sometidos a pruebas por la comunidad y, por lo tanto, NO recomiendan su uso en entornos de producción. No obstante, hasta el momento no han presentado problemas.

Entonces, la copia local de que se dispone también está en el disco duro externo, por lo cual se añadiría la siguiente línea en el archivo /etc/apt/sources.list.d/pve-enterprise:

deb file://media/flash/proxmox-repo/pve-test-repository wheezy pvetest

Una vez modificados los archivos del gestor de paquetes APT solamente queda actualizar el sistema. En los dos nodos se debe ejecutar el siguiente comando:

# apt-get update && apt-get upgrade -y

Y esperar pacientemente a que termine para luego reiniciar los dos nodos.

Visibilidad de los nodos

Primero que todo, los nodos deben ser “visibles” entre sí. Para ello hay que editar el archivo /etc/hosts en los dos nodos:

Nodo PRX-C0-1

127.0.0.1   localhost.localdomain              localhost

 

10.0.1.18   prx-c0-1.red.dominio.cu       prx-c0-1    pvelocalhost

10.0.1.19   prx-c0-2.red.dominio.cu       prx-c0-2

 

10.0.1.20   prx-c0-1_idrac.red.dominio.cu prx-c0-1_idrac

10.0.1.21   prx-c0-2_idrac.red.dominio.cu prx-c0-2_idrac

 

10.0.0.1    prx-c0-1.red.dominio.cu       prx-c0-1

10.0.0.2    prx-c0-2.red.dominio.cu       prx-c0-2

Nodo PRX-C0-2

127.0.0.1   localhost.localdomain              localhost

 

10.0.1.19   prx-c0-2.red.dominio.cu       prx-c0-2    pvelocalhost

10.0.1.18   prx-c0-1.red.dominio.cu       prx-c0-1

 

10.0.1.21   prx-c0-2_idrac.red.dominio.cu prx-c0-2_idrac

10.0.1.20   prx-c0-1_idrac.red.dominio.cu prx-c0-1_idrac

 

10.0.0.2    prx-c0-2.red.dominio.cu       prx-c0-2

10.0.0.1    prx-c0-1.red.dominio.cu       prx-c0-1

Luego probar el PING entre los nodos tanto por el nombre FQDN como por el nombre NetBIOS. Si todo está bien, se pasa al siguiente paso.

Creación del clúster Proxmox

Ahora se procede a crear el clúster Proxmox con los dos nodos ya actualizados. Para ello en el primer nodo se ejecuta el comando siguiente:

root@prx-c0-1:# pvecm create cuba-pveclr

El cual dará como resultado la creación de clúster.

Cluster Proxmox - 1

En este punto ya el clúster está creado y el primer nodo ya es miembro del mismo como se muestra en la imagen la salida del comando

root@prx-c0-1:# pvecm status

Cluster Proxmox - 2

Ahora bien, se procede a añadir el segundo nodo al clúster, para ello en dicho nodo se debe ejecutar el siguiente comando:

root@prx-c0-2:# pvecm add prx-c0-1

Esto lo que hace por debajo es añadir la llave pública SSH del primer nodo al segundo nodo para luego establecer una autenticación basada en claves públicas entre los nodos. O sea:

Cluster Proxmox - 3

Se acepta la clave pública del primer nodo para luego proporcionar la clave de root del mismo. Una vez hecho esto se obtiene este resultado:

Cluster Proxmox - 4

Claro está que esto es posible porque entre las líneas del archivo de configuración del SSH ubicado en /etc/ssh/sshd_config están estas dos:

Port 22

PermitRootLogin yes

NOTA: Normalmente muchos administradores cambian el valor de estos parámetros (yo, por ejemplo, le establezco el valor 40497 al puerto y deniego el acceso mediante el root, o sea, me autentico con un usuario restringido para luego autenticar con root), pero esto afectaría la comunicación entre los Proxmoxes, así que, por el momento, se debe dejar tal y como vienen por defecto. No obstante, después veré cómo tunear el SSH para llevarlo al estado deseado sin afectar la comunicación entre los nodos.

Para verificar que el segundo nodo está incluido como miembro del clúster se ejecuta el siguiente comando:

root@prx-c0-2:# pvecm status

Cluster Proxmox - 5

Como se puede ver, el clúster ya muestra que tiene dos nodos y cada uno tiene un voto.

NOTA: El nodo que se vaya a incluir en un clúster Proxmox tiene que ser un nodo virgen, o sea,  no debe tener creadas máquinas virtuales, en caso contrario dará un error y no se añadirá al mismo.

Una vez que el clúster está activo, el directorio /etc/pve se sincroniza entre los nodos miembros. En otras palabras, cualquier archivo que se cree o modifique dentro de este directorio en uno de los nodos se replicará en el otro automáticamente.

Preparación de los discos duros

Este es un paso importante antes de la creación del(los) almacenamiento(s) compartido(s) entre los nodos miembros del clúster.

En este caso se dispone de un disco Seagate Barracuda de 500 GB, 7.2K RPM, SATA II para crear el almacenamiento compartido entre los nodos. Basta con crear una partición que abarque todo el disco. No importa el tipo de sistema de archivos de la partición, normalmente se deja el mismo ext3.

La herramienta básica de particionado de disco en GNU/Linux es el fdisk. Para ver la tabla de particiones de un disco hay que ejecutar fdisk usando como parámetro el enlace simbólico del mismo, o sea:

root@prx-c0-1:# fdisk /dev/sdb

NOTA: Los tamaños de discos mostrados acá son ejemplos. En un disco de 500 GB el proceso tardará más tiempo.

Particionado - 1

Como se ve, el disco no está particionado. Entonces procedemos a crear la nueva partición de la siguiente manera:

Particionado - 2

Ya creada la partición hay que escribir los cambios en el disco duro para que el sistema operativo lo vuelva a leer, pero con la nueva tabla de particiones.

Particionado - 3

Para ver nuevamente la tabla de particiones hay que ejecutar el mismo comando anterior:

root@prx-c0-1:# fdisk /dev/sdb

Particionado - 4

Ahora el disco ya está particionado.

Este mismo procedimiento hay que realizarlo en el segundo nodo, y una vez completado ya estamos en condiciones de ir al siguiente paso.

Configuración del DRBD 8.3

Según la documentación en línea del proyecto acerca de un Clúster HA de  Proxmox con dos nodos, el almacenamiento compartido que se recomienda es el DRBD, que no es más que un RAID 1 por red.

DRBD es una opción barata a las caras cabinas de almacenamiento como HP EVA, NetApp, IBM, etc. El modo de funcionamiento es muy sencillo, se necesitan dos servidores conectados mediante un enlace de red con un ancho de banda suficientemente grande para soportar la replicación de datos, o sea, o un enlace de 10 GBps mediante Ethernet o Canal de Fibra Óptica (como también puede usarse enlaces de tipo Infiniband, muy usados en proveedores de servicios en su conectividad interna o externa, el cual no es más que otro tipo de enlace de Fibra Óptica) o en su defecto un enlace agregado (bonding) de 2, 4 o 6 GBps para garantizar que no haya fallos ni ralentizaciones ni cuellos de botella durante la sincronización; el software DRBD versión 8.3 o superior y muuuuuuuuuuuuucha paciencia porque durante el proceso pueden ocurrir algunos problemas.

En este caso el enlace se realiza mediante un cable cruzado o directo conectado a la segunda tarjeta de red de los servidores.

Bueno, para ir entrando en materia, lo primero que hay que hacer es montar el paquete del DRBD en los dos nodos:

# apt-get update
# apt-get install drbd8-utils

DRBD - 1

Una vez instalado el paquete se procede a configurar el servicio DRBD. Los archivos de configuración son los siguientes:

/etc/drbd.conf

/etc/drbd.d/global_common.conf

/etc/drbd.d/*.res

Donde

  • /etc/drbd.conf

 

Contiene solamente vínculos a los archivos ubicados dentro del directorio /etc/drbd.d.

DRBD - 2

  • /etc/drbd.d/global_common.conf

 

Contiene las configuraciones globales del servicio DRBD como el tipo de protocolo a usar, acciones ante fallos de conectividad (recuperación ante la detección de un estado de Split-Brain), tasa de transferencia de sincronización, etc.

  • /etc/drbd.d/*.res

 

Contiene los recursos y dispositivos DRBD que se utilizarán como dispositivos base de particiones, grupo de volúmenes lógicos u otros.

De estos tres archivos solamente modificaremos las configuraciones globales y los recursos DRBD. Eso sí, antes de modificarlos hay que hacer una copia de seguridad del archivo original.

Entonces, en el primer nodo se modifica los archivos antes mancionados:

Archivo /etc/drbd.d/global_common.conf:

global {

      usage-count no;

}

 

common {

      protocolo C;

 

      startup {

            wfc-timeout 0;

            degr-wfc-timeout 60;

            become-primary-on both;

      }

 

      net {

            cram-hmac-alg sha1;

            shared-secret “<Contraseña de autenticación>”;

            allow-two-primaries;

           # Configuracion para la situacion de “Split-Brain” (aqui se recomienda # usar o un cable cruzado entre los dos nodos DRBD, o un enlace

           # agregado [bonding] contra un enlace trunking de un switch L2 en cada

           # uno de los nodos; claro, si el switch es Gigabit Ethernet o 10

           # Gigabit Ethernet, mejor)

           after-sb-0pri discard-zero-changes;

           after-sb-1pri discard-secondary;

           after-sb-2pri disconnect;

      }

 

      syncer {

            rate 132M;

            verify-alg md5;

      }

}

Para recurso o dispositivo DRBD se debe crear archivos .res por separado. En este caso se utiliza solamente uno y se nombra storage0.res.

Archivo /etc/drbd.d/storage0.res:

resource storage0 {

on prx-c0-1 {

            device /dev/drbd0;

            disk /dev/sdb1;

            address 10.0.0.1:7788;

            meta-disk internal;

      }

      on prx-c0-2 {

            device /dev/drbd0;

            disk /dev/sdb1;

            address 10.0.0.2:7788;

            meta-disk internal;

      }

}

Luego copiar estos archivos al segundo nodo para tener la misma configuración en los dos nodos (además de que es la mejor opción para evitar errores humanos) mediante el comando:

root@prx-c0-1:# scp /etc/drbd.d/* root@10.0.1.19:/etc/drbd.d/

Iniciar el servicio en los dos nodos

# service drbd start

No asustarse con los errores que saldrán en pantalla después que el servicio inicia. Eso es normal porque la información de metadatos no está creada.

DRBD - 3

Esto se puede confirmar chequeando el estado del DRBD mediante el comando en uno de los nodos:

root@prx-c0-1:# service drbd status

DRBD - 4

Ahora hay que crear los metadatos en los dos nodos:

root@prx-c0-1:# drbdadm create-md storage0
root@prx-c0-2:# drbdadm create-md storage0

DRBD - 5

Para posteriormente levantar el recurso:

root@prx-c0-1:# drbdadm up storage0
root@prx-c0-2:# drbdadm up storage0

Reiniciamos el servicio en los dos nodos para que los cambios tengan efecto

root@prx-c0-1:# service drbd restart
root@prx-c0-2:# service drbd restart

Claro, habrá otros errores, de los cuales no debemos preocuparnos, pero ya el estado del servicio es diferente:

DRBD - 6

En este punto el servicio está activo, los nodos están conectados, pero sin sincronizar. Para sincronizar los dispositivos DRBD se debe ejecutar el comando siguiente en uno de los nodos:

root@prx-c0-1:# drbdadm — –overwrite-data-of-peer primary storage0

Y se puede ver el estado de la sincronización todo el tiempo (cada 1 segundo) de esta manera:

root@prx-c0-1:# watch –n 1 “service drbd status” > /dev/tty9 &

DRBD - 7

En lo particular, a mí me gusta más de la otra manera:

root@prx-c0-1:# watch –n 1 “cat /proc/drbd” > /dev/tty9 &

Y ponerlo en el archivo /etc/rc.local para que se ejecute automáticamente durante el momento del arranque del sistema.

Una vez sincronizados los discos, el estado del servicio se ve así:

DRBD - 8

Finalmente para lograr el estado Primary en ambos nodos, basta con reiniciar el servicio DRBD en el segundo nodo, o sea:

root@prx-c0-2:# service drbd restart

DRBD - 9

Y todo se verá así:

DRBD - 10

En este punto ya tenemos todo lo necesario para crear el almacenamiento compartido que utilizará Proxmox para guardar los discos de las máquinas virtuales.

Almacenamiento compartido en el Clúster Proxmox

El tipo de almacenamiento que se utilizará será LVM, pero para eso hay que realizar algunos pasos previos:

1.- Crear el volumen físico:

root@prx-c0-1:# pvscan
(…) VG pve lvm2 (…)

Almacenamiento Compartido - 1

root@prx-c0-1:# pvcreate /dev/drbd0
  Physical volume “/dev/drbd0” successfully created

Almacenamiento Compartido - 2

root@prx-c0-1:# pvscan
(…) VG pve lvm2 (…)
(…) /dev/drbd0     lvm2 (…)

Almacenamiento Compartido - 3

NOTA: Los tamaños de discos mostrados acá son ejemplos. En un disco de 500 GB el proceso tardará más tiempo.

2.- Crear grupo de volúmenes

root@prx-c0-1:# vgcreate storage0 /dev/drbd0
  Volume group “storage0” successfully created

Almacenamiento Compartido - 4

root@prx-c0-1:# vgscan

Todas las condiciones necesarias están completadas. El siguiente paso es añadir el grupo de volúmenes creado a la lista de almacenamientos del clúster. El proceso es el siguiente:

Proxmox —> Datacenter —> Pestaña “Storage” —> Add —> LVM

Almacenamiento Compartido - 6

En la nueva ventana que aparece, se deben especificar los siguientes datos:

ID: storage0
Base storage: Existing volumen groups
Volume group: storage0
Enable: Checked
Shared: Checked

Almacenamiento Compartido - 7

Completado este paso aparecerá en los dos nodos del clúster el nuevo almacenamiento compartido, como se ve en la imagen:

Almacenamiento Compartido - 8

Este nuevo almacenamiento solamente contendrá los discos duros de las máquinas virtuales KVM en forma de volúmenes lógicos.

NOTA IMPORTANTE: Una vez que se crea el grupo de volúmenes y todo esté funcionando bien, puede darse el caso en que el nodo se reinicie inesperadamente (por causa de una fluctuación fuerte de voltaje, apagón, agotamiento de la batería, etc.), cuando esto pase, se debe realizar los pasos descritos en el epígrafe de la página «Asegurarse de que el dispositivo de bloques DRBD que soporta el LVM inicie en el momento del arranque«.

NOTA: Mientras se vayan probando los otros tipos de almacenamiento compartido que soporta Proxmox, se irán añadiendo como anexos. No obstante, el proceso de creación de máquinas virtuales KVM sobre cualquier tipo de almacenamiento compartido es siempre el mismo.

Máquinas virtuales sobre el almacenamiento compartido

Ahora se crearán las máquinas virtuales KVM donde en la opción “Hard Disk” en el parámetro “Storage:”, en vez de usar el almacenamiento local, se utilizará el nuevo almacenamiento compartido. Ah, esto trae como consecuencia que se deshabilita el parámetro “Format:” y se establece por defecto el valor “Raw disk image (raw)”.

En fin, esta es la secuencia de creación de una máquina virtual KVM con las nuevas condiciones:

Opciones Generales

VM_KVM - 1

Tipo de Sistema Operativo que tendrá la máquina virtual

VM_KVM - 2

Imagen de instalación

VM_KVM - 3

NOTA 1: El nombre del archivo de imagen de CD/DVD de instalación NO DEBE CONTENER ESPACIOS, debido a que el Proxmox “desaparece” el dispositivo automáticamente una vez que crea la máquina virtual, aunque también ocurre en el momento en que se desee añadir otra imagen para uso posterior y su nombre tenga el mismo problema. 🙂

NOTA 2: En caso que se desee montar sistemas operativos de Microsoft del tipo Windows 7/Server 2008R2 o Windows 8/Server 2012, en la documentación se recomienda que se utilice los drivers VirtIO proporcionados por Red Hat. Esto se hace creando un nuevo dispositivo de medios de CD/DVD y especificarle la imagen de dichos drivers. Hasta el momento en que se estaba redactando este manual, la versión del VirtIO era la 0.1-81 y el archivo es virtio-win-0.1-81.iso. Una vez iniciada la máquina virtual, se le debe especificar donde va a cargar los drivers que faltan. Se deben seleccionar todos (para los dispositivos de almacenamiento, modificaciones en la asignación de la memoria RAM y la interfaz de red).

Disco duro de la máquina virtual

VM_KVM - 4

Cantidad de núcleos que utilizará la máquina virtual

VM_KVM - 5

Memoria RAM que utilizará la máquina virtual

VM_KVM - 6

NOTA 3: Si se tiene un sistema operativo basado en Windows (7/2008R2 u 8/2012) y se desee utilizar los drivers VirtIO, se recomienda la segunda opción, o sea, “Automatically allocate memory within this range” y especificar el valor mínimo y máximo de memoria a utilizar.

Tarjeta de Red Virtual que se utilizará

VM_KVM - 7

NOTA 4: Volviendo al tema de los drivers VirtIO en Windows 7/2008R2 y 8/2012, se recomienda en este caso, escoger la opción VirtIO (paravirtualized).

Chequear y confirmar los datos proporcionados para luego proceder con la creación definitiva de la máquina virtual

VM_KVM - 8

En este punto ya tenemos nuestra primera máquina virtual sobre el almacenamiento compartido. Aunque hay que hacer un ajuste posterior, dado que, al tratar de encenderla, nos da el siguiente error:

Error: No accelerator found!

Dicho ajuste consiste en deshabilitar la opción “KVM hardware virtualization” ubicada en la pestaña “Options”:

VM_KVM - 9

NOTA 5: Para sistemas con Windows esta opción no se debe modificar este parámetro, dado que el Windows hospedero explotará con un “Pantallazo Azul de la Muerte de  Windows” con la palabra “STOP” y varios códigos hexadecimales.

Confirmar que no se necesita aceleración para la máquina virtual con GNU/Linux…

VM_KVM - 10

VM_KVM - 11

Y ya. Completado esto, se procede a encenderla

VM_KVM - 12

La “imagen” de disco duro de la máquina virtual recién creada no es más que un nuevo volumen lógico ubicado en grupo de volúmenes anteriormente creado. Esto se puede ver en la siguiente lista:

Almacenamiento Compartido - 9

Y también el tamaño que ocupa:

Almacenamiento Compartido - 10

Una vez instalada la máquina virtual se pueden crear otras con sistemas operativos diferentes o clonar las ya existentes (que para mí es una buena opción para no perder tiempo en instalar nuevas). Poe ejemplo, para clonar una máquina virtual primeramente se selecciona la misma, luego dar clic derecho y pinchar la opción “Clone”. Esto mostrará una nueva ventana donde se deben especificar algunos valores, los cuales son:

Target node: <Nodo del clúster adonde se migrará la máquina virtual>
VM ID: <El ID de la máquina virtual a migrar>
Name: <Nombre que se le dará a la máquina virtual>
Mode: <Modo de clonación, se escoge “Full Clone” para tener una copia completa de la máquina virtual original>
Snapshot: current
Target Storage: <Almacenamiento destino donde se guardará la máquina virtual>

VM_KVM - 13

VM_KVM - 14

NOTA 7: Recalcar que todos estos cambios que se realizan sobre el almacenamiento compartido se replican en ambos nodos del clúster gracias al DRBD, lo cual hace que se muestre lo mismo en ambos nodos independientemente de donde se origine la tarea.

Ajustes posteriores en esta parte de la infraestructura

Hasta aquí hemos visto cómo crear un almacenamiento compartido con DBRD 8 y crear máquinas virtuales KVM (hasta el momento las únicas que se pueden crear directamente en el grupo de volúmenes LVM sobre el DRBD, para el caso de los contenedores hay que hacer algunas cosas a mano).

Ahora toca el turno de hacerle algunos pequeños ajustes (tunear) a esta parte de la infraestructura. Dichos cambios son dos:

1.- Asegurarse de que el dispositivo de bloques DRBD base para el LVM se cargue en el momento del arranque

Mientras se está trabajando con el almacenamiento compartido (que no es más que un grupo de volúmenes sobre un dispositivo DRBD ubicado en el segundo disco), puede suceder que el nodo se reinicie por cualquier causa (reinicio forzado o deseado).

Al reiniciar el nodo el DRBD falla al cargar porque el LVM no encuentra el dispositivo base (underlining device) del DRBD. Esto trae como consecuencia que el DRBD no inicie adecuadamente y se pierda la sincronización de os discos a pesar de haber conexión entre los nodos. Esto se ve de la siguiente manera:

root@prx-c0-2:# cat /proc/drbd
(…)
0:storage0  Connected   Primary/Primary   Diskless/UpToDate C
(…)

Aquí se puede ver que falta el disco o la parte del DRBD a sincronizar.

Para resolver este problema hay que ir al archivo /etc/lvm/lvm.conf en los dos nodos y donde aparece la línea

filter = [ “a/.*/” ]

modificarla con lo siguiente

filter = [ “r|/dev/sdb1|” , “r|/dev/disk/|” , “a/.*/” ]

y luego reiniciarlos para que el dispositivo DRBD inicie adecuadamente.

NOTA: En toda la documentación que he leído sobre DRBD y LVM/cLVM recalcan que este cambio es estrictamente obligatorio, dado que en la configuración por defecto de este último no está incluida la detección de este tipo de particiones sobre dispositivos DRBD ubicados en otros discos o soportes externos.

Ya reiniciados los nodos se puede ver que todo está OK:

Almacenamiento Compartido - 12

2.- La situación del Split-Brain del DRBD

El Split-Brain es un estado en que se pierde la conexión entre los nodos a pesar de haber conectividad entre los mismos. Cada uno cree que el otro está fuera del servicio y actúan como entidades separadas. Para resolver este problema hay que definir quién es el nodo víctima y quien es el sobreviviente. Una vez escogidos los roles se procede a resolver el problema:

  • Nodo sobreviviente

 

Ejecutar el comando:

# drbdadm — –overwrite-data-of-peer primary storage0

Y luego chequear el estado del DRBD:

# cat /proc/drbd

  • Nodo víctima

 

Reiniciar el servicio:

# service drbd restart

Y hasta aquí el artículo. Créanme que me fue difícil extraerlo, jejejeje. Cualquier error que encuentren o duda que tengan, sin problema, coméntenlo en el blog.

Y me voy, que mi esposa me va a matar porque quedé con ella en una «tarea de choque» (no sean mal pensados, es una sopa bien cargada que quedé en hacerle y aún tengo parte de los ingredientes acá en la oficina).:-D

Espero les sirva. Chao. Nos vemos el lunes.

🙂

P.D.: Ah, se me olvidaba, a partir del lunes salgo de vacaciones por 9 días. Así que puede que publique pocos posts o ninguno. 🙂

Acerca de Hector Suarez Planas

Es Licenciado en Ciencia de la Computación (3 de julio de 2002). Ha sido Administrador de Red en varias organizaciones, Programador y Analista de Sistemas. Actualmente se desempeña como Administrador de Red del Telecentro Tele Turquino de Santiago de Cuba. Tiene experiencia con sistemas Windows y GNU/Linux, Infraestructura de Redes (Cisco, AlliedTelesis, Netgear y HP ProCurve, Vyatta/VyOS), Servidores tanto físicos como virtuales (plataformas VMWare, Proxmox VE y Xen), Sistemas de Seguridad Informática (Snort/Suricata IDS, appliances AlienVault OSSIM), programador (Delphi, C++ Builder, Perl [poco], Python [algo]), entre otras cosas. Actualmente estoy incursionando en todo lo que tiene relación con Cloud Computing (OpenStack) y Centros de Datos. :-)
Esta entrada fue publicada en Proxmox VE. Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *