Guest cluster de Windows con Windows Server 2016 Hyper-V

Publicado el Dejar un comentario Etiquetas: , , ,

Aquesta entrada també està disponible en: Catalán

Desplegar un guest cluster de Windows Server, un clúster sobre un sistema de virtualización, ya suele ser muy habitual por ofrecer alta disponibilidad a nivel de servicio (bases de datos, servidores de archivos). Se han dejado de utilizar sistemas físicos para pasar a su evolución natural, la virtualización, como cualquier otro servicio que ya virtualizábamos. Pero, en el caso del guest cluster, por su naturaleza, requiere de una configuración especial de los discos para que dos o más máquinas virtuales accedan al mismo tiempo a los mismos datos. Se trata de compartir el mismo disco duro.

Cuando se despliega un guest cluster en un entorno de virtualización Hyper-V, estos discos compartidos pueden ser de tres tipos:

  • Presentando la LUN (disco duro)  directamente en la máquina virtual, mediante conexión iSCSI. En este caso, el hipervisor no interviene para nada.
  • Creando una SAN virtual, compartiendo las tarjetas HBA de FC con la máquina virtual, al igual que se hace con la red ethernet. En este caso, los switchs FC deben soportar esta característica (ojo con los modelos antiguos que ya nos conocemos). De esta manera se mapea la LUN directamente en la tarjeta HBA virtual de SAN de la máquina virtual.
  • Compartiendo un disco duro virtual entre varias máquinas virtuales.

Desde el hipervisor Microsoft Windows Server 2012 R2 se pueden crear discos virtuales compartidos (VHDX) entre varias máquinas virtuales. Estos discos no se diferencian de los otros discos virtuales, siguen siendo VHDX a los que se les indica que se comparte para varias máquinas virtuales. Pero tienen una limitación. El hecho de tener varias máquinas accediendo al mismo tiempo hace que no se puedan congelar para hacer puntos de consistencia (snapshots, instantáneas…) y, por lo tanto, tampoco sacar una copia de seguridad en caliente.

Recordar que un punto de consistencia NO es una copia de seguridad, pero si es una tecnología necesaria para poder extraer una copia de seguridad con la máquina corriendo. Ya sea manualmente (PowerShell) o con cualquier aplicación de gestión de copias de seguridad: Windows Backup, Veem, Altaro, Backup Exec…

A partir de Microsoft Windows Server 2016 aparece un nuevo concepto de disco duro virtual compartido por el guest clúster, el conjunto VHD (VHD Set en inglés). La configuración de este tipo de disco virtual compartido por el guest cluster es de lo que trata esta entrada.

 

Antes de continuar y evitar trabajar para el diablo, cabe mencionar que este disco compartido no se puede alojar en cualquier sitio, tiene unos requerimientos: que esté ubicado en un Cluster Shared Volume (CSV) o en un servidor de archivos Scale-Out SMB3 de Microsoft WIndows Server 2012 R2 o superior.

 

Crear un disco virtual compartido por el guest cluster

Desde el administrador de Hyper-V, con las máquinas virtuales que forman el guest cluster paradas, botón derecho sobre la máquina virtual y hacer clic en Configuración. Menos la creación del nuevo disco duro virtual de conjunto VHD (VHD Set), el proceso de tiene que repetir en todas las máquinas virtuales que forman el guest cluster.

Configuració de la màquina virtual

Una de las recomendaciones y manías personales para utilizar los discos compartidos en un guest cluster, es conectarlos en una controladora SCSI diferente a la utilizada por el sistema operativo. Por lo tanto, lo primero que hago es añadir una segunda controladora SCSI. Hacer clic en la opción añadir hardware. Seleccionar controladora SCSI y hacer clic en el botón Añadir.

Afegir una segona controladora SCSI a la màquina virtual

Se ha creado una nueva controladora SCSI (en mi caso la 1) y me pide para añadirle un disco, con tres posibles opciones:

  • Disco duro virtual o físico. Dedicado única y exclusivamente a esta máquina virtual.
  • Unidad DVD para poder cargar archivos de imágenes ISO o pasar la unidad DVD física del anfitrión a la máquina virtual.
  • Unidad compartida que permite crear un disco duro virtual al que pueden acceder varias máquinas virtuales a la vez. Es la opción para la configuración del guest cluster.

Seleccionar disco compartido y hacer clic en el botón añadir.

Afegir un nou disc virtual compartit a una màquina virtual

Fijaos que por defecto el nuevo disco duro virtual se conecta al primer canal SCSI libre que ha encontrado en la controladora, en la foto, el canal 0. Cada disco duro adicional tiene que estar en un canal diferente. Recuerdo que un canal no puede tener más de un disco duro.

Crear un nou disc dur virtual assignat a un canal lliure de la controladora SCSI

Hacer clic en el botón Nuevo para crear una nueva unidad compartida.

Se inicia el asistente para la creación de la nueva unidad con una pregunta trampa:

  • VHDX. El disco virtual tradicional de siempre y que es la opción normal para todas las máquinas virtuales.
  • Conjunto VHD (VHD Set). Esta es la nueva opción que aparece con Microsoft Windows Server 2016 y Windows 10 y que no es compatible con versiones anteriores de sistemas operativos. Es la opción que nos permite realizar copias de seguridad en caliente de las máquinas virtuales con discos compartidos del guest cluster.

Seleccionar conjunto VHD (VHD Set) y hacer clic en el botón siguiente.

Selecció del conjunt VHDX (VHD Set) pel nou disc virtual pel guest cluster

Tipos de disco:

  • Tamaño fijo. De entrada ya reserva todo el espacio que se asigna al disco duro, esté utilizado o no. Para mi también es la opción recomendada para no estar pendientes del sobre aprovisionamiento que nos puede parar el servicio. Es el caso de los discos para las bases de datos, por ejemplo.
  • Expansión dinámica. El disco sólo ocupa lo que ocupan los datos que contiene y a medida que lo necesita va creciendo. Es una buena opción para los servidores de archivos que van creciendo poco a poco.

Seleccionar la opción que creáis más oportuna y hacer clic en el botón siguiente.

Configuració del tipus de disc virtual, amb mida fixa o expansió dinàmica.

Indicar el nombre del disco duro y su ubicación. Vuelvo a recordar que el archivo se tiene que ubicar en un volumen Cluster Shared Volumes (CSV) o bien en un cluster de servidor de archivos Scale-Out SMB3. Si bien os dejará pasar esta pantalla y crear el nuevo disco duro virtual, al conectar el disco duro virtual a la máquina os dará un error y no lo podréis utilizar. Fijarse que la extensión no es VHDX sino VHDS. Hacer clic en el botón siguiente para continuar.

Assignació del nom i ubicació (que ha d'estar en un CSV o SMB3 amb tolerància)

Se está creando un disco duro virtual nuevo, por lo tanto, hay que especificar el tamaño que tendrá y hacer clic en el botón siguiente. En caso que ya tuviésemos un disco duro físico o virtual que contenga datos y que queramos convertir, en esta pantalla se pueden realizar estas operaciones, seleccionando el disco duro físico o virtual orígen de donde se copiará su contenido en el nuevo disco duro.

Especificar la mida del nou disc virtual

Ya se ha acabado de configurar el nuevo disco duro compartido. Hacer clic en el botón Finalizar para crearlo.

Finalització de l'assistent per la creació del nou disc virtual

Una vez creado, se obtienen dos archivos que definen el disco virtual y que ambos son necesarios y deben ir juntos:

  • Nombre del disco virtual con extensión VHDS, de unos 260 Kb, corresponde a la definición del disco duro. Este archivo NO contiene los datos, sinó sólo la definición de lo que es el disco duro. Es el archivo que se tiene que seleccionar para añadir a las máquinas virtuales.
  • Nombre del disco virtual seguido de un número GUID (largo al azar) con extensión AVHDX. Aunque la extensión es la misma de los puntos de consistencia (instantáneas o snapshots), no corresponde a un punto de control sinó que es la parte del disco virtual compartido que contiene los datos en sí.

Visualització de la carpeta amb els tres fitxers (l'original VHDX) i el nou del conjunt VHDX (VHD Set), que està format pel VHDS i el AVHDX

Recordar que cuando se copian o mueven los discos virtuales de un sitio a otro, no cometer el error de sólo copiar el VHDS, sin el AVHDX, ya que NO estaremos copiando los datos del disco, sólo la definición.

Creación de un conjunto VHD (VHD Set) para PowerShell

No podía dejar esta entrada sin las correspondencias para PowerShell. Id acostumbrándose a utilizarla que ya es muy básico saber hacerlo. Por lo tanto, abriendo la consola con privilegios de administrador.

Para la creación de un nuevo disco vitual compartido de conjunto VHD (VHD Set), ejecutar el comando New-VHD indicando la ruta con el nombre del archivo, el tamaño (en el ejemplo de 1 GB) y el tipo de disco: de tamaño fijo (-fixed) o de expansión dinámica (-dynamic):

New-VHD -path "C:\ClusterStorage\Volume2\Witness.vhds" -SizeBytes 1GB -Fixed

Para la expansión dinámica utilizaríamos el comando:

New-VHD -path "C:\ClusterStorage\Volume2\Witness.vhds" -SizeBytes 1GB -Dynamic

Con el disco duro creado, sólo hay que añadirlo a la máquina virtual correspondiente. Para esto hay que indicar:

  • la ubicación del nuevo disco virtual -Path
  • el tipo de controladora donde se tiene que conectar el disco virtual -ControllerType SCSI o IDE (para el disco compartido, tenéis que seleccionar SCSI).
  • la controladora que tiene la máquina virtual donde se tiene que conectar el disco virtual -ControllerNumber
  • el canal de la controladora donde se tiene que conectar el disco virtual -ControllerLocation
  • indicar que se trata de un disco virtual compartido -SharedVirtualDisk

 

Poniendo un ejemplo, para añadir el disco anterior, Witness.vhds, a la máquina virtual srvSQL1 que contiene dos controladoras SCSI y que el disco se tiene que conectar a la controladora 1, en el canal 0:

get-vm srvSQL1 | Add-VMHardDiskDrive -Path 'C:\ClusterStorage\Volume2\Witness.vhds' -ControllerType SCSI -ControllerNumber 1 -ControllerLocation 0 -ShareVirtualDisk

 

Convertir un disco dur virtual VHDX en un conjunto VHD (VHD Set)

Se puede dar el caso que estemos haciendo una actualización de la granja de virtualización y ya tengamos discos VHDX con los datos, que querríamos convertir en un conjunto VHD (VHD Set), para aprovechar las nuevas capacidades de trabajo.

Es una operación que hay que hacer fuera de línea, por lo tanto, lo primero es desconectar el disco de la máquina virtual o máquinas virtuales que lo tengan si la máquina tiene varios discos duros no es necesario pararlo todo, es puede hacer disco a disco para no dejar sin servicio total el sistema. Para entenderlo mejor, sigo el ejemplo anterior de creación de un disco virtual compartido, utilizando la máquina virtual srvSQL1 y el disco virtual compartido FS_Empresa.vhdx para pasarlo a FS_Empresa.vhds.

Recupero la máquina virtual (Get-VM) de la que selecciono el disco virtual que se quiere convertir (Get-VMHardDiskDrive con el Where-object para filtrar los discos que pueda tener la máquina) que acabo eliminando de la máquina virtual (Remove-VMHardDiskDrive). Tranquilos, sólo se elimina el disco de la máquina, NO lo borra del sistema:

Get-VM srvSQL1 | Get-VMHardDiskDrive | Where-Object {$_.Path -like "*FS_Empresa.vhdx"} | Remove-VMHardDiskDrive

Hacer la conversión fuera de línea, que tardará más o menos dependiendo del tamaño del disco y la velocidad del almacenamiento donde esté. El proceso crea un disco duro virtual nuevo, por lo tanto, también hay que tener en cuenta que se tiene que disponer del espacio de disco suficiente para poder crear este nuevo disco duro que tendrá el mismo tamaño que el original.

Convert-VHD "C:\ClusterStorage\Volume2\FS_Empresa.vhdx" "C:\ClusterStorage\Volume2\FS_Empresa.vhds"

Durante el proceso digamos que la barra de progreso no progresa demasiado, sino que pasa de 0 a 100, tened un poco de paciencia.

Cuando se acaba, se han creado dos nuevos archivos (VHDS y AVHDX) que corresponden al disco virtual de conjunto VHD (VHD Set), tal como he comentado anteriormente en esta entrada.

Con el nuevo disco virtual hay que conectarlo a las máquinas virtuales que lo tienen que utilizar. No dejarse los valores de la controladora (-ControllerType SCSI y -ControllerNumber), el slot libre de la controladora (-ContollerLocation) donde conectar el nuevo disco virtual y, por último, indicar que el disco duro es compartido (-ShareVirtualDisk):

Get-VM srvSQL1  | Add-VMHardDiskDrive -Path 'C:\ClusterStorage\Volume2\FS_Empresa.vhds' -ControllerType SCSI -ControllerNumber 1 -ControllerLocation 1 -ShareVirtualDisk

Con esto la máquina virtual ya vuelve a tener el disco accesible con los datos. Recordad al mover o borrar el disco anterior VHDX cuando se haya validado la solución para liberar espacio de disco innecesario.

 

Puntos de control del guest cluster

A partir de este momento, la máquina es susceptible de ser copiada en caliente mediante un punto de control, ya sea por el sistema operativo como por las aplicaciones de copias de seguridad de terceros que se sustentan sobre el sistema operativo (el caso de Veem, Altaro, etc….).

 

Creación manual de un punto de control en un conjunto VHD (VHD Set)

Para probar que funcionan correctamente los puntos de control en máquinas virtuales, que tienen discos virtuales compartidos de conjunto VHD (VHD Set), se pueden ejecutar los siguientes comandos de PowerShell. Todavía no hay una gestión para GUI y me considero que le falta una vuelta para que esto sea agradable de operar:

 

Creación de un grupo de consistencia

Los puntos de control sobre los conjuntos VHD (VHD Set) se hacen sobre los grupos de máquinas virtuales, no de la máquina virtual en sí, por lo tanto, lo primero es crear un grupo de máquina donde se añade la máquina que contiene el disco virtual compartido:

New-VMGroup -Name "PruebaVHDS" -GroupType VMCollectionType

Añadir la máquina o máquinas virtuales al grupo de consistencia anterior:

$VM1 = Get-VM -Name srvSQL1
Add-VMGroupMember -Name "PruebaVHDS" -VM $VM1

 

Crear el punto de consistencia (checkpoint o antiguo snapshot) en el grupo de máquinas virtuales

Que no es lo mismo que crearlo en la máquina virtual. Asignar el servicio de Snapshots de colecciones a  una variable:

$colSnapSvc = Get-WmiObject -Namespace Root\Virtualization\v2 Msvm_CollectionSnapshotService

Asignar las colecciones virtuales, donde se lanzará el punto de consistencia (checkpoint o antiguo snapshot) a otra variable:

$VMcol = Get-WmiObject -Namespace Root\Virtualization\v2 Msvm_VirtualSystemCollection

Realizamos el punto de consistencia (checkpoint o antiguo snapshot) sobre el grupo de máquinas virtuales, bien, de hecho sólo contiene una máquina virtual:

$colSnapSvc.CreateSnapshot($VMcol, $null, 32768)

Aplicar un punto de consistencia (checkpoint o antiguo snapshot)

Aplicar un punto de consistencia quiere decir recuperar la máquina, o en este caso el grupo de máquinas virtuales) en el punto que estaba en el momento de hacerlo. Para aplicarlo es necesario que la máquina o máquinas estén paradas. Asignamos a las variables el servicio de Snapshots de colecciones:

$colSnapSvc = Get-WmiObject -Namespace Root\Virtualization\v2 Msvm_CollectionSnapshotService
$VMcol = Get-WmiObject -Namespace Root\Virtualization\v2 Msvm_VirtualSystemCollection

Aplicamos el punto de consistencia propiamente dicho:

$colSnapSvc.ApplySnapshot($VMcol)

Borrar el punto de consistencia (checkpoint o antiguo snapshot)

¿No dejaremos el punto de consistencia habilitado verdad? Una vez utilizado toca borrarlo, eliminarlo del sistema. Volvemos a cargar las variables del servicio de Snapshots de colecciones, si no las tenemos cargadas.

$colSnapSvc = Get-WmiObject -Namespace Root\Virtualization\v2 Msvm_CollectionSnapshotService
$VMcol = Get-WmiObject -Namespace Root\Virtualization\v2 Msvm_VirtualSystemCollection

Averiguar el identificador de la colección donde actuar, ejecutamos la variable de la colección virtual para que nos lo enseñe:

$VMcol.CollectionId

Guardar este valor a mano, en una variable o reutilizar la variable para filtrar la colección donde actuar:

$VMcol = Get-WmiObject -Namespace Root\Virtualization\v2 Msvm_VirtualSystemCollection |? "CollectionId" -eq $VMcol.CollectionId

Borrar el punto de consistencia:

$colSnapSvc.DestroySnapshot($VMcol)

 

Borrar grupo de consistencia

Eliminar la máquina virtual del grupo:

$VM1 = Get-VM -Name srvSQL1
Remove-VMGroupMember -Name "PruebaVHDS" -VM $VM1

Comprobar que el grupo ya no tiene miembros, la variable VMMembers:

Get-VMGroup

Eliminar el grupo:

Remove-VMGroup -name PruebaVHDS

 

Aclaración

Me he encontrado con un pequeño problema causado por las actualizaciones  KB3213986  KB3211320que espero se resuelva tan pronto como sea posible, que provoca que los puntos de control (checkpoints o instantáneas) no acaben de funcionar del todo correctamente en algunos entornos.

 

 

¿Te ha gustado el artículo? Lo puedes compartir en las redes sociales. También puedes dejar tu opinión, comentario o sugerencia. ¡Gracias!

 

Deja un comentario

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