Montando Laboratorios, Pruebas de concepto y Pilotos de Virtualización: Instalación de los hosts de Hyper-V y el cluster

Posts anteriores:

Hola

Una vez repasado en los post anteriores los requisitos que necesarios a nivel de directorio activo, red y almacenamiento, vamos a pasar a exponer cómo instalar los hosts con Hyper-V, tanto en configuraciones stand-alone como en cluster. Si bien a estas alturas creo que escribir un paso a paso sobre cómo instalar Windows Server 2008 R2 está de más, vamos a centrarnos en una serie de consejos prácticos que pueden ayudar a que este sea el paso más sencillo y rápido del montaje de todo el entorno, y que agregar nuevos hosts sea cuestión de pinchar un pendrive e irnos a tomar un café. Los interesados en el paso a paso detallado pueden consultar:

Antes de nada, vamos a repasar rápidamente las tres opciones que tenemos para montar Hyper-V en un servidor:

  • Hyper-V R2 por debajo de una partición padre con Windows Server 2008 R2 “Full”. Ideal para pruebas, demos y para cuando la partición padre va a dedicarse a otras funciones (no recomendado en producción en la mayoría de los casos)
  • Hyper-V R2 por debajo de una partición padre con Windows Server 2008 R2 “Server Core”. Menor consumo de recursos y superficie de ataque. La gestión se hará en su mayoría de forma remota, al carecer de la interfaz gráfica de Windows
  • Hyper-V Server 2008 R2: Totalmente gratuito y con el 100% de la funcionalidad relativa al hipervisor, alta disponibilidad y Live Migration. La experiencia de uso es idéntica a la de Windows Server 2008 “Server Core”, solo que en este caso no tenemos ningún tipo de role o funcionalidad que no sea indispensable para funcionar en conjunto con Hyper-V.

Gran parte de la configuración posterior puede realizarse también de manera centralizada desde Virtual Machine Manager, pero en este caso vamos a realizarla manualmente.

Automatización de la instalación de los hosts mediante un pendrive y un fichero autounattend.xml

Una vez en nuestro poder los DVDs o imágenes ISO necesarias es el momento de ponerse manos a la obra con la instalación. Si bien todos los fabricantes de servidores incluyen herramientas para poder montar medios virtuales por la red, mi experiencia es que lleva más tiempo lograr que la conexión remota funcione bien y que los ficheros se copien por la red que lo que se tarda realmente en instalar y configurar el sistema.

Por tanto solemos tener a mano uno o varios pendrives sobre los que hemos volcado todos los ficheros del medio de instalación, de manera que, si hacemos arrancar de dicho dispositivo al servidor, la instalación se realiza de manera mucho más rápida en cuestión de pocos minutos. Estos son los pasos para preparar previamente el pendrive (de 4GB mínimo) en un equipo con Windows Vista/7/2008/2008 R2

  1. Diskpart
  2. List Disk (identificamos aquí el numero de disco que corresponde al pendrive)
  3. Select Disk X (donde X es el número contenido en el paso anterior)
  4. Clean (ojo, esto es destructivo)
  5. Create Partition Primary (crea la partición en el pendrive)
  6. Active (activa la partición)
  7. Format fs=ntfs (la formatea en NTFS)
  8. Assign (presenta el dispositivo al sistema con la primera letra de unidad disponible)
  9. Exit
  10. A continuación volcamos sobre el pendrive el contenido del DVD o del ISO de Windows Server 2008 R2

Con esto tendremos ya listo un pendrive arrancable que se comportará exactamente igual que el DVD si hacemos que el servidor arranque de él. Nos pedirá la configuración de idioma, teclado, edición de Windows Server 2008 R2 a instalar, si full o si core, el disco y la partición y el proceso terminará solicitando que introduzcamos una contraseña compleja para el administrador local. El sistema quedará instalado con un nombre aleatorio, sin ningún tipo de configuración predefinida y sin funcionalidades ni características. Hemos quedado en que nos apetece un café o dedicarnos a tareas un poco más gratificantes, así es que vamos a automatizar un poco más el proceso.

