XenServer: Resource Pools

    En esta lección vamos a introducir un concepto fundamental en XenServer, los Resource Pools: haremos una introducción teórica, presentando las características que sólo están disponibles una vez que tengamos configurada una de estas agrupaciones de servidores. También crearemos un resource pool de servidores XenServer 6.2, proponiendo diferentes métodos para unir nuevos hosts.

MA-icono-manual14(ACCEDE AQUÍ AL INDICE DEL MANUAL DE CITRIX XENSERVER)

CONTENIDO DE LA LECCION

  • Caso práctico
  • Resource Pools: características y sus aplicaciones
  • Creación de un resource pool
  • Unión de hosts a un resource pool

 

Caso práctico

   En L023 Formación se han instalado y actualizado cuatro servidores físicos XenServer 6.2. Estos servidores operan individualmente. El objetivo del proyecto “L023 Formación Aulas Virtuales” es que las máquinas virtuales que se utilicen en cada curso puedan ejecutarse en cualquiera de los servidores, de manera que las clases no se interrumpan si alguno de los hosts falla o si hay que realizar tareas de mantenimiento en ellos.

   Para que esto sea posible hay que agrupar los hosts en un resource pool y crear un recurso de almacenamiento compartido entre los servidores agrupados. El primer paso es, por tanto, crear un resource pool con los servidores de producción: L023XSE01, L023XSE02 y L023XSE03.

Resource Pools: características y sus aplicaciones

   Un objetivo fundamental en un entorno IT empresarial es proveer unas contramedidas en situaciones de fallos del hardware subyacente. Esto es, que el servicio que se presta con los recursos hardware y software de la empresa pueda seguir disponible en casos de fallos de los servidores. Esto se consigue en XenServer con características como XenMotion, Storage XenMotion, High Availability o Site Recovery. Para que estas estén disponibles, es necesario que los hosts que las soporten estén agrupados en resource pools.

   Un resource pool es una agrupación lógica de servidores, que permite una administración conjunta y hacer uso de características más avanzadas, como ya hemos dicho. Su arquitectura es maestro – esclavo. Uno de los hosts actúa como master, y es a través de este como se administra todo el pool. Los metadatos de configuración del pool se encuentran replicados en todos los hosts que lo componen, por lo que en caso de fallo del master, cualquier otro podrá tomar este rol de forma manual o automáticamente si se ha habilitado High Availability.

   Si posteriormente (como veremos más adelante en este manual) se configura en el pool un Shared Storage (almacenamiento compartido y accesible por todos los hosts del agrupamiento), las máquinas virtuales ubicadas en él podrán ejecutarse en cualquier de los hosts. Así, haciendo uso de XenMotion, se podrán mover manualmente las máquinas virtuales de un host a otro (en el sentido de que obtendrán los recursos de CPU y memoria del host al que se muevan), o automáticamente en caso de fallo de alguno de los servidores físicos si hemos configurado correctamente High Availability.

Creación de un resource pool

   Vamos a crear un resource pool con los tres servidores del entorno de producción, en el que se se ejecutarán las máquinas virtuales de los cursos. El resource pool se llamará l023pool01 y contendrá los servidores L023XSE01, L023XSE02 y L023XSE03. Hay varias maneras de crear resource pools y de añadir servidores a alguno que ya esté creado. Nosotros utilizaremos XenCenter para crear un pool con los dos primeros servidores y posteriormente añadiremos el último servidor L023XSE03 haciendo uso del comando xe. También veremos cómo unir un host a un pool mediante la consola del servidor.

   En XenCenter podemos crear un resource pool con la opción de menú principal “Pool” –> “New Pool” ó seleccionando en el panel izquierdo alguno de los servidores que queramos que pertenezca al nuevo pool y, haciendo clic en él con el botón derecho del ratón, seleccionar en el menú contextual “Add to Pool” –> “New Pool”. En cualquiera de los dos casos se abre la ventana “Create New Pool”.

 

   En esta ventana introducimos el nombre del pool que vamos a crear (l023pool01). También podemos seleccionar qué servidor  debe tomar el rol de master en el pool (en este caso, l023xse01) así como el resto de servidores que se integrarán en él. Aunque en el pool finalmente también estará el servidor l023xse03, por ahora sólo marcamos los dos primeros. Y al hacer clic en “Create Pool”… obtenemos el siguiente error: ”Internal error: Connection failed: Host not resolved”. El error aparece tanto en la barra de estado inferior de XenCenter como en la pestaña de log si seleccionamos el pool recién creado.

 

   Eliminamos el resource pool creado (que sólo contiene el primer host). Para ello, hacemos clic con el botón derecho sobre el pool l023pool01 en el panel izquierdo de XenCenter y seleccionamos “Delete Pool…”, confirmando la operación en el cuadro de diálogo posterior.

   Al parecer el error se debe a nuestra resolución de DNS (que no está mal configurada). Los hosts no realizan las búsquedas correctamente en el dominio l023.local. Para solucionarlo, seguimos las indicaciones del artículo de soporte de Citrix CTX118840. En él se describe como añadir un dominio de búsqueda por defecto en los hosts XenServer (aunque no aparece como aplicable a la versión 6.2). Siguiendo las instrucciones, añadiremos el dominio de búsqueda l023.local en el archivo /etc/resolv.conf a los hosts de nuestro entorno.

NOTA: la modificación no debe realizarse de manera directa (a mano) sobre el archivo /etc/resolv.conf, ya que los cambios no se mantendrían en el siguiente reinicio del servidor.

     Procedemos: debemos obtener el uuid de la interfaz de gestión, sobre ella añadir el dominio de búsqueda haciendo uso de ese uuid, reiniciar el servidor y consultar el archivo /etc/resolv.conf. Para ello, en el primer servidor l023xse01 nos conectamos por ssh con la cuenta root y ejecutamos la siguiente secuencia de comandos xe (si lo hacemos desde la estación de trabajo Windows en la que tenemos XenCenter, recordemos que después del comando xe hay que especificar el host al que nos conectamos y las credenciales. Ver “Lección 3: Administración con la consola del host, XenCenter, xe CLI y Powershell”):

[root@l023xse02 ~]# xe pif-list management=true
uuid ( RO)                  : c7b3d3f2-d65e-56fe-9cab-c9258ca265e9
device ( RO): eth0
currently-attached ( RO): true
VLAN ( RO): -1
network-uuid ( RO): f4c5db5e-50ec-37a1-fb50-c9302412b94c

[root@l023xse02 ~]# xe pif-param-set uuid=c7b3d3f2-d65e-56fe-9cab-c9258ca265e9 other-config:domain=l023.local
[root@l023xse02 ~]# reboot

[root@l023xse02 ~]# cat /etc/resolv.conf
search l023.local
nameserver 192.168.160.10

   Realizamos los mismos pasos en los otros servidores (también sobre el de test, l023xse04).

   Una vez hecho esto, volvemos a crear el resource pool igual que en el primer intento. Pero en esta ocasión, se crea correctamente. Podemos verificarlo en la pestaña de log del panel derecho correspondiente al pool l023pool01.

 

   Aún nos queda unir el servidor l023xse03 al resource pool. Esto se podría haber hecho sin más marcando el servidor en la ventana “Create New Pool”, más arriba. Pero examinaremos otras opciones.

Unión de hosts a un resource pool

   Otro modo de unir un host a un resource pool es utilizando el comando xe pool-join. Pero uno de los argumentos de este comando es el nombre del host que está actuando como master en el pool. Aunque hemos designado l023xse01 como master en la creación del pool, una manera sencilla de averiguar cuál es el host master de un pool es seleccionar uno a uno los host que componen el pool en XenCenter y examinar en el panel derecho, pestaña “General”, panel “General”, campo “Pool master”, cual de ellos tiene el valor “Yes”.

   En nuestro caso, se confirma que el master es l023xse01.

   Así pues, en el host que queremos unir al pool ejecutamos el siguiente comando xe:

[root@l023xse03 ~]# xe pool-join master-address=l023xse01 master-username=root master-password=rootpwd

   Donde “master-address” es el nombre pool master y “master-username” y “master-password” las credenciales del usuario root en dicho host.

   Si utilizamos el comando xe, no hay registro en el log del pool en XenCenter del proceso y resultado de la operación.

NOTA: EN XenCenter quedará también una entrada en el panel izquierdo del host que acabamos de unir colgando fuera del pool. Si el resultado de la operación es correcto y hay una entrada del host agregado dentro del pool, podemos eliminar el host “huérfano” seleccionándolo con el botón derecho y seleccionando “Remove from XenCenter”.

   Otra manera de realizar esta unión es utilizando la consola “física” del host que queremos unir al pool (l023xse03). En ella, siguiendo la opción de menú “Resource Pool Configuration” –> “Join a Resource Pool” nos aparece (después de introducir las credenciales de root del servidor en el que estamos trabajando) una ventana de consola que nos pedirá los mismos parámetros que tuvimos que proporcionar al utilizar el comando xe: el host que actúa como master del pool, y sus credenciales de root.

   Si la operación es satisfactoria, esta vez si se nos presenta una confirmación.

Práctica: Obtener con el comando xe el nombre del pool master de un resource pool.

   Nos conectamos vía ssh a cualquier host del resource pool. Por ejemplo, nos conectaremos al l023xse03.

1.- obtenemos el uuid del pool master con el comando xe pool-param-get:

[root@l023xse03 ~]# xe pool-param-get uuid=02d3a5c4-bd30-35fa-f20b-767e1ec792ae param-name=master
a8248274-03b3-4317-9f0d-2ef0389bdb92

2.- con el uuid del pool master, obtenemos su nombre con el comando xe host-list:

[root@l023xse03 ~]# xe host-list uuid=a8248274-03b3-4317-9f0d-2ef0389bdb92 params=name-label
name-label ( RW)    : l023xse01

Así pues, se confirma que el pool master es l023xse01.

Práctica: Obtener con Powershell los hosts que pertenecen a un resource pool.

   Simplemente debemos conectar al host que actúa como master y ejecutar el cmd-let Get-XenHost. Recordemos que el Pool Master es el punto de entrada para administrar todos los hosts del pool

PS C:Usersgdrivia> Add-PSSnapin XenServerPSSnapIn
PS C:Usersgdrivia> Connect-XenServer -Server l023xse01
PS C:Usersgdrivia> Get-XenHost | select hostname

hostname
——–
l023xse03
l023xse01
l023xse02

 

MA icono siguiente Siguiente: Lección 6 – XenServer: Almacenamiento