Como vimos en la entrada anterior al crear un cluster con PowerCLI y New-Cluster había muchas opciones que no podíamos configurar. Para poder hacerlo tenemos que ayudarnos del tipo de objeto ClusterConfigSpecEx. En la documentación del SDK de VMware podemos ver todas las propiedades y relaciones con otros objetos.
El objeto tiene distintas propiedades para configurar HA, DRS, DPM o las reglas de las máquinas virtuales.
Para poder realizar la configuración avanzada el primer paso es crear un objeto de tipo ClusterConfigSpecEx.
1 |
$ClusterspecEx = New-Object VMware.Vim.ClusterConfigSpecEx |
Una vez creado el objeto vamos a tener que crear distintos objetos específicos para cada una de las configuraciones
HA
Para configurar el HA creamos un objeto de tipo ClusterDasConfigInfo
1 |
$ClusterspecEx.DasConfig = New-Object VMware.Vim.ClusterDasConfigInfo |
Una vez creado el objeto procedemos a configurar los distintos parámetros
Habilitamos HA con la propiedad Enabled
1 |
$ClusterspecEx.DasConfig.Enabled = $true |
Habilitamos la monitorización de los hosts con HostMonitoring
1 |
$ClusterspecEx.DasConfig.HostMonitoring = "enabled" |
Para configurar Admission Control, primero tenemos que habilitarlo
1 |
$ClusterspecEx.DasConfig.admissionControlEnabled = $true |
El siguiente paso es configurar que tipo de política vamos a utilizar donde tenemos que elegir entre:
- Política basada en seleccionar un host de como failover
- Política basada en indicar un número de host y un slot para las máquinas virtuales
- Política basada en uso de recursos de CPU y Memoria
Dependiendo de cual de las 3 vamos a utilizar creamos un objeto u otro
Caso 1
1 2 3 4 5 6 |
#En este caso indicamos el número de servidores y también el tamaño del slot si lo necesitamos $ClusterspecEx.DasConfig.admissionControlPolicy = New-Object VMware.Vim.ClusterFailoverLevelAdmissionControlPolicy $ClusterspecEx.DasConfig.admissionControlPolicy.failoverLevel = 2 $ClusterspecEx.DasConfig.admissionControlPolicy.SlotPolicy = New-Object VMware.Vim.ClusterFixedSizeSlotPolicy $ClusterspecEx.DasConfig.admissionControlPolicy.SlotPolicy.cpu = 200 $ClusterspecEx.DasConfig.admissionControlPolicy.SlotPolicy.memory = 512 |
Caso 2
1 2 3 4 |
#admissionControlPolicy: Indica que política, de las 3 disponibles, utilizamos para Admission Control. Dependiendo del tipo elegido crearemos un objeto y sus propiedades u otro. #EN este caso tenemos que añadir los host que queremos que funcionen de failover $ClusterspecEx.DasConfig.admissionControlPolicy = New-Object VMware.Vim.ClusterFailoverHostAdmissionControlPolicy $ClusterspecEx.DasConfig.admissionControlPolicy.failoverHosts = (Get-VMHost esxi01.localdomain.local).ExtensionData.Moref |
Caso 3
1 2 3 4 |
#Aqui indicamos los valores de porcentaje para CPU y Memoria $ClusterspecEx.DasConfig.admissionControlPolicy = New-Object VMware.Vim.ClusterFailoverResourcesAdmissionControlPolicy $ClusterspecEx.DasConfig.admissionControlPolicy.cpuFailoverResourcesPercent = 15 $ClusterspecEx.DasConfig.admissionControlPolicy.memoryFailoverResourcesPercent = 25 |
Para configurar las opciones por defecto de las máquinas virtuales utilizamos la propiedad defaultVMSettings, para lo que tenemos que crear un nuevo objeto
1 |
$ClusterspecEx.dasConfig.defaultVmSettings = New-Object VMware.VIM.ClusterDasVmSettings |
Una vez creado el objeto isolationResponse indica la opción que tiene que realizar con las máquinas virtuales cuando se detecta un host aislado, pudiendo ser un de los siguientes valores
1 2 3 4 |
$ClusterspecEx.dasConfig.defaultVmSettings.isolationResponse = "clusterIsolationResponse" $ClusterspecEx.dasConfig.defaultVmSettings.isolationResponse = "none" $ClusterspecEx.dasConfig.defaultVmSettings.isolationResponse = "powerOff" $ClusterspecEx.dasConfig.defaultVmSettings.isolationResponse = "shutdown" |
RestartPriority: indica la prioridad por defecto de las máquinas virtuales, pudiendo ser uno de los siguientes valores
1 2 3 4 5 |
$ClusterspecEx.dasConfig.defaultVmSettings.restartPriority = "clusterRestartPriority" $ClusterspecEx.dasConfig.defaultVmSettings.restartPriority = "disabled" $ClusterspecEx.dasConfig.defaultVmSettings.restartPriority = "high" $ClusterspecEx.dasConfig.defaultVmSettings.restartPriority = "low" $ClusterspecEx.dasConfig.defaultVmSettings.restartPriority = "medium" |
Continuamos configurando la monitorización de las máquinas virtuales. En este caso utilizamos el objeto vmToolsMonitoringSettings
1 |
$ClusterspecEx.dasConfig.defaultVmSettings.vmToolsMonitoringSettings = New-Object VMware.VIM.ClusterVmToolsMonitoringSettings |
Una vez creado el objeto configuramos las propiedades
Primero indicamos que tipo de monitorización se va a realizar
1 2 3 |
$ClusterspecEx.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.vmMonitoring = "vmAndAppMonitoring" $ClusterspecEx.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.vmMonitoring = "vmMonitoringDisabled" $ClusterspecEx.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.vmMonitoring = "vmMonitoringOnly" |
A continuación configuramos los valores para los distintos parámetros de la configuración
1 2 3 4 5 6 7 8 9 10 |
#clusterSettings: indica si se utilizan las opciones por máquina o a nivel de cluster $ClusterspecEx.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.clusterSettings = $true #failureInterval: tiempo por el que si no se recive heartbea la máquina se declara como faillida $ClusterspecEx.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.failureInterval = 120 #maxFailures: indica el número de reinicios que pueden producirse en la ventana de tiempo indicada $ClusterspecEx.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.maxFailures = 3 #maxFailureWindow: indica la ventana de tiempo en la que controlar el número de reinicios (-1 indica que no hay ventana de tiempo) $ClusterspecEx.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.maxFailureWindow = 604800 #minUpTime: el número de segundos que se estima que le cuesta iniciar a la máquina virtual $ClusterspecEx.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.minUpTime = 480 |
Los valores predefinidos de estos parámetros son
- Low:
- failureInterval = 120
- minUpTime = 480
- maxFailures = 3
- maxFailureWindow = 604800
- Medium:
- failureInterval = 60
- minUpTime = 240
- maxFailures = 3
- maxFailureWindow = 86400
- High:
- failureInterval = 30
- minUpTime = 120
- maxFailures = 3
- maxFailureWindow = 360
La última parte de la configuración de HA es la selección de los datastores.
Con la propiedad hBDatastoreCandidatePolicy seleccionamos la política para elegir los Datastores de heartbeat
1 2 3 4 5 6 |
#allFeasibleDS: vCenter selecciona los datastores entre todos los disponibles $ClusterspecEx.DasConfig.hBDatastoreCandidatePolicy = "allFeasibleDs" #allFeasibleDsWithUserPreference: vCenter selecciona los datastores entre todos los disponibles teniendo preferencia los seleccionados por el usuario $ClusterspecEx.DasConfig.hBDatastoreCandidatePolicy = "allFeasibleDsWithUserPreference" #userSelectedDs: vCenter selecciona los datastores entre los indicados por el usuario $ClusterspecEx.DasConfig.hBDatastoreCandidatePolicy = "userSelectedDs" |
Y para añadir los datastores preferidos (en este caso 2 datastores de nombre NFS01 y NFS02
1 2 |
$ClusterspecEx.DasConfig.heartbeatDatastore = (Get-Datastore NFS01).ExtensionData.MoRef $ClusterspecEx.DasConfig.heartbeatDatastore += (Get-Datastore NFS02).ExtensionData.MoRef |
Estos son todos los parámetros para configurar HA y los tenemos en el objeto $ClusterspecEx. Para crear el cluster con estos parámetros tenemos que partir de un cluster ya creado.
Para ello obtenemos el cluster y ejecutamos ReconfigureComputeResource pasando el objeto creado anteriormente. El segundo parámetro, si está a $true, indica que sólo se modificarán los parámetros indicados en el primer parámetro, de forma que si hay alguna propiedad que no se ha indicado, se mantendrá el valor existente en el cluster. Si está a $false, se sobrescribirán todas las propiedades
1 2 |
$cluster = get-CLuster Cluster01 $cluster.ExtensionData.ReconfigureComputeResource($ClusterSpecEx,$true) |
En este punto ya tenemos configurado HA con todas las opciones desde PowerCLI.
En las próximas entradas continuaremos con DRS y sus reglas.
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?