El proceso de instalación de los sistemas operativos a partir de Windows Vista buscan al principio de la instalación un fichero autounattend.xml con las opciones de instalación desatendida en dos sitios: el propio medio de instalación y luego en un medio externo que puede ser un dispositivo de almacenamiento USB o un disquete. Aprovechando que en el pendrive que hemos preparado es fácil crear y copiar un fichero, colocaremos el autounattend.xml en su carpeta raíz.

imageEsto es lo que vamos a automatizar en el caso de que queramos utilizar el role de Hyper-V incluido en Windows Server 2008 R2, usando para la partición padre una instalación bien “Full” bien “Server Core”. Puede hacerse algo similar para Hyper-V Server 2008 R2 (descarga gratuita), si bien la instalación del mismo ya esta bastante automatizada de por sí:

  • Gran parte del proceso de instalación, con excepción del disco y partición. No porque no se pueda, sino porque en un entorno como el que nos ocupa es posible que queramos tener diferentes instalaciones de diferentes sistemas (p.e. instalaciones Full, Server Core, o Hyper-V Server) en diferentes discos y particiones. Tampoco introduciremos la clave del producto, ya que lo podremos hacer posteriormente en el momento de la activación si así lo deseamos. Aquí automatizamos:
    • Idioma de instalación (en los ejemplo se asume que estamos utilizando versiones en inglés, pero que queremos que el teclado, los locales y la zona horaria correspondan al español internacional.
    • Edición de Windows Server 2008 R2: Usaremos dos ejemplos: Datacenter Full y Datacenter Core. Para usar Enterprise o Standard basta con cambiar el nombre de la imagen
    • Nombre de equipo
    • Haremos un “Join” al dominio usando unas credenciales válidas (Opcional. Por supuesto no aplica en el caso de que no tengamos un Active Directory y un DHCP configurados y funcionales)
  • Funcionalidades y Características que necesitaremos para trabajar, así como alguna configuración adicional:
    • Hyper-V
    • Failover Cluster
    • MultipathIO
    • Windows Server Backup
    • Cliente Telnet (esto es una manía personal, como herramienta básica de testeo de conectividad a puertos – “Telnet servidor puerto”)
    • Habilitar el escritorio remoto para administrar remotamente el servidor.
    • Remote Desktop Virtualization Host Agent (para conectar el servidor con el bróker VDI de Remote Desktop Services)

NOTA: El proceso de instalación tiene un reinicio. Si hemos configurado el servidor para que siempre arranque del dispositivo extraíble y hemos llegado a automatizar el proceso completamente, la instalación se llevará a cabo una y otra vez de manera iterativa mientras disfrutamos de nuestro café. Dependiendo de la BIOS del servidor, es posible seleccionar el dispositivo extraíble como medio de arranque ocasional, de modo que la instalación continúe sin problemas en el siguiente reinicio, ya desde el almacenamiento local o de la SAN del servidor.

1.- Fichero autounattend.xml para Windows Server 2008 R2 Datacenter “Full”. En rojo lo que tenemos que modificar para ajustarlo a cada servidor en particular:

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<servicing>
<package action="configure">
<assemblyIdentity name="Microsoft-Windows-Foundation-Package" version="6.1.7600.16385" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="" />
<selection name="Microsoft-Hyper-V" state="true" />
<selection name="Microsoft-Hyper-V-Management-Clients" state="true" />
<selection name="VmHostAgent" state="true" />
<selection name="MultipathIo" state="true" />
<selection name="TelnetClient" state="true" />
<selection name="WindowsServerBackup" state="true" />
<selection name="WindowsServerBackupCommandlet" state="true" />
<selection name="FailoverCluster-AdminPak" state="true" />
<selection name="FailoverCluster-FullServer" state="true" />
</package>
</servicing>
<settings pass="windowsPE">
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<SetupUILanguage>
<UILanguage>en-US</UILanguage>
</SetupUILanguage>
<SystemLocale>es-ES</SystemLocale>
<UserLocale>es-ES</UserLocale>
<InputLocale>040a;0000040a</InputLocale>
<UILanguage>en-US</UILanguage>
<UILanguageFallback></UILanguageFallback>
</component>
<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<UserData>
<ProductKey>
<WillShowUI>Never</WillShowUI>
</ProductKey>
<AcceptEula>true</AcceptEula>
<FullName>Nombre</FullName>
<Organization>Empresa</Organization>
</UserData>
<ImageInstall>
<OSImage>
<InstallFrom>
<MetaData wcm:action="add">
<Value>Windows Server 2008 R2 SERVERDATACENTER</Value>
<Key>/IMAGE/NAME</Key>
</MetaData>
</InstallFrom>
</OSImage>
</ImageInstall>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<fDenyTSConnections>false</fDenyTSConnections>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<ComputerName>Servidor1</ComputerName>
<RegisteredOwner>Emresa</RegisteredOwner>
<TimeZone>Romance Standard Time</TimeZone>
</component>
<component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<Identification>
<Credentials>
<Domain>Dominio</Domain>
<Username>administrator</Username>
<Password>password</Password>
</Credentials>
<JoinDomain>dominio.local</JoinDomain>
</Identification>
</component>
</settings>
<cpi:offlineImage cpi:source="wim:j:/sources/install.wim#Windows Server 2008 R2 SERVERDATACENTER" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

2.- Fichero autounattend.xml para Windows Server 2008 R2 Datacenter “Server Core”.

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<servicing>
<package action="configure">
<assemblyIdentity name="Microsoft-Windows-ServerCore-Package" version="6.1.7600.16385" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="" />
<selection name="FailoverCluster-Core" state="true" />
<selection name="Microsoft-Hyper-V" state="true" />
<selection name="MultipathIo" state="true" />
<selection name="WindowsServerBackup" state="true" />
<selection name="WindowsServerBackupCommandlet" state="true" />
<selection name="NetFx2-ServerCore" state="true" />
<selection name="MicrosoftWindowsPowerShell" state="true" />
<selection name="TelnetClient" state="true" />
</package>
</servicing>
<settings pass="windowsPE">
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<SetupUILanguage>
<UILanguage>en-US</UILanguage>
</SetupUILanguage>
<SystemLocale>es-ES</SystemLocale>
<UserLocale>es-ES</UserLocale>
<InputLocale>040a;0000040a</InputLocale>
<UILanguage>en-US</UILanguage>
<UILanguageFallback></UILanguageFallback>
</component>
<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<UserData>
<ProductKey>
<WillShowUI>Never</WillShowUI>
</ProductKey>
<AcceptEula>true</AcceptEula>
<FullName>Nombre</FullName>
<Organization>Empresa</Organization>
</UserData>
<ImageInstall>
<OSImage>
<InstallFrom>
<MetaData wcm:action="add">
<Value>Windows Server 2008 R2 SERVERDATACENTERCORE</Value>
<Key>/IMAGE/NAME</Key>
</MetaData>
</InstallFrom>
</OSImage>
</ImageInstall>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<fDenyTSConnections>false</fDenyTSConnections>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<ComputerName>Servidor1</ComputerName>
<RegisteredOwner>Nombre</RegisteredOwner>
<TimeZone>Romance Standard Time</TimeZone>
</component>
<component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="https://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<Identification>
<Credentials>
<Domain>dominio</Domain>
<Username>administrator</Username>
<Password>password</Password>
</Credentials>
<JoinDomain>dominio.local</JoinDomain>
</Identification>
</component>
</settings>
<cpi:offlineImage cpi:source="wim:j:/sources/install.wim#Windows Server 2008 R2 SERVERDATACENTERCORE" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

Tenéis más información sobre todos estos temas aqui:

Una vez terminado el proceso de instalación, ya tendremos el servidor corriendo Hyper-V, configurado con su propio nombre, metido en el dominio y con todo lo necesario para pasar a configurar la red y el almacenamiento tal y como hemos planificado en los posts anteriores. Deberemos configurar el direccionamiento IP deseado en cada interfaz según el uso al que se vaya a dedicar y preparar los volúmenes que nos vienen desde el almacenamiento compartido.

Configuración de Hyper-V

Dado que Hyper-V ya deberá estar corriendo por debajo de la partición padre, solo necesitaremos crear manualmente los switches virtuales a los que conectaremos las máquinas virtuales y elegir en que carpetas del almacenamiento guardaremos los ficheros de configuración de las máquinas virtuales, sus discos y las snapshots.

  • En todos los hosts: Desde el Hyper-V Manager, bien local o remotamente, vamos a la configuración de las redes virtuales y creamos los switches virtuales, creando en ese momento o no tarjetas virtuales enlazadas a dichos switches para la partición padre:image
  • En los servidores stand alone, es conveniente cambiar los paths por defecto donde se almacenaran los ficheros de las máquinas virtuales y las snapshots. En nuestro caso, todos esos paths apuntan a volúmenes correspondientes al almacenamiento compartido, ya que en estos caso se trata de lograr la mayor independencia posible de un servidor físico dado:image

Como decíamos en los posts anteriores, es muy importante acostumbrarse a ser consistente con estas nomenclaturas, incluso en entornos de laboratorio.

Creación del cluster

En Windows Server 2008 y Windows Server 2008 R2 es posible crear sistemas cluster con servidores bastante diferentes entre si. Sin embargo para formar un cluster con Hyper-V deberemos elegir nodos lo más homogéneos posible, dentro de que es posible cierta disparidad. En cualquier caso no será posible tener ni Quick ni Live Migration entre sistemas con diferente fabricante de procesador (Intel y AMD) y para procesadores de diferentes familias dentro del mismo fabricante, es posible habilitar en el procesador de las máquinas virtuales el modo de compatibilidad para que los movimientos entre hosts sean posibles.

image

Podemos crear el cluster desde cualquier equipo en el que hayamos instalado la consola, que puede ser uno de los nodos que lo conformarán. Este es el proceso paso a paso:

image

Primeramente agregamos los servidores que conformarán el cluster y pasamos el proceso de validación sobre ellos.

image image image image image image image image

Una vez validado el sistema (en este ejemplo faltaban por presentar los discos y por configurar la red interna y de ahí la advertencia), podemos pasar a crear al cluster en tres sencillos pasos que se reducen a elegir su nombre y su dirección IP:

image image image

Tras este proceso ya tendremos nuestro cluster activo, y si todo ha ido bien veremos en el apartado del almacenamiento el quorum y los discos presentados a ambos nodos desde la SAN como almacenamiento disponible. Solo nos queda un par de pasos:

  • Habilitar los Cluster Shared Volumes en la consola de Failover Cluster a nivel del nombre del cluster
  • Agregar los discos compartidos que queramos convertir en CSVs a la carpeta con ese nombre que aparecerá en la consola del cluster después de haberlos habilitado en al apartado anterior

Tenéis mas información al respecto y un video aquí:

Con respecto a la red, es conveniente también renombrar en la consola cada una de las redes y revisar si el uso que hará de ellas el cluster es el que hemos planificado según el post anterior. He aquí como queda en nuestro poco recomendado caso de tener solo dos NICs en los hosts:

image image image

Recordemos que el trafico de red correspondiente al funcionamiento de los CSVs fluye por la red de menor métrica. Aquí esta documentado como tener control de esto:

Ya podemos proceder a crear las máquinas virtuales. En los servidores stand-alone podremos crearlas desde la consola de Hyper-V. Las que queramos dotar de alta disponibilidad y capacidades de Live Migration pueden crearse directamente usando la consola de Failover Cluster, ya que ambas consolas están integradas:

image image

Por último, podemos definir cual va ser la red que se utilizará para el proceso de Live Migration. Este es un parámetro global, que afecta a todas las VMs de un cluster, pero que se define sobre cualquiera de ellas. En nuestro caso no hay muchas opciones

image A partir de este momento ya tenemos la base montada para poder correr encima todas las máquinas virtuales que sean capaces de mover los servidores de los que dispongamos.

Saludos

David Cervigón