TOP

Xen com multi bridge e LVM

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 restart

Preparando 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-1

Reinicie o servidor

dom0:~# reboot

Verifique 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-bridge

Verifique 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.sxp

Comente 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.conf
lvm = 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.cfg

Verifique se elas estão rodando

dom0:~# xm list
Name                                        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 show
bridge 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.0

Podemos 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_vm

Se 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-disk

Você pode definir o tamanho total, por exemplo, para 10GB

dom0:~# lvextend -L10GB /dev/vg0/web-disk

Fazendo 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-disk

Veja 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-disk

Agora é 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

Compartilhe com seus amigos!:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • Identi.ca
  • LinkedIn
  • MySpace
  • PDF
  • Twitter
  • Yahoo! Bookmarks
  • Yahoo! Buzz

Leave a Reply

Your email is never published nor shared.

You may use these HTML tags and attributes:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">