Jekyll2023-07-04T05:37:18+00:00https://miquelmariano.github.io/atom.xmlMiquel Mariano RamisBlog personal de Miquel Mariano. En él hablo sobre virtualización, VDI, automatización, ansible y mucho más.Miquel MarianovExpert 20232023-02-21T00:14:00+00:002023-02-21T00:14:00+00:00https://miquelmariano.github.io/2023/02/21/vExpert-2023<p>Un año mas, y ya son unos cuantos, VMware <a href="https://vexpert.vmware.com/directory/753">me ha nombrado</a> nuevamente vExpert</p>
<p>Para mí es un orgullo formar parte de <a href="https://vexpert.vmware.com/directory">este grupo</a> entre tanto crack.</p>
<p>Quiero dar la enhorabuena a todos los <a href="https://vexpert.vmware.com/directory">agraciados</a>, y mi enorme agradecimiento a VMware y a toda la vComunity</p>
<p>Enhorabuena a todos.</p>
<p>Un abrazo!</p>
<p>Miquel.</p>Miquel MarianoUn año mas, y ya son unos cuantos, VMware me ha nombrado nuevamente vExpertBack-to-basics 12 - Actualización HW virtual y VMWare Tools con LifeCycle Manager2023-01-19T00:00:00+00:002023-01-19T00:00:00+00:00https://miquelmariano.github.io/2023/01/19/back-to-basics-12-actualizar-vmware-tools-virtual-hardware<p>Buenos dias a tod@as!!</p>
<p>Hoy traigo una pequeña actualización al post <a href="https://miquelmariano.github.io/2017/12/13/update-manager/">Actualización HW virtual y VMWare Tools con vSphere Update Manager</a> que tanto se ha usado en los últimos años. Lo hemos adaptándolo a las nuevas versiones de vSphere, cliente HTML5, cambio de nomenclatura a LifeCycle Manager, etc etc y de paso, incluirlo en la serie <a href="https://miquelmariano.github.io/tag/#/backtobasics">back to basics</a>, que hacia tiempo que no actualizaba ;-)</p>
<p>También aprovecho para mencionar a mi compi <a href="https://www.linkedin.com/in/ibon-lizana-cob-086793153/">Ibón</a> que me ha ayudado en la actualización</p>
<p>El presente documento pretende servir de guía para la configuración y posterior uso de vSphere Update Manager como herramienta para la actualización de HW Virtual y VMWare Tools en nuestras máquinas virtuales de un entorno vSphere</p>
<h1 id="actualización-hw-virtual"><em>Actualización HW virtual</em></h1>
<h5 id="iniciar-sesión-en-vcenter-a-través-del-vsphere-cient">Iniciar sesión en vCenter a través del vSphere Cient</h5>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle01.png" alt="lc1" /></p>
<h5 id="seleccionamos-cualquier-objeto-de-nuestro-árbol-de-inventario-y-la-pestaña-actualizaciones">Seleccionamos cualquier objeto de nuestro árbol de inventario y la pestaña Actualizaciones</h5>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle02.png" alt="lc2" /></p>
<h5 id="lo-primero-que-se-tiene-que-actualizar-es-el-vm-hardware-seleccionando-el-actualizar-para-coincidir-con-el-host-veremos-las-opciones-disponibles">Lo primero que se tiene que actualizar es el VM Hardware, seleccionando el “actualizar para coincidir con el host” veremos las opciones disponibles</h5>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle03.png" alt="lc3" /></p>
<h4 id="en-el-caso-de-querer-actualizar-el-componente-de-inmediato-seleccionaremos-actualizar-para-coincidir-con-el-host">En el caso de querer actualizar el componente de inmediato, seleccionaremos actualizar para coincidir con el host</h4>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle04.png" alt="lc4" /></p>
<h4 id="para-programarlo-desplegaremos-el-listado-de-opciones-que-nos-proporciona">Para programarlo, desplegaremos el listado de opciones que nos proporciona</h4>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle05.png" alt="lc5" /></p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle05.png" alt="lc5" /></p>
<blockquote>
<p>NOTA: Es recomendable tomar un snapshot antes de realizar la acción y marcar que se elimine
automáticamente pasadas 24 horas</p>
</blockquote>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle07.png" alt="lc07" /></p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle08.png" alt="lc08" /></p>
<blockquote>
<p>NOTA: La actualización de VM Hardware requiere de reinicio, por lo que tomar en cuenta cuando se
aplicará este procedimiento</p>
</blockquote>
<h4 id="finalizado-el-proceso-aparecerá-el-componente-como-conforme">Finalizado el proceso, aparecerá el componente como “Conforme”</h4>
<h1 id="vmware-tools"><em>VMWare Tools</em></h1>
<h4 id="el-proceso-de-actualización-de-las-vmware-tools-es-prácticamente-idéntico-al-del-vm-hardware">El proceso de actualización de las VMWare Tools es prácticamente idéntico al del VM Hardware</h4>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle09.png" alt="lc09" /></p>
<h4 id="comprobamos-el-estado-del-hw-virtual-y-tools">Comprobamos el estado del HW Virtual y Tools</h4>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle10.png" alt="lc10" /></p>
<h4 id="seleccionando-actualizar-para-coincidir-con-el-host-veremos-las-opciones-disponibles">Seleccionando actualizar para coincidir con el host veremos las opciones disponibles</h4>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle11.png" alt="lc11" /></p>
<h4 id="en-el-caso-de-querer-actualizar-el-componente-de-inmediato-seleccionaremos-actualizar-para-coincidir-con-el-host-1">En el caso de querer actualizar el componente de inmediato, seleccionaremos actualizar para coincidir con el host</h4>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle12.png" alt="lc12" /></p>
<h4 id="para-programarlo-desplegaremos-el-listado-de-opciones-que-nos-proporciona-1">Para programarlo, desplegaremos el listado de opciones que nos proporciona</h4>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle13.png" alt="lc13" /></p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle14.png" alt="lc14" /></p>
<h4 id="es-recomendable-tomar-un-snapshot-antes-de-realizar-la-acción-y-marcar-que-se-elimine-automáticamente-pasadas-24-horas">Es recomendable tomar un snapshot antes de realizar la acción y marcar que se elimine automáticamente pasadas 24 horas</h4>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle15.png" alt="lc15" /></p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle16.png" alt="lc16" /></p>
<blockquote>
<p>NOTA: La actualización de VMWare Tools requiere de reinicio, por lo que tomar en cuenta cuando se
aplicará este procedimiento</p>
</blockquote>
<h4 id="una-vez-finalizado-el-proceso-ambos-componentes-estarán-en-estado-conforme">Una vez finalizado el proceso, ambos componentes estarán en estado “Conforme”</h4>
<h4 id="en-caso-necesario-ara-visualizar-las-tareas-programadas-en-las-vms-del-cluster-se-podrá-hacer-con-el-siguiente-comando">En caso necesario, ara visualizar las tareas programadas en las VMs del cluster, se podrá hacer con el siguiente comando</h4>
<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">(</span><span class="n">Get-View</span><span class="w"> </span><span class="nx">ScheduledTaskManager</span><span class="p">)</span><span class="o">.</span><span class="nf">ScheduledTask</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">%</span><span class="p">{(</span><span class="n">Get-View</span><span class="w"> </span><span class="bp">$_</span><span class="p">)</span><span class="o">.</span><span class="nf">Info</span><span class="p">}</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">Select</span><span class="w"> </span><span class="nx">Name</span><span class="p">,</span><span class="nx">NextRunTime</span><span class="w">
</span></code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2023/01/lifecycle17.png" alt="lc17" /></p>
<p>Os dejo por aquí el <a href="https://miquelmariano.github.io/2019/01/09/instalar-powerCLI-10-windows/">proceso de instalción de PowerCLI sobre windows</a></p>
<p>Espero que os sea de utilidad.</p>
<p>Un saludo!</p>
<p>Miquel.</p>Miquel MarianoBuenos dias a tod@as!!Script para apagar/encender VM repositorio immutable Veeam2022-11-09T00:00:00+00:002022-11-09T00:00:00+00:00https://miquelmariano.github.io/2022/11/09/repositorio-immutable-y-offline-apagar-vm-desde-trabajo-veeam<p>Hace varios meses, en <a href="https://miquelmariano.github.io/2022/04/05/veeam11-immutable-repository-hardening/">este post</a> vimos como instalar y configurar un repositorio immutable con la nueva versión de Veeam 11.</p>
<p>Hoy vengo a dar una vuelta de tuerca más a este asunto y veremos como a demás de hacer el repositorio immutable lo podemos dejar offline mientras no tengamos trabajos de protección en ejecución.</p>
<p>Para ello, configuraremos unos scripts pre y post ejecución del trabajo de backup que lo que harán será arrancar y apagar la VM que tiene el repositorio immutable, y por lo tanto, que sea accesible durante la ventana de backup.</p>
<p>Antes de nada, os recomiendo que actualiceis vuestra versión de PowerCLI a la última disponible. En <a href="https://miquelmariano.github.io/2019/01/09/instalar-powerCLI-10-windows/">este post</a> explico como hacerlo.</p>
<p>Vamos al lío ;-)</p>
<p>El script lo podréis encontrar <a href="https://raw.githubusercontent.com/miquelMariano/vSphere-PowerCLI/master/start-stop-vm/start-stop-vm.ps1">aquí</a> y es muy fácil de utilizar, simplemente pasando por parámetro ciertas variables nos servirá para encender o apagar cualquier VM de nuestro entorno.</p>
<p>Para usarlo, sería por ejemplo:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>.\start-stop-vm.ps1 -vCenter "10.0.0.100" -vCenteruser "administrator@vsphere.local" -vm "VeeamImmutable-Semanal" -status "off"
.\start-stop-vm.ps1 -vCenter "10.0.0.100" -vCenteruser "administrator@vsphere.local" -vm "VeeamImmutable-Semanal" -status "on"
</code></pre></div></div>
<p>Para configurar la parte Veeam, simplemente editaremos nuestros backups con destino al repositorio immutable y configuraremos el script tanto antes como después del procesamiento del job.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/11/immutable-offline-01.png" alt="immutable-offline-01" class="align-center" /></p>
<p>Cabe comentar que veeam por defecto usa powershell 5 y, por lo tanto, será necesario indicar en la configuración que utilice powershell 7</p>
<p>Antes:
```“C:\Program Files\PowerShell\7\pwsh.exe” -ExecutionPolicy ByPass -Command “ & c:\encora\scripts\start-stop-vm.ps1 -vCenter ‘10.0.0.100’ -vCenteruser ‘administrator@vsphere.local’ -vm ‘VeeamImmutable-Semanal-OF’ -status ‘on’ -ErrorAction Stop”</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
Después
``"C:\Program Files\PowerShell\7\pwsh.exe" -ExecutionPolicy ByPass -Command " & c:\encora\scripts\start-stop-vm.ps1 -vCenter '10.0.0.100' -vCenteruser 'administrator@vsphere.local' -vm 'VeeamImmutable-Semanal-OF' -status 'on' -ErrorAction Stop"
</code></pre></div></div>
<p>Ya con esto, podremos ver en los logs y en el vCenter como se ejecuta el script y nos arranca/apaga la VM que tiene el repositorio immutable</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/11/immutable-offline-02.png" alt="immutable-offline-02" class="align-center" /></p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/11/immutable-offline-03.png" alt="immutable-offline-03" class="align-center" /></p>
<p>En caso de recibir algún error, recordaros que los logs de Veeam se guardan aquí:
<code class="language-plaintext highlighter-rouge">C:\ProgramData\Veeam\Backup\Jobname\Job.Jobname.log</code></p>
<p>Finalmente, y ya que habéis llegado hasta aquí, os recomiendo que os paséis por todos los posts relacionados con los <a href="https://miquelmariano.github.io/tag/#/immutable">Repositorios Immutables de Veeam</a> que ya tenemos publicados en este blog</p>
<p>Muchas gracias por leerme</p>
<p>Un saludo!!!</p>Miquel MarianoHace varios meses, en este post vimos como instalar y configurar un repositorio immutable con la nueva versión de Veeam 11.Eliminar pools huérfanos en VMware Horizon2022-07-20T00:00:00+00:002022-07-20T00:00:00+00:00https://miquelmariano.github.io/2022/07/20/eliminar-pools-huerfanos-vmware-horizon<p>Los que trabajamos habitualmente con entornos Horizon, nos ha pasado mas de una vez que al intentar eliminar un Desktop Pool se nos queda en estado “eliminando” o directamente aparece en gris y sin poder interactuar con él.</p>
<p>En el post de hoy veremos como podemos eliminar definitivamente estos pool y cómo limpiar cualquier rastro.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-01.png" alt="horizon-adam-01" class="align-center" /></p>
<p>Para salir de esta situación, no nos quedará otra opción que utilizar la herramienta de ADSI Edit para poder modificar la ADAM database que utiliza horizon.</p>
<h1 id="eliminar-pools-huérfanos-en-vmware-horizon">Eliminar pools huérfanos en VMware Horizon</h1>
<p>Desde el propio servidor de conexión, abriremos la herramienta ADSI Edit y realizaremos la conexión:</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-02.png" alt="horizon-adam-02" class="align-center" /></p>
<p>Añadiremos los siguientes datos de conexión:</p>
<ul>
<li>Name: Nombre descriptivo de la conexión</li>
<li>Select or type a Distinguished Name or Naming Context: <strong>dc=vdi,dc=vmware,dc=int</strong></li>
<li>Select or tpe a domain or server: <strong>localhost:389</strong></li>
</ul>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-03.png" alt="horizon-adam-03" class="align-center" /></p>
<p>KB oficial <a href="https://kb.vmware.com/s/article/2012377">aquí</a></p>
<p>Expandimos <strong>dc=vdi,dc=vmware,dc=int</strong> y accedemos a <strong>OU=Server Groups</strong>
Buscaremos el <strong>CN</strong> que contiene el desktop pool que queramos eliminar y con el botón secundario <em>Delete</em></p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-04.png" alt="horizon-adam-04" class="align-center" /></p>
<p>Confirmamos con el botón <em>Yes</em></p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-05.png" alt="horizon-adam-05" class="align-center" /></p>
<p>El pool será eliminado</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-06.png" alt="horizon-adam-06" class="align-center" /></p>
<p>Ahora accederemos a <strong>OU=Applications</strong> y también eliminaremos el <strong>CN</strong> de esta sección</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-07.png" alt="horizon-adam-07" class="align-center" /></p>
<p>Confirmamos con el botón <strong>Yes</strong></p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-05.png" alt="horizon-adam-05" class="align-center" /></p>
<p>Y verificamos que ya no aparece el registro</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-08.png" alt="horizon-adam-08" class="align-center" /></p>
<p>Una vez terminado, podremos acceder de nuevo desde el horizon administrator en el apartado de <em>Inventario > Escritorios</em> y verificar que realmente se han eliminado los escritorios que estaban en ese estado bloqueado.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/07/horizon-adam-09.png" alt="horizon-adam-09" class="align-center" /></p>
<p>Un saludo!!!</p>Miquel MarianoLos que trabajamos habitualmente con entornos Horizon, nos ha pasado mas de una vez que al intentar eliminar un Desktop Pool se nos queda en estado “eliminando” o directamente aparece en gris y sin poder interactuar con él.Extender particiones xfs y repositorio immutable Veeam2022-06-09T00:00:00+00:002022-06-09T00:00:00+00:00https://miquelmariano.github.io/2022/06/09/extender-repositorio-immutable<p>Semanas atrás, publiqué un post en donde se explicaba <a href="https://miquelmariano.github.io/2022/04/05/veeam11-immutable-repository-hardening/">como montar repositorios immutables con Veeam 11</a>.
En el post de hoy, vamos a ver de forma sencilla como extender una partición cuando el sistema de ficheros es xfs y, por lo tanto, extender un repositorio immutable. Vamos a ello ;-)</p>
<ul>
<li>
<p>Como paso previo, lo primero que tendremos que hacer es ampliar nuestro disco. Ya bien desde nuestro vCenter en caso de ser un disco virtual o desde nuestro sistema de almacenamiento en caso de utilizar discos RDM.</p>
</li>
<li>
<p>Localizaremos el identificador del disco con el siguiente comando</p>
</li>
</ul>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">ls</span> /sys/class/scsi_disk/
</code></pre></div></div>
<ul>
<li>Realizaremos un escaneo del disco usando el identificador previo para refrescar la capacidad del disco. En mi caso el identificador es 2:0:1:0</li>
</ul>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">echo</span> <span class="m">1</span> > /sys/class/scsi_device/2:0:1:0/device/rescan
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/06/xfs1.png" alt="xfs1" class="align-center" /></p>
<ul>
<li>Comprobaremos el estado de los discos y podremos ver como el tamaño del disco es mayor que el de la partición de sistema:</li>
</ul>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">fdisk</span> -l
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/06/xfs2.png" alt="xfs2" class="align-center" /></p>
<ul>
<li>Redimensionaremos la partición con el siguiente comando:</li>
</ul>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">parted</span> /dev/sdX
</code></pre></div></div>
<p>Con el comando <code class="language-plaintext highlighter-rouge">print</code> podremos mostrar el listado de particiones. En mi caso, la partición a ampliar es la 1 (aceptamos la advertencia con <code class="language-plaintext highlighter-rouge">fix</code>)</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/06/xfs3.png" alt="xfs3" class="align-center" /></p>
<ul>
<li>Ampliamos la partición 1:</li>
</ul>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">resizepart</span> <span class="m">1</span>
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/06/xfs4.png" alt="xfs4" class="align-center" /></p>
<ul>
<li>Certificamos que el disco y la partición tienen el mismo tamaño:</li>
</ul>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">fdisk</span> -l /dev/sdX
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/06/xfs5.png" alt="xfs5" class="align-center" /></p>
<ul>
<li>Ahora es el momento de ampliar nuestro sistema de ficheros, que aún indica que es de 10Gb</li>
</ul>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/06/xfs6.png" alt="xfs6" class="align-center" /></p>
<ul>
<li>Mostraremos información del sistema de ficheros antes de ampliarlo</li>
</ul>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">xfs</span>_growfs -n /media/datos
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/06/xfs7.png" alt="xfs7" class="align-center" /></p>
<ul>
<li>Ampliamos el sistema de ficheros y verificamos la ampliación a nivel de bloque:</li>
</ul>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">xfs</span>_growfs /media/datos
<span class="k">xfs</span>_info /media/datos
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/06/xfs8.png" alt="xfs8" class="align-center" /></p>
<ul>
<li>Finalmente, verificaremos la ampliación del sistema de ficheros XFS:</li>
</ul>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">df</span> -h
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/06/xfs9.png" alt="xfs9" class="align-center" /></p>
<ul>
<li>En última instancia, nos tendremos que conectar a nuestro veeam y hacer un rescan del repositorio para refrescar el tamaño final.</li>
</ul>
<p>Espero que os sirva.</p>
<p>Un saludo!</p>
<p>Miquel.</p>Miquel MarianoSemanas atrás, publiqué un post en donde se explicaba como montar repositorios immutables con Veeam 11. En el post de hoy, vamos a ver de forma sencilla como extender una partición cuando el sistema de ficheros es xfs y, por lo tanto, extender un repositorio immutable. Vamos a ello ;-)Repositorio immutable con Veeam Backup & Replication 112022-04-05T00:00:00+00:002022-04-05T00:00:00+00:00https://miquelmariano.github.io/2022/04/05/veeam11-immutable-repository-hardening<p>Con la nueva versión de <a href="https://www.veeam.com/veeam_backup_11_0_release_notes_rn.pdf">Veeam Backup & Replication 11</a> viene incluida una nueva funcionalidad que nos permite hacer inmutables los backups de nuestro entorno utilizando un ‘Hardened Repository’ montado sobre un sistema linux.</p>
<p>En este post, veremos su instalación y configuración paso a paso.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-00.png" alt="veeam-immutable-repository-00" class="align-center" /></p>
<h1 id="requisitos">Requisitos</h1>
<ul>
<li>Veeam Backup & Replication v11</li>
<li>Una distribución de linux 64bits. En este post utilizaremos una Ubuntu server</li>
<li>La distribución debe soportar el sistema de ficheros XFS</li>
</ul>
<h1 id="instalación-ubuntu-server-2004-lts">Instalación Ubuntu Server 20.04 LTS</h1>
<p>En este laboratorio, utilizaremos un Ubuntu Server 20.04 LTS, el cual podremos descargar desde <a href="https://ubuntu.com/download/server">aquí</a></p>
<p>Crearemos una VM con los siguientes parámetros:</p>
<ul>
<li>1 vVPU</li>
<li>1 Gb Ram</li>
<li>20Gb HDD 1 (Para instalar SO)</li>
<li>500Gb HDD2 (Para el repositorio XFS)</li>
</ul>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-01.png" alt="veeam-immutable-repository-01" class="align-center" /></p>
<p>Arrancamos la VM con el live CD y seguimos el asistente:</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-02.png" alt="veeam-immutable-repository-02" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-03.png" alt="veeam-immutable-repository-03" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-04.png" alt="veeam-immutable-repository-04" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-05.png" alt="veeam-immutable-repository-05" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-06.png" alt="veeam-immutable-repository-06" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-07.png" alt="veeam-immutable-repository-07" class="align-center" /></p>
<p>Seleccionaremos la opción para configurar manualmente la parte de storage</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-08.png" alt="veeam-immutable-repository-08" class="align-center" /></p>
<p>Crearemos la partición GPT en el disco de SO en formato ext4 y el punto de montaje raiz /</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-09.png" alt="veeam-immutable-repository-09" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-10.png" alt="veeam-immutable-repository-10" class="align-center" /></p>
<p>Con el disco de datos, haremos lo mismo, pero esta vez, el formato será xfs y el punto de montaje /mnt/veeamrepo01</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-11.png" alt="veeam-immutable-repository-11" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-12.png" alt="veeam-immutable-repository-12" class="align-center" /></p>
<p>Verificaremos que hemos definido los parámetros correctos y se crearán las particiones</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-13.png" alt="veeam-immutable-repository-13" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-14.png" alt="veeam-immutable-repository-14" class="align-center" /></p>
<p>Configuraremos parámetros básicos de usuario, nombre del servidor y credenciales. También instalaremos OpenSSH</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-15.png" alt="veeam-immutable-repository-15" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-16.png" alt="veeam-immutable-repository-16" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-17.png" alt="veeam-immutable-repository-17" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-18.png" alt="veeam-immutable-repository-18" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-19.png" alt="veeam-immutable-repository-19" class="align-center" /></p>
<p>Veremos el proceso de instalación y al finalizar reiniciaremos el sistema</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-20.png" alt="veeam-immutable-repository-20" class="align-center" /></p>
<h1 id="configuración-del-repositorio-inmutable">Configuración del repositorio inmutable</h1>
<p>Con el SO instalado, ya nos podremos conectar con el usuario administrador previamente creado</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-21.png" alt="veeam-immutable-repository-21" class="align-center" /></p>
<p>Lanzamos actualización del SO y verificamos que tenemos el disco montado en xfs</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># sudo apt-get upgrade</span>
<span class="c1"># df -Th</span>
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-22.png" alt="veeam-immutable-repository-22" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-23.png" alt="veeam-immutable-repository-23" class="align-center" /></p>
<h2 id="creación-usuario-local">Creación usuario local</h2>
<p>Este usuario se usará para el <em>Veeam Transport Service</em> poder montar el repositorio.
Creamos una nueva cuenta de la siguiente manera:</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># sudo useradd localveeam --create-home -s /bin/bash</span>
<span class="c1"># sudo passwd localveeam</span>
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-24.png" alt="veeam-immutable-repository-24" class="align-center" /></p>
<p>De manera temporal, este usuario necesitará privilegios de root para instalar los servicios de Veeam</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># sudo usermod -a -G sudo localveeam</span>
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-25.png" alt="veeam-immutable-repository-25" class="align-center" /></p>
<h1 id="configuración-punto-de-montaje">Configuración punto de montaje</h1>
<p>Para poder usar la tecnología de Fast-Clone, deberemos habilitar primero Reflink en ubuntu, que por defecto viene deshabilitado.
Esta configuración nos ayudará a optimizar el espacio y rendimiento durante las operaciones de synthetic full.</p>
<p>Veeam requiere que el filesystem esté formateado con reflink para habilitar la funcionalidad de Fast-Clone.</p>
<p>Localizamos el disco utilizado como repositorio con el siguiente comando</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">sudo</span> fdisk -l
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-26.png" alt="veeam-immutable-repository-26" class="align-center" /></p>
<p>Como la partición se montó durante el proceso de instalación del SO, deberemos desmontarla primero</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># sudo umount /mnt/veeamrepo01</span>
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-27.png" alt="veeam-immutable-repository-27" class="align-center" /></p>
<p>Con la partición desmontada, podremos formatearla con los parámetros requeridos por Veeam</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="k">sudo</span> mkfs.xfs -b size=4096 -m reflink=1,crc=1 /dev/sdb -f
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-28.png" alt="veeam-immutable-repository-28" class="align-center" /></p>
<p>Como el UUID de la partición habrá cambiado, necesitamos modificar el fstab para que se monte la partición automaticamente tras un reinicio</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">sudo</span> blkid /dev/sdb
<span class="k">sudo</span> vi /etc/fstab
<span class="k">sudo</span> mount -a
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-29.png" alt="veeam-immutable-repository-29" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-30.png" alt="veeam-immutable-repository-30" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-31.png" alt="veeam-immutable-repository-31" class="align-center" /></p>
<h1 id="asignar-permisos-al-punto-de-montaje">Asignar permisos al punto de montaje</h1>
<p>Asignaremos permisos al usuario local creado previamente con los siguientes comandos</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># sudo chown -R localveeam:localveeam /mnt/veeamrepo01/</span>
<span class="c1"># sudo chmod 700 /mnt/veeamrepo01</span>
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-32.png" alt="veeam-immutable-repository-32" class="align-center" /></p>
<p>Verificamos los permisos asignados</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ll /mnt</span>
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-33.png" alt="veeam-immutable-repository-33" class="align-center" /></p>
<h1 id="configuración-repositorio-veeam">Configuración repositorio Veeam</h1>
<p>Añadiremos el nuevo servidor linux siguiendo el wizard</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-34.png" alt="veeam-immutable-repository-34" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-35.png" alt="veeam-immutable-repository-35" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-36.png" alt="veeam-immutable-repository-36" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-37.png" alt="veeam-immutable-repository-37" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-38.png" alt="veeam-immutable-repository-38" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-39.png" alt="veeam-immutable-repository-39" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-40.png" alt="veeam-immutable-repository-40" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-41.png" alt="veeam-immutable-repository-41" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-42.png" alt="veeam-immutable-repository-42" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-43.png" alt="veeam-immutable-repository-43" class="align-center" /></p>
<p>Una vez los servicios de veeam están instalados con el usuario <em>localveeam</em>, podremos sacar los privilegios de sudo. En cualquier caso, es importante recalcar que las credenciales de este usuario no se han almacenado en Veeam al utilizar la opción de “Single-use credentials for hardened repository”</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># sudo deluser localveeam sudo</span>
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-44.png" alt="veeam-immutable-repository-44" class="align-center" /></p>
<p>Añadiremos un nuevo repositorio desde <em>Backup Infrastructure</em></p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-45.png" alt="veeam-immutable-repository-45" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-46.png" alt="veeam-immutable-repository-46" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-47.png" alt="veeam-immutable-repository-47" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-48.png" alt="veeam-immutable-repository-48" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-49.png" alt="veeam-immutable-repository-49" class="align-center" /></p>
<p>Aquí es donde definimos la inmutabilidad de los datos del repositorio en días</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-50.png" alt="veeam-immutable-repository-50" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-51.png" alt="veeam-immutable-repository-51" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-52.png" alt="veeam-immutable-repository-52" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-53.png" alt="veeam-immutable-repository-53" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-54.png" alt="veeam-immutable-repository-54" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-55.png" alt="veeam-immutable-repository-55" class="align-center" /></p>
<p>Configuramos un nuevo job con el nuevo repositorio inmutable</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-56.png" alt="veeam-immutable-repository-56" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-57.png" alt="veeam-immutable-repository-57" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-58.png" alt="veeam-immutable-repository-58" class="align-center" /></p>
<p>Los repositorios inmutables de Veeam requieren de forward incremental. No está soportado reverse incremental</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-59.png" alt="veeam-immutable-repository-59" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-60.png" alt="veeam-immutable-repository-60" class="align-center" /></p>
<h1 id="pruebas-de-inmutabilidad">Pruebas de inmutabilidad</h1>
<p>Si intentamos eliminar un objeto del repositorio, nos indicará que es inmutable y no se puede eliminar</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-61.png" alt="veeam-immutable-repository-61" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-62.png" alt="veeam-immutable-repository-62" class="align-center" /></p>
<p>Desde la linea de comandos, también podremos comprobar la inmutabilidad de los backups.</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># lsattr</span>
<span class="c1"># lsattr -l</span>
</code></pre></div></div>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/04/veeam-immutable-repository-63.png" alt="veeam-immutable-repository-63" class="align-center" /></p>
<p>Podemos ver que los ficheros de backup aparecen como inmutables. Sólo el fichero .vbm no tiene este atributo y es debido a que veeam lo necesita actualizar continuamente durante las sesiones de backup.</p>
<p>Un saludo!</p>
<p>Miquel.</p>Miquel MarianoCon la nueva versión de Veeam Backup & Replication 11 viene incluida una nueva funcionalidad que nos permite hacer inmutables los backups de nuestro entorno utilizando un ‘Hardened Repository’ montado sobre un sistema linux.Modificar perfil predeterminado en Windows 10 para entornos VDI VMware Horizon2022-02-22T00:00:00+00:002022-02-22T00:00:00+00:00https://miquelmariano.github.io/2022/02/22/perfil-predeterminado-window-10-vdi-horizon<p>El post de hoy va a ser muy breve, pero os voy a enseñar una pequeña herramienta muy útil para los que trabajamos en entornos VDI o entornos de escritorio en general.</p>
<p>Se trata de una pequeña utilidad que nos va a servir para modificar el perfil predeterminado en Windows 10 para que todos nuestros usuarios partan de una misma configuración pre establecida al iniciar sesión por primera vez en nuestros escritorios.</p>
<p>Se llama <strong>Docu ForensiT</strong> y se puede descargar fácilmente y sin registros desde <a href="https://www.forensit.com/support-downloads.html">aquí</a></p>
<p>Inicialmente, crearemos un usuario en la <a href="https://miquelmariano.github.io/jmp-part9/">plantilla VDI</a>, que nos servirá para hacer toda la configuración que queremos hacer predeterminada y aplicar en todos nuestros usuarios.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/02/default-profile-00.png" alt="default-profile-00" class="align-center" /></p>
<p>En mi caso, a este usuario le he cambiado el fondo de escritorio, le he puesto una serie de iconos y accesos directos tanto en el escritorio como en la barra de tareas</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/02/default-profile-01.png" alt="default-profile-01" class="align-center" /></p>
<p>Una vez tengamos al usuario predeterminado completamente configurado a nuestro gusto y necesidad, cerraremos la sesión e iniciaremos con el usuario administrador local.
Ejecutaremos un cmd como administrador y la utilidad defprof.exe con el usuario que queramos hacer predeterminado.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/02/default-profile-02.png" alt="default-profile-02" class="align-center" /></p>
<p>Una vez tengamos ya el perfil predeterminado a partir del usuario que hemos configurado, todos los perfiles que se creen tendrán la configuración pre establecida.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2022/02/default-profile-03.png" alt="default-profile-03" class="align-center" /></p>
<p>¿Qué os parece?</p>
<p>Espero que os guste ;-)</p>
<p>Saludos!</p>
<p>Miquel.</p>Miquel MarianoEl post de hoy va a ser muy breve, pero os voy a enseñar una pequeña herramienta muy útil para los que trabajamos en entornos VDI o entornos de escritorio en general.Monitorización avanzada del estado de Horizon Conection Server para balanceo de carga con HAproxy y keepalived2021-12-21T00:00:00+00:002021-12-21T00:00:00+00:00https://miquelmariano.github.io/2021/12/21/vmware-horizon-load-balancer-haproxy-avanzado<p>Tiempo atrás <a href="https://miquelmariano.github.io/2021/09/08/vmware-horizon-haproxy/">escribí una entrada</a> en la que hablaba sobre balancear nuestros servicios de Horizon Connection Server y App Volumes con HAProxy y Keepalived sobre una VM Photon OS.</p>
<p>En el post de hoy, quiero dar una vuelta de tuerca más a esta arquitectura para monitorizar de forma más exhaustiva si los servicios por detrás del balanceador (HAproxy) están o no realmente disponibles. En el <a href="https://miquelmariano.github.io/2021/09/08/vmware-horizon-haproxy/">post original</a> hacíamos una comprobación muy básica del estado de los connection servers o app volumes manager y solo comprobábamos si el servidor web contestaba o no.</p>
<p>Esto nos puede llevar a una situación no deseada, ya que desde el Horizon Administrator es posible deshabilitar un Connection Server de manera administrativa. El servidor web sigue levantado y, por lo tanto, HAProxy le sigue enviando peticiones, con el consiguiente “deny” del connection server.</p>
<p>Para evitar este escenario he averiguado que podemos monitorizar “connnection-server-url/favicon.ico”. Si el servidor está OK y aceptando sesiones devolverá un código 200, en cambio, si está deshabilitado administrativamente, devolverá un código 503</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2021/12/cs-disabled-01.png" alt="cs-disabled-01" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2021/12/cs-disabled-02.png" alt="cs-disabled-02" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2021/12/cs-disabled-03.png" alt="cs-disabled-03" class="align-center" /></p>
<p>Con HAProxy podemos verificar esto y declarar un servidor de backend en “down” si el código devuelto es diferente a 200. Para eso, necesitaremos modificar el fichero de configuración <code class="language-plaintext highlighter-rouge">/etc/haproxy/haproxy.cfg</code> y ajustar la configuración:</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">...</span>
<span class="k">backend</span> horizon
<span class="k">mode</span> tcp
<span class="k">option</span> ssl-hello-chk
<span class="k">balance</span> source
<span class="k">option</span> httpchk HEAD /favicon.ico
<span class="k">server</span> Horizon_Connection_Server_01 <span class="m">192</span>.168.6.113:443 weight <span class="m">1</span> check check-ssl verify <span class="no">none</span> inter <span class="m">30</span>s fastinter <span class="m">2</span>s downinter <span class="m">5</span>s rise <span class="m">3</span> fall <span class="m">3</span>
<span class="k">server</span> Horizon_Connection_Server_02 <span class="m">192</span>.168.6.114:443 weight <span class="m">1</span> check check-ssl verify <span class="no">none</span> inter <span class="m">30</span>s fastinter <span class="m">2</span>s downinter <span class="m">5</span>s rise <span class="m">3</span> fall <span class="m">3</span>
<span class="err">...</span>
</code></pre></div></div>
<blockquote>
<p>Añadiremos la línea <strong><em>option httpchk HEAD /favicon.ico</em></strong> y también añadiremos el <strong><em>check-ssl verify none</em></strong> en las 2 líneas de los server.</p>
</blockquote>
<p>Tendremos que reiniciar el servicio de ambos servidores con el comando <code class="language-plaintext highlighter-rouge">systemctl restart haproxy</code></p>
<p>Una vez arrancado con la nueva config, en el portal de estadísticas veremos cómo declara el servidor en DOWN porque ha recibido un 503</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2021/12/cs-disabled-04.png" alt="cs-disabled-04" class="align-center" /></p>
<p>Al habilitar el conection server de nuevo, el servidor se recuperará y volverá a aceptar peticiones:</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2021/12/cs-disabled-05.png" alt="cs-disabled-05" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2021/12/cs-disabled-06.png" alt="cs-disabled-06" class="align-center" /></p>
<p>Aparte de esto, VMware también recomienda una frecuencia de chequeo que no sobrecargue en exceso los servidores. VMware recomienda una frecuencia de 30 segundos entre chequeos y 91 segundos de timeout (3 check + 1 segundo). Así pues, la configuración quedaria de la siguiente manera:</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">...</span>
<span class="k">frontend</span> horizon-https
<span class="k">mode</span> tcp
<span class="k">bind</span> <span class="m">192</span>.168.6.123:443
<span class="k">timeout</span> server <span class="m">91</span>s
<span class="k">default</span>_backend horizon
<span class="k">backend</span> horizon
<span class="k">mode</span> tcp
<span class="k">option</span> ssl-hello-chk
<span class="k">balance</span> source
<span class="k">option</span> httpchk HEAD /favicon.ico
<span class="k">timeout</span> server <span class="m">91</span>s
<span class="k">server</span> Horizon_Connection_Server_01 <span class="m">192</span>.168.6.113:443 weight <span class="m">1</span> check check-ssl verify <span class="no">none</span> inter <span class="m">30</span>s fastinter <span class="m">2</span>s downinter <span class="m">5</span>s rise <span class="m">3</span> fall <span class="m">3</span>
<span class="k">server</span> Horizon_Connection_Server_02 <span class="m">192</span>.168.6.114:443 weight <span class="m">1</span> check check-ssl verify <span class="no">none</span> inter <span class="m">30</span>s fastinter <span class="m">2</span>s downinter <span class="m">5</span>s rise <span class="m">3</span> fall <span class="m">3</span>
<span class="err">...</span>
</code></pre></div></div>
<blockquote>
<p>Añadiremos las líneas <strong><em>timeout client 91s</em></strong> tanto en el bloque de frontend como en backend.</p>
</blockquote>
<p>Para acabar, una última optimización que me parece interesante es cambiar el modo de balanceo de “source” a “leastconn”, de esta manera, nos aseguraremos que HAProxy enviará la petición al connection server menos sobrecargado.</p>
<p>Con esta configuración, hay que asegurarnos que la persistencia del source esté habilitado para que un usuario no vaya cambiando de connection server tras una desconexión, ya que eso le obligaría a iniciar sesión de nuevo. En HAProxy, podemos crear una tabla IP y decirle que mantenga las conexiones como “fijas” según la dirección IP.</p>
<p>Al configurar esta tabla, se debe especificar un timeout que se recomienda sea 1/3 de la configuración que tengamos en el Horizon Administrator. En mi caso, lo tengo configurado a 600 minutos, por lo tanto, 200 en la config de HAProxy.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2021/12/cs-disabled-07.png" alt="cs-disabled-07" class="align-center" /></p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">...</span>
<span class="k">frontend</span> horizon-https
<span class="k">mode</span> tcp
<span class="k">bind</span> <span class="m">192</span>.168.6.123:443
<span class="k">timeout</span> server <span class="m">91</span>s
<span class="k">default</span>_backend horizon
<span class="k">backend</span> horizon
<span class="k">mode</span> tcp
<span class="k">option</span> ssl-hello-chk
<span class="k">balance</span> leastconn
<span class="k">stick</span>-table type ip size <span class="m">1</span>m expire <span class="m">200</span>m
<span class="k">stick</span> on src
<span class="k">option</span> httpchk HEAD /favicon.ico
<span class="k">timeout</span> server <span class="m">91</span>s
<span class="k">server</span> Horizon_Connection_Server_01 <span class="m">192</span>.168.6.113:443 weight <span class="m">1</span> check check-ssl verify <span class="no">none</span> inter <span class="m">30</span>s fastinter <span class="m">2</span>s downinter <span class="m">5</span>s rise <span class="m">3</span> fall <span class="m">3</span>
<span class="k">server</span> Horizon_Connection_Server_02 <span class="m">192</span>.168.6.114:443 weight <span class="m">1</span> check check-ssl verify <span class="no">none</span> inter <span class="m">30</span>s fastinter <span class="m">2</span>s downinter <span class="m">5</span>s rise <span class="m">3</span> fall <span class="m">3</span>
<span class="err">...</span>
</code></pre></div></div>
<blockquote>
<p>Añadiremos las líneas <strong><em>tbalance leastconn</em></strong>, <strong><em>stick-table type ip size 1m expire 200m</em></strong> y <strong><em>stick on src</em></strong></p>
</blockquote>
<p>Cómo resumen final, el bloque de nuestros connection servers en la configuración del HAProxy debería quedar similar a esto:</p>
<div class="language-ssh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#### Horizon Connection servers ###</span>
<span class="k">frontend</span> horizon-http
<span class="k">mode</span> http
<span class="k">bind</span> <span class="m">192</span>.168.6.123:80
<span class="c1"># Redirect http to https</span>
<span class="k">redirect</span> scheme https if !<span class="err">{</span> ssl_fc <span class="err">}</span>
<span class="k">frontend</span> horizon-https
<span class="k">mode</span> tcp
<span class="k">bind</span> <span class="m">192</span>.168.6.123:443
<span class="k">timeout</span> server <span class="m">91</span>s
<span class="k">default</span>_backend horizon
<span class="k">backend</span> horizon
<span class="k">mode</span> tcp
<span class="k">option</span> ssl-hello-chk
<span class="k">balance</span> leastconn
<span class="k">stick</span>-table type ip size <span class="m">1</span>m expire <span class="m">200</span>m
<span class="k">stick</span> on src
<span class="k">option</span> httpchk HEAD /favicon.ico
<span class="k">timeout</span> server <span class="m">91</span>s
<span class="k">server</span> Horizon_Connection_Server_01 <span class="m">192</span>.168.6.113:443 weight <span class="m">1</span> check check-ssl verify <span class="no">none</span> inter <span class="m">30</span>s fastinter <span class="m">2</span>s downinter <span class="m">5</span>s rise <span class="m">3</span> fall <span class="m">3</span>
<span class="k">server</span> Horizon_Connection_Server_02 <span class="m">192</span>.168.6.114:443 weight <span class="m">1</span> check check-ssl verify <span class="no">none</span> inter <span class="m">30</span>s fastinter <span class="m">2</span>s downinter <span class="m">5</span>s rise <span class="m">3</span> fall <span class="m">3</span>
</code></pre></div></div>
<p>Y hasta aquí el post de hoy.</p>
<p>Espero sea de utilidad.</p>
<p>Un saludo!</p>
<p>Miquel.</p>Miquel MarianoTiempo atrás escribí una entrada en la que hablaba sobre balancear nuestros servicios de Horizon Connection Server y App Volumes con HAProxy y Keepalived sobre una VM Photon OS.Consideraciones sobre el disco de arranque en ESXi 7.x2021-11-18T00:00:00+00:002021-11-18T00:00:00+00:00https://miquelmariano.github.io/2021/11/18/consideraciones-boot-esxi-7<p>En las últimas semanas, han sido varios los usuarios que han reportado en diferentes foros y RRSS errores con las SD y/o USB de arranque al actualizar a vSphere 7.0</p>
<p>En este post vamos a repasar que dice VMware en su guía técnica y las recomendaciones que hace al respecto para poder mitigarlo.</p>
<p>Los dispositivos USB o tarjetas SD han sido utilizadas históricamente para instalar nuestro ESXi y así poder prescindir de discos/controladora en nuestros servidores.
El problema de estos dispositivos es que tienen menos resistencia que un disco tradicional y además pueden presentar problemas de rendimiento a la hora de exigirles una alta frecuencia de IOPS. Ahora, con ESXi 7.x estamos siendo testigos de estos problemas con el arranque con mayor frecuencia que en versiones anteriores.</p>
<p>Antes de profundizar en detalles, es importante comprender el nuevo diseño del sistema de arranque en ESXi 7.x. En versiones anteriores, los tamaños de particiones eran fijos y el número de partición estático. Eso provocaba algunas limitaciones en el uso de otras soluciones cómo NSX-T, vSAN, Tanzu, etc etc lo que restringía la compatibilidad con la instalación de módulos grandes por ejemplo.</p>
<p>De cara a esta necesidad para que los ESXi sean compatibles con otras soluciones de VMware o de terceros es necesario disponer de dispositivos más robustos, flexibles y de alto rendimiento.</p>
<p>Con la nueva arquitectura de particiones en vSphere 7.0, solo la partición de arranque del sistema es de tamaño fijo. El resto de particiones son dinámicas, por lo que el tamaño se determinará en función del tamaño del dispositivo de arranque.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2021/11/boot-media-1.png" alt="boot-media-1" class="align-center" /></p>
<p>Otro cambio significativo es la partición ESX-OSDATA. Todas las particiones que no son de arranque, como el coredump, locker, scratch ahora se incluyen en esta partición (VMFS-L)</p>
<p>Esta partición debe de crearse en un dispositivo persistente de alta resistencia, ya que el número de IOPS al ESX-OSDATA se ha incrementado notablemente debido a múltiples factores:</p>
<ul>
<li>
<p>Mayor número de peticiones de health check del estado del dispositivo</p>
</li>
<li>
<p>Scripts programados para hacer backups del estado del sistema y timestamp también contribuyen al aumento de IOPS</p>
</li>
<li>
<p>Otras funciones que almacenan el estado de la configuración en el ESX-OSData</p>
</li>
</ul>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2021/11/boot-media-2.png" alt="boot-media-2" class="align-center" /></p>
<h2 id="posibles-problemas-con-esxi-7-con-tarjetas-sd-o-dispositivos-usb">Posibles problemas con ESXi 7 con tarjetas SD o dispositivos USB</h2>
<ol>
<li>
<p>Posible corrupción de la partición VMFS-L (ESX-OSDATA)
Los dispositivos de baja resistencia como tarjetas SD o USB se descastan/rompen rápidamente debido a la alta frecuencia de IOPS. La razón más común son las operaciones de lectura en los archivos VMTools a los que acceden las VMs. Una forma de mitigar esto es descargar estas operaciones en el disco RAM lo que reduce significativamente las IOPS enviadas a las SD o USB. or el momento, la solución está en mover las VMTools a RAMDisk habiliando la opción ToolsRamDisk de forma manual » <a href="https://kb.vmware.com/s/article/83376">KB83376</a></p>
</li>
<li>
<p>“/bootbank” missing
Las tarjetas SD o dispositivos USB suelen tener gran latencia, lo que genera grandes colas en la pila de almacenamiento y el consiguiente timeout. » <a href="https://kb.vmware.com/s/article/83963">KB83963</a></p>
</li>
</ol>
<h2 id="plan-para-remediar-el-uso-de-tarjetas-sd-o-unidades-usb-como-medio-de-arranque">Plan para remediar el uso de tarjetas SD o unidades USB como medio de arranque</h2>
<h3 id="limitaciones">Limitaciones:</h3>
<ol>
<li>
<p>El uso de tarjetas SD o unidades USB sin ningún dispositivo adicional para la partición ESX-OSDATA está obsoleto en vSphere 7 Update 3 y no será compatible en futuras versiones</p>
</li>
<li>
<p>En las próximas versiones, la única configuración admitida con SD o USB será con unidades de 8Gb + un dispositivo de almacenamiento persistente conectado localmente para la partición ESX-OSDATA.</p>
</li>
<li>
<p>En cualquier caso, si se utiliza finalmente SD o USB como medio de arranque, hay que seguir estas instrucciones para reducir la cantidad de IOPS enviadas:</p>
</li>
</ol>
<p><a href="https://kb.vmware.com/s/article/83376">Habilitar ToolsRamDisk</a>
<a href="https://kb.vmware.com/s/article/1033696">Configurar /scratch en almacenamiento persistente</a>
<a href="https://docs.vmware.com/en/VMware-vSphere/6.5/com.vmware.vsphere.install.doc/GUID-85D78165-E590-42CF-80AC-E78CBA307232.html">Configurar ESXi Dump Collector</a></p>
<ol>
<li>
<p>Asegurarse de que nuestros ESXi están actualizados a la versión vSphere 7.0 U2c o superior para evitar el error <a href="https://kb.vmware.com/s/article/83963">“/bootbank” missing</a></p>
</li>
<li>
<p>Un dispositivo con tarjeta SD dual no es una solución en la que los clientes deban confiar</p>
</li>
<li>
<p>Si nuestro ESXi ya está actualizado a 7.x, podemos agregar un dispositivo de almacenamiento local y establecer AutoPartition = True. De esta manera, este almacenamiento se usará para la partición ESX-OSDATA » <a href="https://kb.vmware.com/s/article/77009">KB77009</a></p>
</li>
</ol>
<h2 id="consideraciones-sobre-el-arranque-de-esxi">Consideraciones sobre el arranque de ESXi.</h2>
<p>A día de hoy, la mejor opción es tener un dispositivo de almacenamiento persistente conectado localmente.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2021/11/boot-media-3.png" alt="boot-media-3" class="align-center" />
<img src="https://miquelMariano.github.io/assets/images/posts/2021/11/boot-media-4.png" alt="boot-media-4" class="align-center" /></p>
<h2 id="arranque-de-esxi-desde-un-almacenamiento-local-en-un-entorno-vsan">Arranque de ESXi desde un almacenamiento local en un entorno vSAN</h2>
<p>VMware no recomienda arrancar un ESXi desde la misma controladora de discos compartida por los discos de la vSAN. Los clientes pueden considerar la posibilidad de añadir una controladora adicional para gestionar el dispositivo de arranque.</p>
<h2 id="conclusión">Conclusión</h2>
<p>VMware se está distanciando del soporte de tarjetas SD y dispositivos USB como medios de arranque. La configuración del arranque solo con SD o USB está obsoleta con vSphere 7.0 U3. En futuras versiones, esta configuración no será admitida y se recomienda a los clientes que se migren completamente de tarjetas SD o unidades USB.</p>
<p>Si esta opción no es posible, hay que asegurarse de que la tarjeta SD o USB es de 8Gb y disponemos de un dispositivo de alta resistencia conectado localmente para alojar la partición ESX-OSDATA</p>
<p>Y como nota final, recordar que si estamos en esta situación, deberemos actualizar a la versión 7.0 U2c o superior, ya que contiene correcciones para algunos de los problemas anteriormente descritos.</p>
<p>Espero que os guste.</p>
<p>Un saludo!</p>
<p>Miquel.</p>
<p>P.D. Podeis leer la nota oficial, <a href="https://blogs.vmware.com/vsphere/2021/09/esxi-7-boot-media-consideration-vmware-technical-guidance.html">aquí</a></p>Miquel MarianoEn las últimas semanas, han sido varios los usuarios que han reportado en diferentes foros y RRSS errores con las SD y/o USB de arranque al actualizar a vSphere 7.0Back-to-basics 11 - Comprobar el disco de arranque o boot en nuestros servidores ESXi2021-10-13T00:00:00+00:002021-10-13T00:00:00+00:00https://miquelmariano.github.io/2021/10/13/back-to-basics-11-comprobar-disco-boot-esxi<p>En el dia de hoy os traigo un pequeño manual para comprobar cual es el disco de arranque de nuestros servidores ESXi.</p>
<p><img src="https://miquelMariano.github.io/assets/images/posts/2021/10/esxi-boot.png" alt="esxi-boot" class="align-center" /></p>
<p>Este post, forma parte de la serie <a href="https://miquelmariano.github.io/tag/#/backtobasics">back to basics</a>, que hacia tiempo que no actualizaba ;-)</p>
<h1 id="1-habilitamos-el-servicio-ssh-en-nuestro-servidor-esxi">1. Habilitamos el servicio SSH en nuestro servidor ESXi</h1>
<h1 id="2-hacemos-login-a-nuestro-ssh-utilizando-un-usuario-con-privilegios-de-root">2. Hacemos login a nuestro SSH utilizando un usuario con privilegios de root</h1>
<h1 id="3-ejecutamos-el-siguiente-comando-para-ver-el-volumen-de-arranque">3. Ejecutamos el siguiente comando para ver el volumen de arranque</h1>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#ls -l /bootbank | awk -F"-> " '{print $2}'
</code></pre></div></div>
<p>Deberiamos tener una salida similar a esta:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[root@esxi01:~] ls -l /bootbank | awk -F"-> " '{print $2}'
/vmfs/volumes/50705ae3-b08ce25f-a1b8-bc56258253ad
</code></pre></div></div>
<h1 id="4-copiamos-el-volumen-vmfs-y-ejecutamos-el-siguiente-comando-para-obtener-mas-detalle">4. Copiamos el volumen vmfs y ejecutamos el siguiente comando para obtener mas detalle</h1>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#vmkfstools -P vmfsVolumeID
</code></pre></div></div>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[root@esxi01:~] vmkfstools -P /vmfs/volumes/50705ae3-b08ce25f-a1b8-bc56258253ad
vfat-0.04 (Raw Major Version: 0) file system spanning 1 partitions.
File system label (if any):
Mode: private
Capacity 261853184 (63929 file blocks * 4096), 90677248 (22138 blocks) avail, max supported file size 0
UUID: 50705ae3-b08ce25f-a1b8-bc56258253ad
Partitions spanned (on "disks"):
eui.00a0504658335330:5
Is Native Snapshot Capable: NO
</code></pre></div></div>
<h1 id="5-con-la-salida-del-comando-anterior-copiamos-el-uuid-del-disco-y-ejecutemos-el-siguiente-comando">5. Con la salida del comando anterior, copiamos el UUID del disco y ejecutemos el siguiente comando</h1>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#esxcli storage core device list | grep -A27 deviceID
</code></pre></div></div>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[root@esxi01:~] esxcli storage core device list | grep -A27 eui.00a0504658335330
eui.00a0504658335330
Display Name: Local USB Direct-Access (eui.00a0504658335330)
Has Settable Display Name: false
Size: 30436
Device Type: Direct-Access
Multipath Plugin: NMP
Devfs Path: /vmfs/devices/disks/eui.00a0504658335330
Vendor: Cypress
Model: SDRAID
Revision: 0000
SCSI Level: 2
Is Pseudo: false
Status: on
Is RDM Capable: false
Is Local: true
Is Removable: true
Is SSD: false
Is VVOL PE: false
Is Offline: false
Is Perennially Reserved: false
Queue Full Sample Size: 0
Queue Full Threshold: 0
Thin Provisioning Status: unknown
Attached Filters:
VAAI Status: unsupported
Other UIDs: vml.0000000000766d68626133323a303a30
Is Shared Clusterwide: false
Is Local SAS Device: false
Is SAS: false
Is USB: true
Is Boot USB Device: true
Is Boot Device: true
Device Max Queue Depth: 1
No of outstanding IOs with competing worlds: 32
</code></pre></div></div>
<p>En este ejemplo, podemos ver que el disco de arranque de nuestro ESXi es un disco USB.</p>
<p>Espero que os guste ;-)</p>
<p>Saludos!</p>
<p>Miquel.</p>Miquel MarianoEn el dia de hoy os traigo un pequeño manual para comprobar cual es el disco de arranque de nuestros servidores ESXi.