O propósito
Aqui demonstro como subir um ambiente virtualizado com Xen, utilizando um servidor com quatro interfaces de rede, sendo que cada interface estará conectada a cada máquina virtual. Essa abordagem garante maior segurança e desempenho. Além disso, as máquinas virtuais serão criadas em volumes virtuais, que podem ser redimensionados de acordo com a necessidade.
O hardware
Este é o servidor da universidade onde trabalho. Obviamente que as suas configurações podem ser diferentes. Não abordarei aqui a configuração de setup nem da RAID.
- Dell PowerEdge 2900
- 2 x Xeon E5410 2.33Ghz QuadCore 6MB Cache L2
- 4GB RAM DDR2 FB-DIMM 667Mhz (2 x 2GB)
- 1 dual Ethernet Broadcom NetXtreme II BCM5708 Gigabit Ethernet (onboard)
- 1 dual Ethernet Intel 82571EB Gigabit Ethernet
- 2 HD Dell SAS 73 GB 15K RPM em RAID1
- 2 Fontes redundantes 930W
Instalando o Sistema Operacional
Instale o Debian Lenny, sistema básico.
Esquema de particionamento:
|
Ponto de montagem |
Tamanho |
Tipo |
Sistema de arquivo |
|
\ |
3GB |
primária |
Ext3 |
|
nenhum |
1GB |
primária |
Área de troca (SWAP) |
|
nenhum |
restante |
lógica |
Volume físico para LVM |
Criando um grupo de volume
Selecione [Configurar o Gerenciador de Volumes Lógicos] e clique em [Continuar].
Em [Gravar as mudanças nos discos e configurar LVM?] selecione [Sim] e clique em [Continuar].
Em [Ações de configuração LVM:] selecione [Criar grupo de volume] e clique em [Continuar].
Em [Nome do Grupo de Volume:] digite [vg0] e clique em [Continuar].
Em [Dispositivos para o novo Grupo de Volume:] marque o volume que estiver disponível e clique em [Continuar].
Criando um volume para ser usado pelo /var
Em [Ação de configuração LVM:] selecione [Criar volume lógico] e clique em [Continuar].
Em [Grupo de Volume:] selecione [vg0] e clique em [Continuar].
Em [Nome do Volume Lógico:] digite [dom0-var] e clique em [Continuar].
Em [Tamanho do Volume Lógico:] digite [4 GB] e clique em [Continuar].
Em [Ação de configuração LVM:] selecione [Finalizar] e clique em [Continuar].
Configurando a partição /var
Selecione [VG LVM vg0, LV dom0-var - 4.0 GB Linux device-mapper (linear) > #1 4.0 GB] e clique em [Continuar].
Configure esta partição para ser montada em /var, sistema de arquivos ext3.
Finalize o particionamento e continue a instalação do Debian até sua conclusão.
Configurando as interfaces de rede
Crie as seguinte entradas em /etc/network/interfaces
dom0:~# vim /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 # A interface 1 auto eth0 iface eth0 inet static address 192.168.0.2 netmask 255.255.255.0 gateway 192.168.0.1 # A interface 2 auto eth1 iface eth1 inet static address 192.168.0.3 netmask 255.255.255.0 gateway 192.168.0.1 # A interface 3 auto eth2 iface eth2 inet static address 192.168.0.4 netmask 255.255.255.0 gateway 192.168.0.1 # A interface 4 auto eth3 iface eth3 inet static address 192.168.0.5 netmask 255.255.255.0 gateway 192.168.0.1
Reinicie a rede .
dom0:~# /etc/init.d/networking restartPreparando o ambiente dom0
Instale os seguintes pacotes
dom0:~# aptitude install xen-tools xen-hypervisor-3.2-1-amd64 xen-linux-system-2.6.26-2-xen-amd64 xen-tools xen-utils-3.2-1Reinicie o servidor
dom0:~# rebootVerifique se está rodando o kernel correto .
dom0:~# uname -a Linux dom0 2.6.26-2-xen-amd64 #1 SMP Wed May 12 18:37:58 UTC 2010 x86_64 GNU/Linux
Verifique se o Xen está rodando .
dom0:~# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 3882 8 r----- 10.9
Criando as quatro bridges
Verifique o status das bridges .
dom0:~# brctl show bridge name bridge id STP enabled interfaces
Crie o script network-xen-multi-bridge com o conteúdo abaixo
dom0:~# vim /etc/xen/scripts/network-xen-multi-bridge#!/bin/sh #network-xen-multi-bridge #Exit if anything goes wrong set -e #First arg is operation. OP=$1 shift script=/etc/xen/scripts/network-bridge case ${OP} in start) $script start vifnum=0 netdev=eth0 $script start vifnum=1 netdev=eth1 $script start vifnum=2 netdev=eth2 $script start vifnum=3 netdev=eth3 ;; stop) $script stop vifnum=0 netdev=eth0 $script stop vifnum=1 netdev=eth1 $script stop vifnum=2 netdev=eth2 $script stop vifnum=3 netdev=eth3 ;; status) $script status vifnum=0 netdev=eth0 $script status vifnum=1 netdev=eth1 $script status vifnum=2 netdev=eth2 $script status vifnum=3 netdev=eth3 ;; *) echo 'Unknown command: ' ${OP} echo 'Valid commands are: start, stop, status' exit 1 esac
Verifique suas permissões .
dom0:~# ls /etc/xen/scripts/network-xen-multi-bridge -rw-r--r-- 1 root root 742 Jun 24 14:39 /etc/xen/scripts/network-xen-multi-bridge
Torne-o executável
dom0:~# chmod u+x /etc/xen/scripts/network-xen-multi-bridgeVerifique novamente suas permissões.
dom0:~# ls /etc/xen/scripts/network-xen-multi-bridge -rwxr--r-- 1 root root 742 Jun 24 14:39 /etc/xen/scripts/network-xen-multi-bridge
Edite o arquivo xend-config.sxp
dom0:~# vim /etc/xen/xend-config.sxpComente a seguinte linha
#(network-script network-dummy)
E adicione a seguinte logo abaixo, deixando descomentada
(network-script network-xen-multi-bridge)
Reinicie o serviço xend .
dom0:~# /etc/init.d/xend restart Restarting XEN control daemon: xendWaiting for peth0 to negotiate link... Waiting for peth1 to negotiate link... Waiting for peth2 to negotiate link... Waiting for peth3 to negotiate link.
Verifique novamente o status das bridges .
dom0:~# brctl show bridge name bridge id STP enabled interfaces eth0 8000.001517ab0566 no peth0 eth1 8000.001517ab0567 no peth1 eth2 8000.002219bd581b no peth2 eth3 8000.002219bd581d no peth3
Criando as máquinas virtuais
Configurando o xen-tools
Altere as seguintes linhas deixando-as como abaixo. Não altere nem descomente as outras linhas. Mantenha as linhas [size], [memory] e [swap] comentadas. Ajuste de acordo com sua rede e suas necessidades de espaço.
dom0:~# vim /etc/xen-tools/xen-tools.conflvm = vg0 install-method = debootstrap #size = 5Gb # Disk image size. #memory = 512Mb # Memory size #swap = 512Mb # Swap size fs = ext3 # use the EXT3 filesystem for the disk image. dist = lenny # Default distribution to install. image = sparse # Specify sparse vs. full disk images. gateway = 192.168.0.1 netmask = 255.255.255.0 broadcast = 192.168.0.255 kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` arch = amd64 mirror = http://ftp.br.debian.org/debian/ ext3_options = noatime,nodiratime,errors=remount-ro ext2_options = noatime,nodiratime,errors=remount-ro xfs_options = defaults reiser_options = defaults serial_device = hvc0 #default disk_device = xvda #default
Criando a VM para o servidor web
Execute o comando abaixo. Escolha o hostname, endereço de IP e tamanhos das partições de acordo com suas necessidades.
dom0:~# xen-create-image --hostname web --ip 192.168.0.7 --size 30GB --memory 512MB --swap 512 General Information -------------------- Hostname : web Distribution : lenny Partitions : swap 512 (swap) / 30GB (ext3) Image type : full Memory size : 512MB Kernel path : /boot/vmlinuz-2.6.26-2-xen-amd64 Initrd path : /boot/initrd.img-2.6.26-2-xen-amd64 Networking Information ---------------------- IP Address 1 : 192.168.0.7 [MAC: 00:16:3E:28:2C:3D] Netmask : 255.255.255.0 Broadcast : 192.168.0.255 Gateway : 192.168.0.1 Creating swap on /dev/vg0/web-swap Done Creating ext3 filesystem on /dev/vg0/web-disk Done Installation method: debootstrap Done Running hooks Done No role scripts were specified. Skipping Creating Xen configuration file Done All done Logfile produced at: /var/log/xen-tools/web.log
Edite o arquivo /etc/xen/web.cfg e deixe-o como está abaixo.
dom0:~# cat /etc/xen/web.cfg# # Configuration file for the Xen instance web, created # by xen-tools 3.9 on Thu Jul 1 09:10:10 2010. # # # Kernel + memory size # kernel = '/boot/vmlinuz-2.6.26-2-xen-amd64' ramdisk = '/boot/initrd.img-2.6.26-2-xen-amd64' memory = '512' # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'phy:/dev/vg0/web-swap,xvda1,w', 'phy:/dev/vg0/web-disk,xvda2,w', ] # # Hostname # name = 'web' # # Networking # vif = [ 'ip=192.168.0.7,mac=00:16:3E:28:2C:3D,bridge=eth0' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' # Workaround para clocksource/0: Time went backwards extra="clocksource=jiffies"
Repare que na linha
vif = [ 'ip=192.168.0.7,mac=00:16:3E:28:2C:3D,bridge=eth0' ]
estamos declarando que a bridge utilizada será a eth0.
Crie as outras três máquinas virtuais conforme suas necessidades, e em nos arquivos de configuração de cada uma, altere o nome da bridge que ela utilizará. Por exemplo:
Servidor de base de dados
vif = [ 'ip=192.168.0.8,mac=00:16:3E:28:2C:3E,bridge=eth1' ]
Servidor DNS
vif = [ 'ip=192.168.0.9,mac=00:16:3E:28:2C:3F,bridge=eth2' ]
Servidor Samba
vif = [ 'ip=192.168.0.10,mac=00:16:3E:28:2D:3E,bridge=eth3' ]
Claro que os exemplos são hipotéticos, somente para exemplificar.
Suba todas as VMs usando o comando
dom0:~# xm create /etc/xen/nome_da_vm.cfgVerifique se elas estão rodando
dom0:~# xm listName ID Mem VCPUs State Time(s) Domain-0 0 1958 8 r----- 4673.4 bases 26 512 1 -b---- 9.4 ns1 25 512 1 -b---- 4.5 samba 28 512 1 -b---- 3.5 web 27 512 1 -b---- 14.1
O exemplo acima é a saída do servidor da universidade, rodando 4 VMs. Sua saída pode ser diferente disso.
Finalmente, verifique como as bridges estão sendo utilizadas.
dom0:~# brctl showbridge name bridge id STP enabled interfaces
eth0 8000.001517ab0566 no peth0
vif27.0
eth1 8000.001517ab0567 no peth1
vif26.0
eth2 8000.002219bd581b no peth2
vif25.0
eth3 8000.002219bd581d no peth3
vif28.0Podemos notar que em cada bridge foi criada uma interface virtual “vifxx.x” que está atendendo especificamente a uma VM.
Redimensionando uma partição
Eventalmente, pode ser que falte ou sobre espaço em alguma partição. Uma grande vantagem de se trabalhar com LVM é a possibilidade de redimensioná-las de forma muito simples.
Pare a VM que você queira redimensionar a partição.
dom0:~# xm shutdown nome_da_vmSe já não estiver desmontada, desmonte a partição que queira redimensionar. Por exemplo, para desmontar a partição / do servidor web
dom0:~# umount /dev/vg0/web-diskVocê pode definir o tamanho total, por exemplo, para 10GB
dom0:~# lvextend -L10GB /dev/vg0/web-diskFazendo isso, estou redimensionando a partição / do servidor web para 10GB, não importando o tamanho que ela tinha antes.
É possível também incrementar, ou decrementar o tamanho, utilizando operadores.
dom0:~# lvextend -L+10GB /dev/vg0/web-diskVeja que nesse caso, a partição existente foi aumentada em 10GB
Rode o seguinte comando para efetivar as mudanças.
dom0:~# resize2fs /dev/vg0/web-diskAgora é só subir a VM novamente com a partição devidamente redimensionada.
Bem, espero que este post possa ajudar. Eu tive muitas dificuldades, principalmente para configurar as bridges, pois os materiais que eu encontrava na internet eram na maioria muito vagos. A propósito, eis minha base de pesquisa.
http://xen.org/
http://wiki.debian.org/Xen
http://wiki.debian.org/Xen#A.27clocksource.2BAC8-0.3ATimewentbackwards.27
http://www.debian-administration.org/articles/470