En este artículo vamos a explicar los pasos a seguir para crear un Cluster Nano Server 2016. Montaremos dos nodos para implementar un Cluster Hyper-V virtual (a través de la Virtualización Anidada ó Nested Virtualization). El almacenamiento será con Storage Spaces Direct (S2D) virtualizado también, por lo que vamos a necesitar un buen equipo de pruebas… no menos de un i7, a ser posible con disco SSD y 16Gb de RAM o más. Será necesario un Controlador de Dominio, pero en esta guía omitiremos la promoción del mismo.
Creación de los VHDX
Para comenzar este proceso necesitamos una ISO de Windows Server 2016 que contenga la carpeta NanoServer, la cual copiaremos a un directorio de nuestro equipo. Esto servirá para crear los VHDX que utilizaremos como discos duros de nuestras máquinas Nano Server. Debemos mantener esa ISO conectada en una unidad DVD y tomar nota de la letra, por ejemplo E:\.
Una vez copiada la carpeta, abrimos un PowerShell dentro de ella e importamos el módulo de Nano Server para proceder con la creación de los discos VHDX:
Import-Module .\NanoServerImageGenerator\NanoServerImageGenerator.psd1
Podemos crear cuantos discos queramos, válidos para Cluster Hyper-V con el siguiente comando:
New-NanoServerImage -MediaPath E: -BasePath "C:\Temp\base\" -Compute -Clustering -Storage -ComputerName "nanonode1" -DeploymentType Guest -Edition Datacenter -DomainName domain.local
En donde Compute, Clustering y Storage son los roles de Windows queremos usar en ese VHDX. Debemos aclarar que DeploymentType, es en donde se indica si será para máquina física o para máquina virtual de Hyper-V. En esta guía será para máquina Hyper-V, si fuera para Hosts físicos, Guest se cambiaría por Host.
Tras la creación de los dos VHDX de nuestros futuros Nodos de Cluster podemos ver que aparecen ambos dentro de la carpeta, no os olvidéis de cambiar el nombre de ComputerName, yo les he puesto nanonode1 y nanonode2:
Creación de las Máquinas Virtuales para usar como Nodos de Cluster
Crearemos dos máquinas virtuales «Generación 2» con al menos 3Gb de memoria RAM , una tarjeta de red y dos núcleos de procesador cada una. En la creación de las máquinas elegimos añadir un disco posteriormente. Estos son los nombres que yo he elegido para mis nodos: NanoNode1 y NanoNode2.
Después, conectamos los discos VHDX que hemos creado antes en una controladora SCSI, correspondientemente por su nombre, y arrancamos ambas máquinas, al hacerlo, veremos la siguiente imagen:
A partir de este momento debemos configurar IP, Firewall, etc,… Siendo éste un entorno de prueba, voy a deshabilitar el Firewall, pero recordad que en un entorno de producción esto no sería lo aconsejable. Por lo tanto, introducimos el «User name» y «Password» en la consola y configuramos IP y Máscara de Subred en ambos NanoNodes (en el ejemplo yo he configurado el NanoNode1 con la 192.168.69.2 y el NanoNode2 con la 192.168.69.3, ambas con máscara 255.255.255.0).
Ahora, para agilizar el proceso, vamos a realizar el resto de tareas con PowerShell desde el Host físico que contenga nuestros NanoNodes virtuales, para ello nos conectamos a los nodos con el siguiente comando:
Enter-PSSesion -VMname NanoNode1
Una vez conectados a nuestro NanoNode1, sacamos información para obtener el InterfaceIndex de su tarjeta de red:
Get-NetAdapter
Configuramos la DNS, en mi caso 192.168.69.1 (dirección IP de mi Controlador de Dominio):
Set-DnsClientServerAddress -InterfaceIndex 10 -ServerAddresses 192.168.69.1
Deshabilitamos los perfiles de Firewall:
NetSh Advfirewall set allprofiles state off
Repetiremos el proceso con un Enter-PSSesion al NanoNode2.
Añadiendo los NanoNodes al dominio
Vamos a utilizar Djoin para añadir nuestros NanoNodes al dominio. Así pues, entramos en nuestro Controlador de Dominio, y desde CMD o PowerShell como Administrador ejecutamos:
Djoin.exe /provision /domain domain.local /machine nanonode1 /savefile .\odjblob
El comando anterior genera un archivo «odjblob» que utilizaremos más adelante en el NanoNode1. A mayores añadimos como Host de confianza la IP del NanoNode1:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.69.2
Desde el explorador de archivos, estando en nuestro Domain Controller, copiamos el archivo generado anteriormente (odjblob) a la raíz del NanoNode1 accediendo a través de su ruta UNC:
\\192.168.69.2\C$\
Desde nuestro Host físico abrimos sesión al NanoNode1:
Enter-PSSesion -VMname NanoNode1
Ejecutamos el siguiente comando y reiniciamos la máquina:
Djoin.exe /requestodj /loadfile C:\odjblob /windowspath c:\windows /localos
Repetiremos todo el proceso para nuestro NanoNode2 y tras reiniciar ambos nodos comprobamos (a través de Enter-PSSesion) si nuestras operaciones han surtido efecto. También podemos intentar logarnos en el Dominio desde la consola de Nano Server correspondiente de cada máquina virtual.
Creación del Cluster Hyper-V con almacenamiento S2D
Aclarar primero que esta parte, sobre todo la creación del S2D para almacenamiento del Cluster, es totalmente personalizable y ampliable, para lo cual sólo hay que añadir más discos y tener en cuenta que en un S2D Virtualizado no se puede usar Caché de disco.
Tras la importante aclaración comenzamos apagando los NanoNodes y aplicando los comandos que nos permitirán añadir máquinas virtuales anidadas dentro de nuestro NanoCluster. Así pues, desde PowerShell en nuestro Host físico ejecutaremos:
Set-VMProcessor -VMName NanoNode1 -ExposeVirtualizationExtensions $true Set-VMProcessor -VMName NanoNode2 -ExposeVirtualizationExtensions $true
Arrancaremos en este momento los dos NanoNodes y esperamos a ver la pantalla de inicio de sesión, no hace falta logarse, ya que entraremos como antes a través de Enter-PSSesion en uno de ellos:
Enter-PSSesion -VMname NanoNode1
Si están los dos nodos en dominio procederemos a crear el Cluster con el siguiente comando, cuya IP (StaticAddress) y nombre (Name), son totalmente personalizables… yo he elegido NanoCluster con la IP 192.168.69.100:
New-Cluster -Name NanoCluster -NoStorage -Node NanoNode1,NanoNode2 -Force -verbose -StaticAddress 192.168.69.100
Deberíamos comprobar que desde nuestro Controlador de Dominio o cualquier otra máquina añadida al Dominio podemos hacer Ping al nombre y la IP de nuestro Cluster sin problemas.
Asegurada la creación del Cluster, procedemos a añadir los discos duros virtuales para crear el S2D virtual, siempre desde PowerShell en nuestro Host físico:
New-VHD -SizeBytes 10GB -Path "c:\Temp\S2Ddisknano11.vhdx" Add-VMHardDiskDrive -VMName NANONODE1 -ControllerType SCSI -Path "c:\Temp\S2Ddisknano11.vhdx" New-VHD -SizeBytes 10GB -Path "c:\Temp\S2Ddisknano12.vhdx" Add-VMHardDiskDrive -VMName NANONODE1 -ControllerType SCSI -Path "c:\Temp\S2Ddisknano12.vhdx" New-VHD -SizeBytes 10GB -Path "c:\Temp\S2Ddisknano13.vhdx" Add-VMHardDiskDrive -VMName NANONODE1 -ControllerType SCSI -Path "c:\Temp\S2Ddisknano13.vhdx" New-VHD -SizeBytes 10GB -Path "c:\Temp\S2Ddisknano14.vhdx" Add-VMHardDiskDrive -VMName NANONODE1 -ControllerType SCSI -Path "c:\Temp\S2Ddisknano14.vhdx" New-VHD -SizeBytes 10GB -Path "c:\Temp\S2Ddisknano21.vhdx" Add-VMHardDiskDrive -VMName NANONODE2 -ControllerType SCSI -Path "c:\Temp\S2Ddisknano21.vhdx" New-VHD -SizeBytes 10GB -Path "c:\Temp\S2Ddisknano22.vhdx" Add-VMHardDiskDrive -VMName NANONODE2 -ControllerType SCSI -Path "c:\Temp\S2Ddisknano22.vhdx" New-VHD -SizeBytes 10GB -Path "c:\Temp\S2Ddisknano23.vhdx" Add-VMHardDiskDrive -VMName NANONODE2 -ControllerType SCSI -Path "c:\Temp\S2Ddisknano23.vhdx" New-VHD -SizeBytes 10GB -Path "c:\Temp\S2Ddisknano24.vhdx" Add-VMHardDiskDrive -VMName NANONODE2 -ControllerType SCSI -Path "c:\Temp\S2Ddisknano24.vhdx"
Importante: En este momento, nace la necesidad de hablar de un Host-Manager, que deberíamos de usar como máquina de acceso y control de nuestro entorno de NanoCluster. En mi caso he creado otra máquina virtual Windows Server 2016 con 4Gb de RAM la cual debe de tener el rol de Hyper-V y la característica de FailoverCluster instalados (recordad que es necesario aplicarle también el Set-VMProcessor que vimos más arriba para que pueda usar Hyper-V, es decir, virtualización anidada). Este Host-Manager se usará para poder gestionar el Cluster desde la consola FailoverClusterManager de manera más ágil y cómoda.
Desde nuestro nueva máquina Host-Manager, que debe estar también incluída en el dominio y logados como Administrador del Dominio, abriremos una PSSesion a uno de los NanoNodes pero en este caso de la siguiente forma:
Enter-PSSesion –Computername NanoNode1
Para luego crear el Storage Pool S2D y los Cluster Shared Volumes que contendrán nuestras máquinas virtuales anidadas:
Enable-ClusterS2D -CacheState:0 -Verbose -PoolFriendlyName NanoPool -CimSession NanoCluster -SkipEligibilityChecks -Autoconfig $true
Desde la misma consola podemos crear (siendo exitosa la creación del Storage Pool) los volúmenes correspondientes. En mi caso, con uno es suficiente: 20Gb ReFS dentro del pool NanoPool, aquí cada uno puede usar los nombres que desee:
New-Volume -FriendlyName "NanoNested" -Filesystem CSVFS_ReFS -StoragePoolFriendlyName NanoPool -size 20GB -ResiliencySettingName Mirror
A partir de este momento, como en cualquier otro tipo de entorno Cluster Hyper-V y usando como almacenamiento para las máquinas «C:\ClusterStorage» en cada NanoNode, podemos empezar a crear las máquinas anidadas (siempre y cuando nuestro entorno nos lo permita). Aquí todo el mundo se encuentra de frente con un problema bastante común, así que dejadme daros una pista: desde una PSSesion a cada NanoNode, podemos configurar el «C:\ClusterStorage» como carpeta para Hyper-V, tanto VHDX como archivos de configuración, siempre como Administrador:
Set-VMHost -VirtualHardDiskPath "C:\ClusterStorage\Volume1\VHDXpath" -VirtualMachinePath " C:\ClusterStorage\Volume1\ConfigurationFiles"
Hasta aquí la creación de nuestro NanoCluster, espero os sirva de ayuda, un saludo! 😉
1.- «Enter-PSSesion» should be «Enter-PSSession» (note the double s in session).
2.- Certain Windows Server 2016 ISOS do not have the PowerShell modules for Failover Cluster. The workaround is installing the feature on the DC and work from there. However, certain commands such as NewVolume need to be run from within the nodes.
3.- There is an extra space on the last command that could drive one nuts:
-VirtualMachinePath » C:\…
Remove the extra space between the quotation marks and the drive.
Thank you Mirix for your feedback! 🙂