Поделиться через


Оптимизация виртуальной машины Linux в Azure

Создание виртуальной машины Linux легко сделать из командной строки или на портале. В этом руководстве показано, как настроить его для оптимизации производительности на платформе Microsoft Azure. В этом разделе используется виртуальная машина Ubuntu Server, но вы также можете создать виртуальную машину Linux, используя ваши собственные образы в качестве шаблонов.

Предпосылки

В этом разделе предполагается, что у вас уже есть рабочая подписка на Azure (бесплатная пробная регистрация) и виртуальная машина уже подготовлена в вашей подписке на Azure. Убедитесь, что у вас установлена последняя версия Azure CLI, и выполните вход в подписку Azure с помощью az login, прежде чем создать виртуальную машину.

Диск ОС Azure

После создания виртуальной машины Linux в Azure он имеет два диска, связанных с ним. /dev/sda — это диск ОС, /dev/sdb — это временный диск. Не используйте основной диск ОС (/dev/sda) для всех, кроме операционной системы, так как она оптимизирована для быстрой загрузки виртуальной машины и не обеспечивает хорошую производительность для рабочих нагрузок. Вы хотите подключить один или несколько дисков к виртуальной машине, чтобы получить постоянное и оптимизированное хранилище для данных.

Добавление дисков для оптимизации размера и производительности

В зависимости от размера виртуальной машины можно подключить до 16 дополнительных дисков на 32 дисках серии A, 32 дисках серии D и 64 дисках на компьютере серии G — каждый размером до 32 ТБ. Вы добавляете дополнительные диски по мере необходимости в соответствии с требованиями к пространству и IOps. Каждый диск имеет целевой показатель производительности 500 операций ввода-вывода для хранилища уровня "Стандартный" и до 20 000 операций ввода-вывода на диск для хранилища Класса Premium.

Чтобы обеспечить максимальный уровень IOps на дисках хранилища класса Premium, для которых настроены параметры кэша, ReadOnly или None, необходимо отключить барьеры при монтировании файловой системы в Linux. Вам не нужны барьеры, так как записи в резервные диски хранилища класса Premium устойчивы для этих параметров кэша.

  • Если вы используете reiserFS, отключите барьеры с помощью параметра подключения barrier=none (для включения барьеров используйте barrier=flush)
  • Если вы используете ext3/ext4, отключите барьеры с помощью параметра подключения barrier=0 (для включения барьеров используйте barrier=1)
  • Если вы используете XFS, отключите барьеры с помощью параметра подключения nobarrier (для включения барьеров используйте параметр barrier)

Соображения по неуправляемым учетным записям хранения

Действие по умолчанию при создании виртуальной машины с помощью Azure CLI — использовать управляемые диски Azure. Эти диски обрабатываются платформой Azure и не требуют никакой подготовки или расположения для их хранения. Неуправляемые диски требуют учетной записи хранения и имеют некоторые дополнительные соображения по производительности. Дополнительные сведения об управляемых дисках см. в обзоре управляемых дисков Azure. В следующем разделе описываются рекомендации по производительности только при использовании неуправляемых дисков. Как и прежде, решение по умолчанию и рекомендуемое решение для хранения данных — использование управляемых дисков.

Если вы создаете виртуальную машину с неуправляемыми дисками, убедитесь, что вы подключаете диски из учетных записей хранения, расположенных в том же регионе, что и виртуальная машина, чтобы обеспечить близкое расположение и свести к минимуму задержку в сети. Каждая учетная запись хранения уровня "Стандартный" имеет максимум 20 тысяч операций ввода-вывода и емкость размером 500 ТБ. Это ограничение работает примерно до 40 часто используемых дисков, включая диск ОС и все создаваемые диски данных. Для учетных записей хранения уровня "Премиум" нет максимального ограничения для IOps, но существует ограничение на размер в 32 ТБ.

При работе с высокими рабочими нагрузками IOps и выбранным хранилищем уровня "Стандартный" для дисков может потребоваться разделить диски между несколькими учетными записями хранения, чтобы убедиться, что вы не достигли предела 20 000 операций ввода-вывода для учетных записей хранения уровня "Стандартный". Виртуальная машина может содержать набор дисков из разных учетных записей хранения и типов учетных записей хранения для достижения оптимальной конфигурации.

Временный диск виртуальной машины (ВМ)

По умолчанию при создании виртуальной машины Azure предоставляет диск ОС (/dev/sda) и временный диск (/dev/sdb). Все дополнительные диски, которые вы добавляете, отображаются как /dev/sdc, /dev/sdd, /dev/sde и т. д. Все данные на временном диске (/dev/sdb) не являются устойчивыми и могут быть потеряны, если определенные события, такие как изменение размера виртуальной машины, повторное развертывание или обслуживание, приводит к перезапуску виртуальной машины. Размер и тип временного диска связан с размером виртуальной машины, выбранной во время развертывания. Все виртуальные машины уровня "Премиум" (серии DS, G и DS_V2) используют временные диски, работающие на базе локального SSD, для дополнительной производительности до 48 тыс. операций ввода-вывода в секунду (IOps).

Раздел подкачки Linux

Если виртуальная машина Azure создана из образа Ubuntu или CoreOS, вы можете использовать CustomData для отправки cloud-config в cloud-init. Если вы загрузили пользовательский образ Linux, использующий cloud-init, вы также настраиваете разделы подкачки с помощью cloud-init.

Вы не можете использовать файл /etc/waagent.conf для управления подкачкой для всех образов, подготовленных и поддерживаемых cloud-init. Полный список изображений см. в разделе Using cloud-init.

Самый простой способ управлять swap для этих файловых образов — выполнить следующую процедуру:

  1. В папке /var/lib/cloud/scripts/per-boot создайте файл с именем create_swapfile.sh:

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

  2. Добавьте в файл следующие строки:

    $ 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
    

    Примечание.

    Значение можно изменить в соответствии с вашими нуждами и на основе доступного места на диске ресурса, которое зависит от используемого размера виртуальной машины.

  3. Сделайте исполняемый файл:

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

  4. Чтобы создать файл подкачки, выполните скрипт непосредственно после завершения последнего этапа.

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

Для образов без поддержки cloud-init, в виртуальных машинах, развернутых из Azure Marketplace, с операционной системой интегрирован агент Linux. Этот агент позволяет виртуальной машине взаимодействовать с различными службами Azure. Если вы развернули стандартный образ из Azure Marketplace, вам потребуется выполнить следующие действия, чтобы корректно настроить параметры файлов подкачки Linux:

Найдите и измените две записи в файле /etc/waagent.conf. Они контролируют наличие выделенного файла подкачки и размер этого файла. Параметры, необходимые для проверки, являются ResourceDisk.EnableSwap и ResourceDisk.SwapSizeMB

Чтобы включить правильно включенный диск и подключенный файл буфера, убедитесь, что параметры имеют следующие параметры:

  • ResourceDisk.EnableSwap=Y
  • ResourceDisk.SwapSizeMB={размер в МБ в соответствии с вашими потребностями}

После внесения изменений необходимо перезапустить waagent или перезапустить виртуальную машину Linux, чтобы отразить эти изменения. Вы поймёте, что изменения были внесены, и файл подкачки создан, если вы используете команду free для просмотра свободного места. В следующем примере есть файл буфера 512 МБ, созданный в результате изменения файла 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

Алгоритм планирования операций ввода-вывода для хранилища класса Premium

При использовании ядра Linux 2.6.18 алгоритм планирования операций ввода-вывода по умолчанию был изменен с "Крайний срок" на CFQ (полностью справедливый алгоритм очереди). Для шаблонов операций ввода-вывода случайного доступа наблюдается незначительное различие в производительности между CFQ и Deadline. Для дисков на основе SSD, в которых шаблон ввода-вывода диска является преимущественно последовательным, переключение на алгоритм NOOP или Deadline может повысить производительность ввода-вывода.

Просмотр текущего планировщика ввода-вывода

Используйте следующую команду:

cat /sys/block/sda/queue/scheduler

Вы увидите следующие выходные данные, указывающие текущий планировщик.

noop [deadline] cfq

Изменение текущего устройства (/dev/sda) алгоритма планирования операций ввода-вывода

Используйте следующие команды:

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

Примечание.

Применение этого параметра для /dev/sda само по себе не имеет смысла. Установите на всех дисках данных, где последовательный ввод-вывод доминирует в шаблоне ввода-вывода.

Вы увидите следующие выходные данные, указывающие на то, что grub.cfg успешно пересобран и что планировщик по умолчанию изменен на 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

Для семейства дистрибутивов Red Hat вам потребуется только следующая команда:

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

Ubuntu 18.04 с ядром, оптимизированным для Azure, использует многопоточные планировщики ввода-вывода. В этом сценарии none — это соответствующий выбор вместо noop. Для получения дополнительной информации, см. планировщики ввода-вывода Ubuntu .

Использование RAID программного обеспечения для достижения более высокого уровня операций ввода-вывода

Если для рабочих нагрузок требуется больше операций ввода-вывода, чем один диск, необходимо использовать конфигурацию программного RAID нескольких дисков. Поскольку Azure уже обеспечивает устойчивость дисков на локальном уровне инфраструктуры, вы достигаете наивысшего уровня производительности от конфигурации с разделением по полосам RAID-0. Подготовьте и создайте диски в среде Azure и подключите их к виртуальной машине Linux перед секционированием, форматированием и подключением дисков. Дополнительные сведения о настройке программного RAID-массива на виртуальной машине Linux в Azure см. в документе Настройка программного RAID на Linux.

В качестве альтернативы традиционной конфигурации RAID можно также установить диспетчер логических томов (LVM), чтобы настроить ряд физических дисков в одном томе логического хранилища. В этой конфигурации операции чтения и записи распределяются по нескольким дискам, содержащимся в группе томов (аналогично RAID0). По соображениям производительности, скорее всего, потребуется разбивать логические тома, чтобы операции чтения и записи использовали все подключенные диски данных. Дополнительные сведения о настройке разделённого на полосы логического тома на виртуальной машине Linux в Azure см. в документе Настройка LVM на виртуальной машине Linux в Azure.

Дальнейшие шаги

Помните, что, как и во всех обсуждениях оптимизации, необходимо выполнить тесты до и после каждого изменения, чтобы оценить влияние изменения. Оптимизация — это пошаговый процесс, который имеет разные результаты на разных компьютерах в вашей среде. То, что работает для одной конфигурации, может не работать для других пользователей.

Некоторые полезные ссылки на дополнительные ресурсы: