Microsoft, su tecnología y yo

El Blog de David Cervigón (Microsoft)

March, 2010

  • Novedades: Dynamic Memory, RemoteFx, licenciamiento y promociones

    Hola

    Se acaba de hacer público lo siguiente:

    Ya iremos contando más. Me voy para el campus

    Saludos

    David Cervigón

  • La hora de la Virtualización del Escritorio

    Hola

    Mañana se van a anunciar algunas cosas muy interesantes. Será durante una Webcast gratuita de una hora, a la que os podéis apuntar aquí:

    A medida que nos podamos ir de la lengua sin violar ninguna política de la compañía, intentaré dar más detalles por aquí.

    Saludos

    David Cervigón

  • Saludos desde Seattle

    ms_campus Hola

    Después de 18 horas de viaje puerta a puerta, y de haber pasado la primera noche de duermevelas y el subsiguiente duro día de trabajo, aquí estamos.

    seattle-space-needleDurante esta semana y la que viene un buen número de empleados de Microsoft nos juntaremos por aquí para atender a una especie de Mini-TechEd interno que llamamos TechReady, donde aprovechamos para cargar la pilas con contenido nuevo, ponernos al día de las novedades de los productos y tecnologías que mas nos tocan y contrastar opiniones con compañeros de otros países y con los diferentes grupos de producto. Y de paso, arrasar malls y outlets a golpe de tarjeta de crédito, aprovechando que el dólar anda flojo.

    Además, siempre es un gusto darse una vuelta por el campus, y mejor en días como hoy, mucho más primaverales de lo que he dejado atrás en Madrid. Mañana antes de empezar con el curso voy a ver si me da tiempo a pasarme por la tienda del empleado y darme una vuelta por el museo, a ver si sigue una foto mía expuesta por ahí (es una larga historia).

    Las fotos no son mías, pero intentaré empollarme el manual de la nueva SLR y colgar por aquí algo decente.

    Saludos

    David Cervigón

  • 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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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="
    http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://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

  • TechNet 2.0

    Hola

    Merece la pena darse una vuelta:

    Saludos

    David Cervigón

  • Rendimiento de los diferentes tipos de disco virtual

    Hola

    Se acaba de publicar este Whitepaper, que he añadido a la colección de recursos sobre Hyper-V:

    La metodología utilizada se ha orientado a discernir cual el la penalización de rendimiento de introducir en la ecuación la pila de encapsulamiento de datos dentro del formato VHD, por un lado, y por otro evaluar qué sucede al meter además la capa de Hypervisor.

    Como ya hemos comentado en alguna ocasión, el conocimiento de los patrones de uso del IO de aquello que pretendemos virtualizar por un lado, y de como se comporta nuestro almacenamiento puede tener mucho más impacto que aplicar la regla bien conocida de que un disco pass-throug tiene mejor rendimiento que un VHD de tamaño fijo, este a su vez mejor que un de crecimiento dinámico, y que cuantos mas discos diferenciales enlacemos peor rendimiento tendremos. Conviene estudiarse la tabla de pros y contras, porque muchas veces por diferencias de rendimiento casi despreciables perdemos funcionalidades que nos pueden resultar muy útiles.

    Os recomiendo su atenta lectura.

    Saludos

    David Cervigón