Limpiando particiones en discos para configuración de vSAN

En esta oportunidad explicaremos como abordar una situación en la cual al intentar crear el cluster vSAN de forma manual a través del asistente de configuración, no tenemos disponibles algunos discos que deberían aparecer para la creación de los Disk Groups. En ese momento nos preguntaremos ¿Por qué no aparecen todos los discos disponibles?, pues bien lo más probable es que el o los discos que no aparecen listados para ser Claimed por vSAN no están vacíos y deban ser formateados para poderlos liberar.

Es aquí donde nos podríamos encontrar con un error común que puede convertirse en un dolor de cabeza sino conocemos su causa raíz. El error básicamente se produce al intentar ejecutar la acción Erase Partitions en la configuración del host en el apartado Configure->Storage->Storage Devices, como se muestra en la siguiente imagen.

image

Al hacer clic sobre la opción anterior nos mostrará un resumen de las particiones con las que cuenta este disco y razón por la cual no esta disponible para el asistente de configuración de VSAN.

image

Al hacer click sobre el botón OK,  en la mayoría de los casos, las particiones serán eliminadas y el disco quedará disponible para vSAN. Una forma rápida de verificarlo es que al hacer nuevamente clic sobre Erase Partition, no debería listar ninguna partición y el asistente de configuración de vSAN debería ahora listar el o los discos.

¿Y SI FALLA?…

Es ahora cuando aparece el problema ¿Que hacemos si esta tarea falla y nos muestra el siguiente error: “Cannot change the host configuration”? Primero que todo ¡calma, calma!, no tenemos que ir a ninguna línea de comandos a intentar limpiar estas particiones, la solución es mucho más sencilla que eso.

image

Nota 1: Para las versiones de ESXi anteriores a 7,0, scratch partition es un espacio temporal que se configura automáticamente durante la instalación o el primer arranque de un host ESXi. El instalador de ESXi crea una partición FAT16 de 4GB en el dispositivo de destino durante la instalación si hay suficiente espacio y si el dispositivo se considera local. Esta partición no es creada cuando el hipervisor se instala en tarjetas SD o unidades flash USB.

Nota 2: Si no existe espacio temporal persistente disponible en el disco local o la partición no es creada (en el caso de SD, Flash USB), ESXi almacenará estos datos temporales en la memoria RAM. Esto puede ser problemático en situaciones con poca memoria, pero no es fundamental para el funcionamiento de ESXi.

Explicado lo anterior, el problema pudo haberse producido si ese disco o discos, en algún momento fueron formateados como Datastore (VMFS), y esto hace que el hipervisor configure ese datastore como su mejor candidato para ubicar el Scratch Partition (Partición creada para almacenar la salida de vm-support necesaria para el soporte de VMware).

Por esta razón, la solución a este problema se basa en cambiar la configuración asociada a la opción avanzada del hipervisor ScratchConfig.ConfiguredScratchLocation, que probablemente estará apuntando al datastore local que en algún momento se configuró en dicho disco.

SOLUCIÓN

1. Si ya tiene vCenter instalado navegue en el inventario hasta el Host –> Configure –> Advanced System Settings. Clic en Edit… y en el filtro escriba ScratchConfig.ConfiguredScratchLocation.

image

2. Sino tiene instalado un vCenter aún, inicie sesión en el Host Client del host en cuestión (en cualquier navegador web https://IP_FQDN_Host ) y navegue hasta Manage->System-> Advanced Settings y en el buscador escriba ScratchConfig.ConfiguredScratchLocation o simplemente Scratch.

3. Independientemente de si se realizó el paso anterior desde el vCenter o desde el Host Client, podrá ver que en el campo value aparecerá la ruta hacia un datastore, lo único que debemos hacer es editar este valor y colocar /tmp, para redireccionarlo a la memoria RAM (no recomendado) o especificar la ruta de un almacenamiento persistente diferente.

Nota 3: Al editar el valor de ScratchConfig.ConfiguredScratchLocation será /tmp, mientras el valor de ScratchConfig.CurrentScratchLocation permanecerá sin cambios. Esto se debe a que es necesario realizar un reinicio del host para que los mismo sean aplicados.

image

4. Una vez realizado el reinicio, inicie sesión nuevamente en el Host Client y navegue hasta Manage->System-> Advanced Settings. En el buscador escriba ScratchConfig.ConfiguredScratchLocation o simplemente Scratch.

En la columna value podrá observar que el valor tanto para ScratchConfig.ConfiguredScratchLocation  como para ScratchConfig.CurrentScratchLocation es /tmp.

image

5. Por ultimo, intente nuevamente la acción Erase Partition.

Desde el vCenter

image

o desde el Host Client (Clear partition table)

image

Y notará que la tarea finaliza con éxito.

image

En este momento ya habrá liberado el o los discos y ahora estarán disponibles para ser reclamados por VSAN desde el asistente de configuración.

Automatizando configuración de Syslog en ESXi 6.5/6.7

Una buena practica al momento de realizar una implementación de vSphere consiste en almacenar los registros o logs en un servidor remoto, de manera que nos permita la gestión centralizada de los mismos y tener una mayor retención de los archivos para efectos de troubleshooting. Pues bien, VMware ESXi desde la versión 5.0 en adelante ejecuta un servicio llamado syslog (vmsyslogd) que proporciona un mecanismo para registrar los mensajes de vmkernel y demás componentes del sistema. Pero antes de indicar el procedimiento de configuración veamos un poco como funciona.

Por defecto los archivos son almacenados en un volumen local, scratch partition, que es una partición usada para almacenar temporalmente data, incluyendo logs, información de diagnostico (vm-support) y system swap. Debemos tener en cuenta que scratch partition se crea durante la instalación de ESXi. Sin embargo, si el dispositivo de destino de la instalación del hipervisor es una USB Stick o un SD Card esta partición no se creará y /scratch quedará localizada en ramdisk enlazada a /tmp/scratch generando un alerta desde la interfaz gráfica indicando que debe configurar almacenamiento persistente para logs del sistema. Omitir la alerta afectará el rendimiento y optimización de la memoria.

image

Dicho lo anterior existen cinco opciones para configurar Syslog en ESXi:

  • Syslog.global.logDir: Es la ubicación en un almacén de datos local o remoto (VMFS, NFS, FAT) y la ruta donde se deben guardar los registros. Tiene el formato [NombreDatastore] NombreDirectorio que mapea a /vmfs/volumes/NombreDatastore/NombreDirectorio/. Si el NombreDirectorio especificado no existe, será creado. Si /scratch está definido, el valor predeterminado es []/scratch/log. Para obtener más información sobre el scratch, consulte Creación de una ubicación de scratch persistente para ESXi (1033696).
  • Syslog.global.logHost: Es una lista delimitada por comas de servidores remotos donde los registros se envían a través de la red utilizando el protocolo Syslog. Si el campo logHost está en blanco, los logs no se reenvían. Incluya el protocolo y el puerto, similar a tcp://hostname:514, udp://hostname:514 o ssl://hostname:514.
  • Syslog.global.logDirUnique: Es una opción booleana que controla si un directorio del host específico se crea dentro del logDir configurado. El nombre del directorio es el hostname del host ESXi. Un directorio único es útil si varios hosts ESXi usan el mismo directorio compartido. El valor predeterminado es false.
  • Syslog.global.defaultRotate: Es el número máximo de archivos de registro para mantener localmente en el host ESXi en el logDir configurado. No afecta la retención del servidor de syslog remoto. El valor predeterminado es 8.
  • Syslog.global.defaultSize: Es el tamaño máximo en kilobytes de cada archivo de registro local antes de ser rotado. No afecta la retención del servidor de syslog remoto. El valor predeterminado es 1024 KB.

Nota 1: En caso de no tener un Syslog Server en la infraestructura, podemos utilizar el servicio de Syslog Collector incluido en el vCenter Server (únicamente basado en Windows). Sin embargo, el máximo numero de hosts recomendado para recopilar es de 30. Para mayor información de los servicios incluidos en vCenter Server consulte Componentes y Servicios de vCenter Server.

Nota 2: Sino tenemos un Syslog Server y nuestro vCenter Server no es basado en Windows podemos redirigir los Logs a una carpeta especifica dentro de un datastore mediante las opciones de configuración Syslog.global.logDir y Syslog.global.logDirUnique anteriormente mencionadas.

 

CONFIGURAR SYSLOG EN ESXi

¡Es momento de la parte practica! En esta ocasión se mostrará la configuración de syslog en los host ESXi utilizando como es costumbre las interfaces de línea de comandos ESXCLI y PowerCLI.

ESXCLI

La utilidad de línea de comando esxcli puede ser utilizada en la consola del host ESXi, en el vCLI  (vSphere CLI) o en el vMA (vSphere Management Assistant).

1. Inicie una sesión SSH al host ESXi que desea configurar el servicio de syslog

2. Verifique si existe alguna de las cinco configuraciones aplicadas en el host ejecutando los siguientes comandos:

esxcli system syslog config get

3. Establezca una nueva configuración de host, especificando las opciones que desee cambiar, ejecutando el comando:

esxcli system syslog config set --logdir=/path/to/vmfs/directory/ --loghost=RemoteHostname --logdir-unique=true|false --default-rotate=NNN --default-size=NNN

Ejemplo 1:

Para configurar un servidor syslog remoto utilizando TCP en el puerto 514 basta con ejecutar la siguiente línea:

esxcli system syslog config set --loghost='tcp://xx.xx.xx.xx:514

image

Ejemplo 2:

Para configurar un datastore como repositorio de Logs de manera persistente basta con ejecutar la siguiente línea:

esxcli system syslog config set --logdir='/vmfs/volumes/Nombre_Datastore/Nombre_Directorio' --logdir-unique=true

image

Nota 3: Si el directorio especificado no existe, se creará automáticamente.

4. Cargue la nueva configuración ejecutando la siguiente línea:

esxcli system syslog reload

5. Si configuró un servidor remoto (Ejemplo 1), abra los puertos del firewall del ESXi para el servicio syslog ejecutando los siguientes comandos:

esxcli network firewall ruleset set --ruleset-id=syslog --enabled=true
esxcli network firewall refresh

6. (Opcional) Verifique que el puerto es alcanzable desde el host ESXi hacia el servidor remoto ejecutando la siguiente línea:

nc -z IP_FQDN_Remote 514

PowerCLI

Si lo anterior les pareció fácil, con el siguiente script activaremos el servicio syslog en todos los host de nuestra infraestructura

1. Instale PowerCLI sino lo tiene instalado, con ayuda del siguiente video haciendo click aquí.

2. Inicie sesión hacia el vCenter desde el panel de script de PowerShell ISE ejecutando los siguientes cmdlets y espere a que le solicite usuario y contraseña:

Connect-VIServer FQDN_IP_vCenterServer

image

3. Ejecute los siguientes scripts para configurar syslog en todos los hosts del vCenter de acuerdo a su necesidad

Ejemplo 3:

Para configurar un servidor syslog remoto utilizando TCP en el puerto 514:

Foreach ($hostx in (get-VMHost)){

    #Display ESXi running
    Write-Host "Configuring Syslog in $hostx" -ForegroundColor Yellow
    #Set syslog server
    $hostx | Get-AdvancedSetting -Name Syslog.global.logHost | Set-AdvancedSetting -Value $MySyslog -Confirm:$false
    #Restart syslog service
    $esxcli = Get-EsxCli -vmhost $hostx
    $esxcli.system.syslog.reload()
    #Open Firewall ports from ESXi
    Get-VMHostFireWallException -VMHost $hostx -Name Syslog | Set-VMHostFirewallException -Enabled:$True
}

Ejemplo 4:

Para configurar un Datastore de la infraestructura como repositorio de Logs:

#Set my Datastore path
$MySyslog= “[Nombre_Datastore]/ESXi_Logs”

Foreach ($hostx in (Get-VMHost)){

    #Display ESXi running
    Write-Host "Configuring Syslog in $hostx" -ForegroundColor Yellow
    #Set path
    $hostx | Get-AdvancedSetting -Name Syslog.global.logDir | Set-AdvancedSetting -Value $MySyslog -Confirm:$false
    #Creates a subdirectory with the name of the ESXi host under the directory specified by Syslog.global.LogDir
    $hostx | Get-AdvancedSetting -Name Syslog.global.logDirUnique | Set-AdvancedSetting -Value "true" -Confirm:$false
    #Restart syslog service
    $esxcli = Get-EsxCli -vmhost $hostx
    $esxcli.system.syslog.reload()
}

4. Verifique la aplicación de la configuración ejecutando el siguiente script

Foreach ($hostx in (Get-VMHost)){

    Write-Host "Checking Syslog in host $hostx" -ForegroundColor Yellow
    $esxcli = Get-EsxCli -vmhost $hostx.name
    $esxcli.system.syslog.config.get()
}

image

VERIFICACIÓN DE LA TRANSFERENCIA DE LOGS

Una vez configurados los hosts, podremos ver que los Logs serán enviados al servidor remoto o ruta en el Datastore especificado, creando una carpeta con el nombre hostname del host ESXi siempre y cuando la configuración avanzada Syslog.global.logDirUnique haya sido especificada como True.

A continuación, una muestra de cómo se visualizan los Logs que han sido transferidos de manera inmediata a la carpeta indicada dentro de un datastore.

image