ZFS como sistema de ficheros para almacenamiento en virtualización
Por infortunios de la vida, me vuelvo a encontrar temporalmente en labores de sistemas en lugar de programación. El reto en esta ocasión es mover una aplicación web bastante compleja a otro servidor más moderno y barato. Aprovechando este cambio, se va a actualizar el entorno de virtualización utilizado. Una de las dudas surgidas es el almacenamiento. En un entorno con alto presupuesto se montaría un SAN con Fibre Channel. Desafortunadamente, no es mi caso. La alternativa planteada es un simple servidor dedicado con mucho almacenamiento, accesible mediante NFS o iSCSI.Sistema de ficheros
Uno de los problemas pendientes de la aplicación son actualizaciones importantes de software. Tenemos un CouchDB, un RabbitMQ, entre otros, a los que no les vendría nada mal una nueva versión. Esto siempre implica un riesgo. Incluso después de comprobarlo en preproducción, pueden haber imprevistos en producción. El tiempo máximo disponible para arreglarlo sería bastante limitado, de un fin de semana. Otro inconventiente son los datos del cliente. A veces el usuario tiene un problema que no es fácilmente reproducible en preproducción, porque sólo se observa con sus datos. Copiar esta información de manera tradicional, con ssh, por ejemplo, no es para nada fácil porque la aplicación utiliza recursos variados como ficheros de vídeo, bases de datos, etc, que deben ser coherentes entre ellos. La manera clásica de resolver estos puntos son los backups. Otra posibilidad son los snapshots de vSphere. Sin embargo, estas opciones son muy lentas. En el caso de los snapshots de vSphere, además, se recomienda borrarlos lo antes posible porque la máquina pierde rendimiento:Do not use a single snapshot for more than 24-72 hours. The snapshot file continues to grow in size when it is retained for a longer period. This can cause the snapshot storage location to run out of space and impact the system performance.Investigando alguna solución encontré ZFS. Su característica copy-on-write le permite crear snapshots y clones muy eficientemente, además de backups incrementales. No se reduce el rendimiento al dejar snapshots acumulados, salvo que su número sea extraordinariamente elevado o se empiece a llenar el disco. Todas estas funcionalidades son tremendamente útiles como programador. Los fallos de despliegue serían fácilmente solucionables con zfs rollback, y los backups incrementales me permitirían replicar producción fácilmente. Existen herramientas como zfs-auto-snapshot para automatizar esta labor. FreeNAS puede programar snapshots y también tareas de replicación. El entorno de virtualización Proxmox dispone de pve-sync, disposible si se emplea almacenamiento local, que usa ZFS. Quizá el único inconveniente sea apagar las máquinas virtuales al crear y restaurar los snapshots, pero esto es normal. En vSphere, veeam puede hacer backup de máquinas en ejecución, pero requiere un proceso conocido como «quiescing«. Consiste en «congelar» el sistema de ficheros de la máquina virtual, que está por encima de ZFS, tanto si utilizamos NFS como iSCSI (donde además estaría VMFS entre medias). Esto requiere ciertas capacidades del SO del guest, junto con VMware Tools. Ver este enlace:
Quiesce: If the <quiesce>
flag is 1 or true, and the virtual machine is powered on when the snapshot is taken, VMware Tools is used to quiesce the file system in the virtual machine. Quiescing a file system is a process of bringing the on-disk data of a physical or virtual computer into a state suitable for backups. This process might include such operations as flushing dirty buffers from the operating system’s in-memory cache to disk, or other higher-level application-specific tasks.
En Windows, VMware tools usa Volume Shadow Copy Service (VSS). En Linux es el driver vmsync. Ver este otro enlace:
For virtual machines running Microsoft Windows, Volume Shadow Copy Service (VSS) inside the guest VM is used to quiesce the file system and applications. This ensures the data consistency of the file system and all VSS-supported applications. By default, VMware engages all VSS writers that are configured inside the guest. To exclude a writer, see Disabling specific VSS writers with VMware Tools (1031200). For VMs running Linux, the vmsync driver included with VMware tools is used to quiesce the file system and applications. The vmsync driver ensures that the file system is in a consistent state prior to the VMware snapshot being created. The vmsync driver is only supported with vSphere 5.0 and later.