Otimizar a VM do Linux no Azure
A criação de uma máquina virtual Linux (VM) é fácil de fazer a partir da linha de comando ou a partir do portal. Este tutorial mostra-lhe como garantir que o configura para otimizar o seu desempenho na plataforma Microsoft Azure. Este tópico utiliza um Ubuntu Server VM, mas também pode criar uma máquina virtual Linux usando as suas próprias imagens como modelos.
Pré-requisitos
Este tópico pressupõe que já tem uma subscrição Azure em funcionamento (inscrição gratuita de teste) e já adpôs um VM na sua subscrição Azure. Certifique-se de que tem o mais recente Azure CLI instalado e iniciado na sua subscrição Azure com login az antes de criar um VM.
Disco Azure OS
Uma vez que cria um Linux VM em Azure, tem dois discos associados a ele. /dev/sda é o seu disco SO, /dev/sdb é o seu disco temporário. Não utilize o disco principal de SO (/dev/sda) para nada, exceto o sistema operativo, uma vez que está otimizado para um tempo de arranque rápido em VM e não proporciona um bom desempenho para as suas cargas de trabalho. Pretende anexar um ou mais discos ao seu VM para obter um armazenamento persistente e otimizado para os seus dados.
Adicionar discos para alvos de tamanho e desempenho
Com base no tamanho de VM, pode anexar até 16 discos adicionais numa Série A, 32 discos numa Série D e 64 discos numa máquina da Série G - cada um com um tamanho até 32 TB. Adiciona discos extras conforme necessário para o seu espaço e requisitos de IOps. Cada disco tem um alvo de desempenho de 500 IOps para Armazenamento Standard e até 20.000 IOps por disco para Armazenamento Premium.
Para obter os IOps mais elevados em Armazenamento Premium discos onde as suas definições de cache foram definidas para ReadOnly ou None, deve desativar barreiras enquanto monta o sistema de ficheiros no Linux. Não precisa de barreiras porque as escritas para Armazenamento Premium discos apoiados são duráveis para estas definições de cache.
- Se utilizar o ReiserFS, desative as barreiras utilizando a opção
barrier=none
de montagem (Para ativar barreiras, utilize- sebarrier=flush
) - Se utilizar o ext3/ext4, desative as barreiras utilizando a opção
barrier=0
de montagem (Para ativar barreiras, utilize- sebarrier=1
) - Se utilizar o XFS, desative as barreiras utilizando a opção
nobarrier
de montagem (Para ativar barreiras, utilize a opçãobarrier
)
Considerações de conta de armazenamento não geridos
A ação predefinida quando se cria um VM com o CLI Azure é utilizar o Azure Managed Disks. Estes discos são manuseados pela plataforma Azure e não requerem qualquer preparação ou localização para os armazenar. Os discos não geridos requerem uma conta de armazenamento e têm algumas considerações adicionais de desempenho. Para mais informações sobre discos geridos, veja Managed Disks Overview (Descrição geral dos Managed Disks). A secção seguinte descreve considerações de desempenho apenas quando utiliza discos não geridos. Mais uma vez, a solução de armazenamento padrão e recomendada é a utilização de discos geridos.
Se criar um VM com discos não geridos, certifique-se de que anexa discos de contas de armazenamento que residem na mesma região que o seu VM para garantir a proximidade e minimizar a latência da rede. Cada conta de armazenamento Standard tem um máximo de 20k IOps e uma capacidade de tamanho de 500 TB. Este limite resulta em aproximadamente 40 discos fortemente utilizados, incluindo o disco SO e quaisquer discos de dados que crie. Para Armazenamento Premium contas, não existe limite máximo de IOps, mas existe um limite de tamanho de 32 TB.
Ao lidar com altas cargas de trabalho de IOps e tiver escolhido o Standard Armazenamento para os seus discos, poderá ter de dividir os discos em várias contas de armazenamento para se certificar de que não atingiu o limite de 20.000 IOps para as contas Standard Armazenamento. O seu VM pode conter uma mistura de discos de diferentes contas de armazenamento e tipos de conta de armazenamento para obter a sua configuração ideal.
A sua unidade temporária VM
Por padrão, quando cria um VM, o Azure fornece-lhe um disco DE (/dev/sda) e um disco temporário (/dev/sdb). Todos os discos adicionais que adicionar aparecem como /dev/sdc, /dev/sdd, /dev/sde e assim por diante. Todos os dados do seu disco temporário (/dev/sdb) não são duráveis, e podem ser perdidos se eventos específicos como redimensionamento, redistribuição ou manutenção de VM forçam o reinício do seu VM. O tamanho e o tipo do seu disco temporário estão relacionados com o tamanho VM que escolheu na hora de implantação. Todas as VMs de tamanho premium (DS, G e DS_V2 série) a unidade temporária é apoiada por um SSD local para um desempenho adicional de até 48k IOps.
Partição de troca de Linux
Se o seu Azure VM for de uma imagem Ubuntu ou CoreOS, então pode utilizar o CustomData para enviar um cloud-config para cloud-init. Se você carregou uma imagem linux personalizada que usa cloud-init, você também configurar divisórias de troca usando cloud-init.
Não é possível utilizar o ficheiro /etc/waagent.conf para gerir a troca de todas as imagens que são a provisionadas e suportadas por cloud-init. Para obter a lista completa de imagens, consulte 'Usar cloud-init'.
A forma mais fácil de gerir a troca por estas imagens é completar estes passos:
Na pasta /var/lib/cloud/scripts/por-boot , crie um ficheiro chamado create_swapfile.sh:
$ sudo touch /var/lib/cloud/scripts/per-boot/create_swapfile.sh
Adicione as seguintes linhas ao ficheiro:
$ sudo vi /var/lib/cloud/scripts/por-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
Pode alterar o valor de acordo com a sua necessidade e com base no espaço disponível no seu disco de recursos, que varia em função do tamanho VM que está a ser utilizado.
Tornar o ficheiro executável:
$ sudo chmod +x /var/lib/cloud/scripts/per-boot/create_swapfile.sh
Para criar o ficheiro de swap, execute o script logo após o último passo:
$ sudo /var/lib/cloud/scripts/per-boot/./create_swapfile.sh
Para imagens sem suporte de nuvem, as imagens VM implementadas a partir do Azure Marketplace têm um Agente VM Linux integrado com o SO. Este agente permite que o VM interaja com vários serviços Azure. Assumindo que implementou uma imagem padrão a partir do Azure Marketplace, teria de fazer o seguinte para configurar corretamente as definições do ficheiro de troca de Linux:
Localize e modifique duas entradas no ficheiro /etc/waagent.conf . Controlam a existência de um ficheiro de troca dedicado e o tamanho do ficheiro swap. Os parâmetros que precisa de verificar são ResourceDisk.EnableSwap
e ResourceDisk.SwapSizeMB
Para ativar um disco devidamente ativado e um ficheiro de troca montado, certifique-se de que os parâmetros têm as seguintes definições:
- ResourceDisk.EnableSwap=Y
- ResourceDisk.SwapSizeMB={size in MB para atender às suas necessidades}
Depois de ter feito a alteração, tem de reiniciar o waagent ou reiniciar o seu Linux VM para refletir essas alterações. Sabe que as alterações foram implementadas e foi criado um ficheiro de troca quando utiliza o comando para visualizar o free
espaço livre. O exemplo a seguir tem um ficheiro swap de 512MB criado como resultado da modificação do ficheiro 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 agendamento de I/O para Armazenamento Premium
Com o kernel 2.6.18 Linux, o algoritmo de agendamento de I/O padrão foi alterado de Deadline para CFQ (algoritmo de fila completamente justo). Para padrões de E/S de acesso aleatório, há uma diferença negligenciável nas diferenças de desempenho entre CFQ e Deadline. Para discos baseados em SSD onde o padrão de E/S do disco é predominantemente sequencial, voltar para o algoritmo NOOP ou Deadline pode alcançar um melhor desempenho de I/S.
Ver o atual programador de E/S
Utilize o seguinte comando:
cat /sys/block/sda/queue/scheduler
Vê a saída seguinte, o que indica o atual programador.
noop [deadline] cfq
Alterar o dispositivo atual (/dev/sda) do algoritmo de agendamento de I/O
Utilize os seguintes comandos:
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 definição para /dev/sda por si só não é útil. Definir em todos os discos de dados onde a E/S sequencial domina o padrão de E/S.
Deve ver a seguinte saída, indicando que a .cfg de comida foi reconstruída com sucesso e que o programador predefinido foi atualizado para 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 a família de distribuição do Chapéu Vermelho, só precisa do seguinte comando:
echo 'echo noop >/sys/block/sda/queue/scheduler' >> /etc/rc.local
Ubuntu 18.04 com o núcleo afinado Azure usa agendadores de I/S multi-fila. Nesse cenário, none
é a seleção adequada em vez de noop
. Para mais informações, consulte os Agendadores Ubuntu I/O.
Utilizar o Software RAID para atingir i/ops mais elevados
Se as suas cargas de trabalho requerem mais IOps do que um único disco pode fornecer, tem de utilizar uma configuração RAID de software de vários discos. Como o Azure já realiza a resiliência do disco na camada de tecido local, obtém-se o mais alto nível de desempenho a partir de uma configuração de striping RAID-0. Provisões e criar discos no ambiente Azure e fixe-os ao seu LM Linux antes de dividir, formatar e montar as unidades. Mais detalhes sobre a configuração de um RAID de software no seu Linux VM em azul podem ser encontrados no RAID de Software Configurado no documento Linux .
Como alternativa a uma configuração raid tradicional, também pode optar por instalar o Logical Volume Manager (LVM) de forma a configurar uma série de discos físicos num único volume de armazenamento lógico listrado. Nesta configuração, as leituras e as gravações são distribuídas por vários discos contidos no grupo de volume (semelhante ao RAID0). Por razões de desempenho, é provável que queira riscar os seus volumes lógicos para que as leituras e as escritas utilizem todos os seus discos de dados anexados. Mais detalhes sobre a configuração de um volume lógico listrado no seu Linux VM em Azure podem ser encontrados no Configure LVM num documento Linux VM em Azure .
Passos Seguintes
Lembre-se, como em todas as discussões de otimização, você precisa realizar testes antes e depois de cada mudança para medir o impacto que a mudança tem. A otimização é um processo passo a passo que tem resultados diferentes em diferentes máquinas no seu ambiente. O que funciona para uma configuração pode não funcionar para os outros.
Algumas ligações úteis a recursos adicionais: