Compartir a través de


Optimización de la máquina virtual Linux en Azure

La creación de una máquina virtual Linux es fácil de hacer desde la línea de comandos o desde el portal. En este tutorial se muestra cómo asegurarse de que la ha configurado para optimizar su rendimiento en la plataforma de Microsoft Azure. En este tema se usa una máquina virtual Ubuntu Server, pero también puede crear una máquina virtual Linux con sus propias imágenes como plantillas.

Prerrequisitos

En este tema se supone que ya tiene una suscripción de Azure en funcionamiento (suscripción de evaluación gratuita) y que ya ha aprovisionado una máquina virtual en su suscripción de Azure. Asegúrese de que tiene instalada y iniciada la sesión más reciente de la CLI de Azure con az login antes de crear una máquina virtual.

Disco del sistema operativo de Azure

Una vez creada una máquina virtual Linux en Azure, tiene dos discos asociados. /dev/sda es el disco del sistema operativo, /dev/sdb es el disco temporal. No use el disco del sistema operativo principal (/dev/sda) para nada excepto el sistema operativo, ya que está optimizado para el tiempo de arranque rápido de la máquina virtual y no proporciona un buen rendimiento para las cargas de trabajo. Quiere conectar uno o varios discos a la máquina virtual para obtener almacenamiento persistente y optimizado para los datos.

Adición de discos para objetivos de tamaño y rendimiento

En función del tamaño de la máquina virtual, puede conectar hasta 16 discos adicionales en una serie A, 32 discos de una serie D y 64 discos de una máquina de la serie G, cada uno de ellos de hasta 32 TB de tamaño. Agregue discos adicionales según sea necesario según sus requisitos de espacio e IOps. Cada disco tiene un objetivo de rendimiento de 500 IOps para Almacenamiento Estándar y hasta 20 000 IOps por disco para Almacenamiento Premium.

Para lograr las IOps más altas en los discos de Premium Storage en los que se ha establecido su configuración de caché en ReadOnly o None, debe deshabilitar las barreras al montar el sistema de archivos en Linux. No necesita barreras porque las escrituras en discos respaldados por Premium Storage son duraderas para esta configuración de caché.

  • Si usa reiserFS, deshabilite las barreras mediante la opción barrier=none de montaje (para habilitar barreras, use barrier=flush)
  • Si usa ext3/ext4, deshabilite las barreras mediante la opción barrier=0 de montaje (para habilitar barreras, use barrier=1)
  • Si usa XFS, deshabilite las barreras mediante la opción nobarrier de montaje (para habilitar barreras, use la opción barrier).

Consideraciones sobre cuentas de almacenamiento no administradas

La acción predeterminada al crear una máquina virtual con la CLI de Azure es usar Azure Managed Disks. Estos discos se controlan mediante la plataforma Azure y no requieren ninguna preparación ni ubicación para almacenarlos. Los discos no administrados requieren una cuenta de almacenamiento y tienen algunas consideraciones de rendimiento adicionales. Para más información sobre los discos administrados, consulte Introducción a Azure Managed Disks. En la sección siguiente se describen las consideraciones de rendimiento solo cuando se usan discos no administrados. De nuevo, la solución de almacenamiento predeterminada y recomendada es usar discos administrados.

Si crea una máquina virtual con discos no administrados, asegúrese de conectar discos de cuentas de almacenamiento que residen en la misma región que la máquina virtual para garantizar la proximidad y minimizar la latencia de red. Cada cuenta de almacenamiento estándar tiene un máximo de 20 000 IOps y una capacidad de tamaño de 500 TB. Este límite equivale a aproximadamente 40 discos muy utilizados, incluidos tanto el disco del sistema operativo como cualquier disco de datos que cree. En el caso de las cuentas de Premium Storage, no hay ningún límite máximo de IOps, pero hay un límite de tamaño de 32 TB.

Al trabajar con cargas de trabajo de IOps elevadas y ha elegido Standard Storage para los discos, es posible que tenga que dividir los discos en varias cuentas de almacenamiento para asegurarse de que no ha alcanzado el límite de 20 000 IOps para las cuentas de Standard Storage. La máquina virtual puede contener una combinación de discos de diferentes cuentas de almacenamiento y tipos de cuentas de almacenamiento para lograr la configuración óptima.

La unidad de disco temporal de la máquina virtual

De forma predeterminada, cuando se crea una máquina virtual, Azure proporciona un disco del sistema operativo (/dev/sda) y un disco temporal (/dev/sdb). Todos los discos adicionales que agregue se muestran como /dev/sdc, /dev/sdd, /dev/sde , etc. Todos los datos del disco temporal (/dev/sdb) no son duraderos y se pueden perder si determinados eventos como el cambio de tamaño, la reimplementación o el mantenimiento de máquinas virtuales fuerzan un reinicio de la máquina virtual. El tamaño y el tipo de disco temporal están relacionados con el tamaño de máquina virtual que eligió en el momento de la implementación. Todas las máquinas virtuales de tamaño premium (series DS, G y DS_V2) tienen la unidad temporal respaldada por una SSD local para un rendimiento adicional de hasta 48 000 IOPS.

Partición de intercambio de Linux

Si la máquina virtual de Azure procede de una imagen de Ubuntu o CoreOS, puede usar CustomData para enviar una configuración de nube a cloud-init. Si ha cargado una imagen personalizada de Linux que utiliza cloud-init, también puede configurar particiones de intercambio con cloud-init.

No puede usar el archivo /etc/waagent.conf para gestionar el swap de todas las imágenes que son aprovisionadas y soportadas por cloud-init. Para obtener la lista completa de imágenes, consulte Uso de cloud-init.

La manera más fácil de administrar el intercambio de estas imágenes es completar estos pasos:

  1. En la carpeta /var/lib/cloud/scripts/per-boot , cree un archivo denominado create_swapfile.sh:

    $ sudo touch /var/lib/cloud/scripts/per-boot/create_swapfile.sh

  2. Agregue las líneas siguientes al archivo:

    $ sudo vi /var/lib/cloud/scripts/per-boot/create_swapfile.sh

    #!/bin/sh
    if [ ! -f '/mnt/swapfile' ]; then
    fallocate --length 2GiB /mnt/swapfile
    chmod 600 /mnt/swapfile
    mkswap /mnt/swapfile
    swapon /mnt/swapfile
    swapon -a ; fi
    

    Nota:

    Puede cambiar el valor según su necesidad y en función del espacio disponible en el disco de recursos, que varía en función del tamaño de la máquina virtual que se use.

  3. Convierta el archivo ejecutable:

    $ sudo chmod +x /var/lib/cloud/scripts/per-boot/create_swapfile.sh

  4. Para crear el archivo de intercambio, ejecute el script justo después del último paso:

    $ sudo /var/lib/cloud/scripts/per-boot/./create_swapfile.sh

En el caso de las imágenes sin compatibilidad con cloud-init, las imágenes de máquina virtual implementadas desde Azure Marketplace tienen un agente Linux de máquina virtual integrado con el sistema operativo. Este agente permite que la máquina virtual interactúe con varios servicios de Azure. Suponiendo que ha implementado una imagen estándar desde Azure Marketplace, tendría que hacer lo siguiente para configurar correctamente los valores del archivo de intercambio de Linux:

Busque y modifique dos entradas en el archivo /etc/waagent.conf . Controlan la existencia de un archivo de intercambio dedicado y el tamaño del archivo de intercambio. Los parámetros que debe comprobar son ResourceDisk.EnableSwap y ResourceDisk.SwapSizeMB

Para habilitar un disco habilitado correctamente y un archivo de intercambio montado, asegúrese de que los parámetros tienen la siguiente configuración:

  • ResourceDisk.EnableSwap=Y
  • ResourceDisk.SwapSizeMB={tamaño en MB que se ajuste a sus necesidades}

Una vez realizado el cambio, debe reiniciar waagent o reiniciar la máquina virtual Linux para reflejar esos cambios. Se sabe que los cambios se han implementado y se ha creado un archivo de intercambio cuando usas el comando free para ver el espacio libre. En el ejemplo siguiente se crea un archivo de intercambio de 512 MB como resultado de modificar el archivo waagent.conf :

azuseruser@myVM:~$ free
            total       used       free     shared    buffers     cached
Mem:       3525156     804168    2720988        408       8428     633192
-/+ buffers/cache:     162548    3362608
Swap:       524284          0     524284

Algoritmo de programación de E/S para Premium Storage

Con el kernel de Linux 2.6.18, el algoritmo de programación de E/S predeterminado se cambió de Deadline a CFQ (algoritmo de planificación de colas completamente justo). En el caso de los patrones de E/S de acceso aleatorio, hay una diferencia insignificante en las diferencias de rendimiento entre CFQ y Deadline. En el caso de los discos basados en SSD en los que el patrón de E/S de disco es principalmente secuencial, la conmutación al algoritmo NOOP o Deadline puede lograr un mejor rendimiento de E/S.

Visualización del programador de E/S actual

Use el siguiente comando:

cat /sys/block/sda/queue/scheduler

Usted verá la siguiente salida, que indica el programador actual.

noop [deadline] cfq

Cambiar el dispositivo actual (/dev/sda) del algoritmo de programación de E/S

Usa los comandos siguientes:

azureuser@myVM:~$ sudo su -
root@myVM:~# echo "noop" >/sys/block/sda/queue/scheduler
root@myVM:~# sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"/g' /etc/default/grub
root@myVM:~# update-grub

Nota:

Aplicar esta configuración solo a /dev/sda no es útil. Establezca en todos los discos de datos en los que la E/S secuencial domina el patrón de E/S.

Debería ver la siguiente salida, que indica que grub.cfg se ha recompilado correctamente y que el programador predeterminado se ha actualizado a NOOP.

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.13.0-34-generic
Found initrd image: /boot/initrd.img-3.13.0-34-generic
Found linux image: /boot/vmlinuz-3.13.0-32-generic
Found initrd image: /boot/initrd.img-3.13.0-32-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
done

Para la familia de distribución de Red Hat, solo necesita el siguiente comando:

echo 'echo noop >/sys/block/sda/queue/scheduler' >> /etc/rc.local

Ubuntu 18.04 con el kernel optimizado de Azure utiliza planificadores de E/S de varias colas. En ese escenario, none es la selección adecuada en lugar de noop. Para obtener más información, consulte Programadores de E/S de Ubuntu.

Uso de RAID de software para lograr mayores operaciones de E/S

Si las cargas de trabajo requieren más operaciones de entrada/salida por segundo (IOps) de las que puede proporcionar un solo disco, debe usar una configuración RAID de software con varios discos. Dado que Azure ya realiza resiliencia de disco en la capa de tejido local, se alcanza el mayor nivel de rendimiento con una configuración de franjeado RAID-0. Aprovisione y cree discos en el entorno de Azure y adjunte a la máquina virtual Linux antes de crear particiones, dar formato y montar las unidades. Puede encontrar más detalles sobre cómo configurar una instalación raid de software en la máquina virtual Linux en Azure en el documento Configuración de RAID de software en Linux .

Como alternativa a una configuración RAID tradicional, también puede optar por instalar El Administrador de volúmenes lógicos (LVM) para configurar una serie de discos físicos en un único volumen de almacenamiento lógico seccionado. En esta configuración, las lecturas y escrituras se distribuyen a varios discos contenidos en el grupo de volúmenes (similar a RAID0). Por motivos de rendimiento, es probable que quiera seccionar los volúmenes lógicos para que las lecturas y escrituras usen todos los discos de datos conectados. Puede encontrar más información sobre cómo configurar un volumen lógico seccionado en la máquina virtual Linux en Azure en el documento Configuración de LVM en una máquina virtual Linux en Azure .

Pasos siguientes

Recuerde que, al igual que con todos los debates de optimización, debe realizar pruebas antes y después de cada cambio para medir el impacto que tiene el cambio. La optimización es un proceso paso a paso que tiene resultados diferentes en diferentes máquinas del entorno. Lo que funciona para una configuración puede no funcionar para otros usuarios.

Algunos vínculos útiles a recursos adicionales: