Servidor de Virtualização: KVM
Neste artigo, irei mostrar como instalar, configurar e otimizar um solução de servidor de virtualização KVM. Utilizarei como exemplo uma implementação real... estou aberto a críticas e sugestões.
Características
Servidor HP Proliant:
Processador Dual-Core AMD Opteron Processor 2220;
Memória de 10GB DDRII 667;
Fonte simples;
Placa de rede onboard com duas saídas Gigabit;
HD SAS 2.5", 2 x 30 GB (RAID 1) e 4 x 146 GB (RAID 5 - 404 GB);
Sistema Operacional Debian 7 (Wheezy).
Plataforma de virtualização KVM.
Implementação
Instalação
apt-get install qemu-kvm
Adicionar usuários utilizadores do KVM ao grupo "kvm"
adduser ravel kvm
Criar o disco virtual
qemu-img create disco.img -f qcow2 100G #"qcow2" refere-se ao tipo de disco (recomendado); #"100G" é o tamanho do disco dinamicamente alocado
Configurar bridge em placa de rede (/etc/network/interfaces)
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface #auto eth1 iface eth1 inet manual #allow-hotplug eth1 auto br0 iface br0 inet static #tap0: Zabbix #tap1: Yocto #tap2: Batman #tap3: Zabbix-TI #tap4: Disponível pre-up ip tuntap add dev tap0 mode tap user ravel pre-up ip tuntap add dev tap1 mode tap user yocto pre-up ip tuntap add dev tap2 mode tap user batman pre-up ip tuntap add dev tap3 mode tap user ti pre-up ip tuntap add dev tap4 mode tap user ravel pre-up ip link set tap0 up pre-up ip link set tap1 up pre-up ip link set tap2 up pre-up ip link set tap3 up pre-up ip link set tap4 up bridge_ports all tap0 bridge_ports all tap1 bridge_ports all tap2 bridge_ports all tap3 bridge_ports all tap4 post-down ip link set tap0 down post-down ip link set tap1 down post-down ip link set tap2 down post-down ip link set tap3 down post-down ip link set tap4 down post-down ip tuntap del dev tap0 mode tap post-down ip tuntap del dev tap1 mode tap post-down ip tuntap del dev tap2 mode tap post-down ip tuntap del dev tap3 mode tap post-down ip tuntap del dev tap4 mode tap address 10.0.0.26 netmask 255.255.0.0 gateway 10.0.0.9 bridge_ports eth1 bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stp off
Reinicie a rede:
/etc/init.d/networking restart
Mais informações:
- http://www.hardware.com.br/guias/debian-desktops/kvm-qemu.html
- http://www.linux-kvm.com/content/tip-how-run-headless-guest-machine-using-vnc-kvm
- http://blog.bigsmoke.us/2009/12/09/debian-network-bridge-setup-for-kvmqemu
- http://wiki.debian.org/QEMU#Networking
Máquinas virtuais
As máquinas virtuais são inicializadas automaticamente através de "/etc/rc.local":
#Inicializar VMs /home/ravel/vm/zabbix-vm.sh & /home/yocto/vm/yocto-vm.sh & /home/batman/vm/batman-vm.sh & /home/ti/vm/zabbix-vm.sh &
a. Zabbix-PD
Utilização: monitoramento de servidores de redes
Usuário: ravel
Diretório: /home/ravel/vm
Disco virtual: /home/ravel/vm/hd/zabbix_pd-hda.img
Rede: tap0
Script de inicialização: /home/ravel/vm/zabbix-vm.sh:
#!/bin/bash cdrom="/home/ravel/vm/isos/debian-7.0.0-amd64-DVD-1.iso" hda="file=/home/ravel/vm/hd/zabbix_pd-hda.img,if=virtio,cache=writethrough" mem="1G -mem-path /hugepages" #Vídeo video="-display none" #desativar saída de vídeo VNC #video="-vnc :2" #habilitar saída de vídeo VNC kvm -cdrom $cdrom -drive $hda -m $mem $video -smp cores=2,threads=2,sockets=1 -enable-kvm -cpu host -net nic,macaddr=52:54:00:12:01:01 -net tap,ifname=tap0,script=no,downscript=no
b. Zabbix-TI
Utilização: monitoramento de servidores de redes, utilizado pela TI Usuário: ti
Diretório: /home/ti/vm
Disco virtual: /home/ti/vm/hd/zabbix_ti-hda.img
Rede: tap4
Script de inicialização: /home/ti/vm/zabbix-vm.sh:
#!/bin/bash cdrom="/home/ti/vm/isos/debian-7.0.0-amd64-DVD-1.iso" hda="/home/ti/vm/hd/zabbix_ti-hda.img" mem="1G -mem-path /hugepages" #Vídeo #video="-display none" #desativar saída de vídeo VNC video="-vnc :1" #habilitar saída de vídeo VNC kvm -cdrom $cdrom -hda $hda -m $mem $video -smp cores=2,threads=2,sockets=1 -enable-kvm -cpu host -net nic,macaddr=52:54:00:12:01:03 -net tap,ifname=tap4,script=no,downscript=no #-display none
c. Yocto
Utilização: servidor de compilação Usuário: yocto
Diretório: /home/yocto/vm
Disco virtual: /home/yocto/vm/hd/yocto-hda.img
Rede: tap1
Script de inicialização: /home/yocto/vm/yocto-vm.sh:
#!/bin/bash cdrom="/home/yocto/vm/isos/kubuntu-13.04-desktop-amd64.iso" hda="/home/yocto/vm/hd/yocto-hda.img" mem="4G -mem-path /hugepages" #Vídeo video="-display none" #desativar saída de vídeo VNC #video="-vnc :4" #habilitar saída de vídeo VNC kvm -cdrom $cdrom -hda $hda -m $mem $video -smp cores=2,threads=2,sockets=1 -enable-kvm -cpu host -net nic,macaddr=52:54:00:12:01:00 -net tap,ifname=tap1,script=no,downscript=no
d. Batman
Utilização: servidor de compilação
Usuário: batman
Diretório: /home/batman/vm
Disco virtual: /home/batman/vm/hd/batman.img
Rede: tap2
Script de inicialização: /home/batman/vm/batman-vm.sh:
#!/bin/bash cdrom="/home/batman/vm/isos/gentoo-install-amd64-minimal-20130516.iso" hda="/home/batman/vm/hd/batman.img" mem="2G -mem-path /hugepages" #Vídeo #video="-display none" #desativar saída de vídeo VNC video="-vnc :3" #habilitar saída de vídeo VNC kvm -cdrom $cdrom -hda $hda -m $mem -boot d -smp cores=2,threads=2,sockets=1 -enable-kvm -cpu host $video -net nic,macaddr=52:54:00:12:01:02 -net tap,ifname=tap2,script=no,downscript=no
** Cada VM deve utilizar um endereço MAC distinto.
Otimização
Parâmetros:
- "-smp cores=2,threads=2,sockets=1 -cpu host -enable-kvm":
Acelerador KVM ("-enable-kvm") e configuração do processador virtual ("-smp cores=2,threads=2,sockets=1 -cpu host") - inserido no script de inicialização da VM.
"-cpu host": disponibiliza todas as instruções do processador físico à VM;
- "KSM (Kernel Samepage Merging)":
Permite que páginas idênticas de memória sejam empacotadas pelo kernel numa única página compartilhada por um ou mais processos. Esta funcionalidade é potenciada pelo KVM para permitir que múltiplas, similares, máquinas virtuais tenham uma utilização de memória reduzida. Como a memória é compartilhada, a utilização combinada desta pelas máquinas virtuais é reduzida.
Habilitar KSM (Kernel Samepage Merging) - "/etc/rc.local" (inserir acima dos scripts de inicialização de VMs):#Habilitar KSM - Kernel Samepage Merging echo 1 > /sys/kernel/mm/ksm/run
- Recomendação de leitura: IBM - KVM Best Practices
- Huge Pages:
Reduz o consumo de memória e melhora a performance reduzindo a pressão sobre a cache.
Habilitar "hugepages"- Criar o diretório "/hugepages" e dar permissão ao grupo "kvm"
mkdir /hugepages chown -R ravel:kvm /hugepages
- "/etc/fastab"
hugetlbfs /hugepages hugetlbfs defaults 0 0
- "/etc/rc.local" (inserir acima dos scripts de inicialização de VMs):
#Set HugePages echo 550 > /proc/sys/vm/nr_hugepages #"550" corresponde a metade de memória RAM destinada a VM mais 10%
- Apontar localização do diretorio hugepages no script de inicialização da VM ("-m QDE_DE_MEMORIA -mem-path /hugepages"). Vide exemplo de script de inicialização de VM).
- Criar o diretório "/hugepages" e dar permissão ao grupo "kvm"
Nenhum comentário:
Postar um comentário