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:
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:
- 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).
Mais informações: