Xen

De Fórum Debian Wiki

Índice de conteúdo

Virtualização Xen 3.2 no Debian Etch usando APT-GET em Maquinas 64 bits

Este manual tem objetivo detalhar a instalação e configuração do software de virtualização Xen na distribuição Debian etch de forma simples e objetiva. Irei demonstrar como instalar o Xen 3.2 utilizando a ferramenta apt-get. Tanto o hardware como a versão do Debian foi amd64, pois com a popularização dos processadores X86_64 esta e bom utilizar todo o poder desta arquitetura. Caso seu processador não suportar esta arquitetura você pode utilizar o kernel para 32 bits, pois o que ira alterar e somente as arquitetura dos softwares e os procedimentos serão os mesmos. Durante a instalação do Debian Etch na maquina que ira hospedar os servidores virtuais (que iremos chamar de xen1 e xen2), iremos deixar duas partições de 100 GB, uma sera utilizada por servidor virtual xen1 e a outra pelo servidor virtual xen2. Estas duas partições de 100 G, sera uma especie de HD virtual para ambos os servidores, mais na frente você ira ver como fazer isto usando o LVM (Logical Volume Manager). Não irei detalhar a instalação do Debian Etch e particionamento do servidor que ira hospedar os servidores virtuais, pois e uma instalação de uma distribuição linux qualquer, apenas deixando 2 partições não montadas pelo linux, pois estas duas partições sera utilizado pelo Xen. A instalação de um linux normalmente porem deixando 2 particoes de 100 G para ser utilizada pelos serviores virtuais. O hardware que iremos utilizar sera uma maquina com processador Pentiun D dual core de 3.0 GHZ com 2 GB memoria ram, e HD de 250 GB e 2 Placas de redes, mas nada impede que pode ser adaptado a outros tipos de hardware.

Baixando e Instalando ultimas atualizações do Debian Etch

Antes de proceder com a instalação do Xen 3.2 no Debian Etch, e necessário baixar e atualizar toda distribuição inclusive a versão do kernel que tera que ser a 2.6.16-6. utilize os comandos abaixo para atualizar toda a distribuição.

apt-get update 

(baixa todas atualizações do repositório)

apt-get upgrade  

(Instala todas atualizações)

O tempo para termino de toda atualizações dependera da velocidade da sua banda larga, após o termino reinicie o linux para utilizar o novo kernel.


Instalando o kernel utilizado pelo Xen no Debian Etch.

Agora teremos que instalar o kernel modificado com suporte ao Xen para que possamos instalar os pacotes de administração do Xen. Para instalar o kernel do Xen.

apt-get install xen-linux-system-2.6.18-6-xen-amd64 

Com isto sera instalado o kernel com as dependências necessárias para o Xen, após a instalação sera criado mais uma entrada no grub referente ao kernel do Xen, reinicie a maquina e selecione o kernel referente ao Xen.

Instalando o LVM utilizado pelo Xen no Debian Etch

Para podermos criar uma especie de 2 discos virtuais que e chamado de volume físico e podermos partiçona-los teremos que instalar o lvm. Para instalar-mos utilize o seguinte comando:

 apt-get install lvm2

Instalando o multipath-tools no Debian Etch

Para que possamos ter acesso a tabela das particoes criadas pelo LVM teremos que instalar o seguinte pacote.

apt-get install multipath-tools


Instalando o pacote bridge-utils no Debian Etch.

O pacote bridge utils tera que ser instalado para que o seu servidores virtuais comuniquem com a rede.

apt-get install bridge-utils


Instalando o debootstrap no Debian Etch

Debootstrap e um conjunto de scripts que providencia a instalação da estrutura básica funcional de um sistema Debian, e com ele que iremos instalar o Debian nos servidores virtuais.

apt-get install debootstrap


Instalando Xen 3.2 no Debian Etch

Para instalar a versão 3.2 do xen, teremos que adicionar os repositórios do debian lenny no arquivo sources.list do seu servidor, pois nos repositórios do etch so possui a versão 3.0. Para adicionar o repositório do lenny no debian etch siga os procedimentos abaixo.

Abrir com o editor vim o arquivo que possui os repositórios: vim /etc/apt/sources.list

Comentar as seguintes linhas abaixo colocando o # na frente:

#deb http://ftp.br.debian.org/debian/ etch main
#deb-src http://ftp.br.debian.org/debian/ etch main
#deb http://security.debian.org/ etch/updates main contrib
#deb-src http://security.debian.org/ etch/updates main contrib

Adicionar o repositório do lenny:

deb http://ftp.br.debian.org/debian/ lenny main
deb-src http://ftp.br.debian.org/debian/ lenny main
deb http://security.debian.org/ lenny/updates main contrib
deb-src http://security.debian.org/ lenny/updates main contrib

Depois de comentar e adicionar o repositório do lenny no arquivo source.list do debian etch, teremos que limpar os arquivos que estão em cache da maneira abaixo.

apt-get clean 

(Limpando arquivos em cache)

apt-get update

(Baixando novos arquivos)

Tendo efetuado os comandos anteriores teremos que instalar os arquivos do xen 3.2, entao primeiramente mande instalar o xen-hypervisor e xen-utils com os seguinte comandos.

apt-get install xen-hypervisor-3.2-1-amd64

(Instalar o hypervisor do xen 3.2)

apt-get install xen-utils-3.2-1

(Instalando ferramenta de configuração)

Efetuando a instalação dos pacotes informados anteriormente, sera adicionado outra entrada no grub referente ao xen-3.2 parecida com esta abaixo:

title           Xen 3.2-1-amd64 / Debian GNU/Linux, kernel 2.6.18-6-xen-amd64
root            (hd0,0)
kernel          /xen-3.2-1-amd64.gz 
module          /vmlinuz-2.6.18-6-xen-amd64 root=/dev/sda3 ro console=tty0
module          /initrd.img-2.6.18-6-xen-amd64
savedefault

Edite o arquivo /boot/grub/menu.list, para quando o servidor for reiniciado ele já entre no xen 3.2 automaticamente. Então reinicie o servidor e verificando que ele ira entrar no xen 3.2. Após tudo isto feito e chegando neste ponto, você já estará com todos os pacotes do Xen 3.2 instalados, bastando apenas configurar o LVM e o arquivo de configuração dos servidores virtuais.

Configurando Interfaces de rede da maquina física

Para que as maquinas virtuais xen1 e xen2 possam ser acessadas pela rede ou acessar outras maquinas teremos que configurar uma ponte nas interface da maquina hospedeira (que e a maquina física). Neste exemplo nossa maquina possui 2 interfaces de redes físicas a eth0 e a eth1. Nossas 2 maquinas virtuais iram utilizar placas de redes distintas para comunicarem com a nossa rede, porem estas 2 interfaces de redes estão ligadas na mesma rede. Um sugestão utilize sempre que possível interfaces de redes distintas para a comunicação entre a rede e cada maquina virtual. Abaixo temos 2 interfaces de rede uma eth0 a e outra eth1, a eth0 esta recebendo o endereço de ip via DHCP já a eth1 esta com o ip fixo. /etc/network/interfaces.

auto lo
iface lo inet loopback

# The primary network interface
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
bridge_maxwait 0

# The security network interface
auto xenbr1
iface xenbr1 inet static
address 192.168.1.28
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
bridge_ports eth1
bridge_maxwait 0

Após configurado a interface de rede reinicie ou restarte o serviço de rede com o comando /etc/init.d/network restart, e verifique se as interfaces de rede bridge estão funcionando com o comando ifconfig:

xenbr0     Encapsulamento do Link: Ethernet  Endereço de HW 00:0A:5E:53:F8:1D
           inet end.: 192.168.1.32  Bcast:192.168.1.255  Masc:255.255.255.0
           endereço inet6: fe80::20a:5eff:fe53:f81d/64 Escopo:Link
           UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
           RX packets:175097 errors:0 dropped:0 overruns:0 frame:0
           TX packets:3160 errors:0 dropped:0 overruns:0 carrier:0
           colisões:0 txqueuelen:0
           RX bytes:13640572 (13.0 MiB)  TX bytes:413306 (403.6 KiB)

xenbr1     Encapsulamento do Link: Ethernet  Endereço de HW 00:18:F3:BE:83:1F
          inet end.: 192.168.1.28  Bcast:192.168.1.255  Masc:255.255.255.0
          endereço inet6: fe80::218:f3ff:febe:831f/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:177744 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0
          RX bytes:13808112 (13.1 MiB)  TX bytes:2447 (2.3 KiB)

Se o resultado for parecido com este ai suas interfaces de rede como brige estão funcionado corretamente.

Configurando o LVM no Debian Etch

Neste ponto teremos que configurar o LVM; sera utilizado dois discos virtuais, e dentro de cada disco sera feito o particionamento para ser utilizado nos servidores virtuais. Neste caso sera utilizado 2 partições de 100GB cada uma, pois ambas foi deixada durante o particionamento reservadas sem ponto de montagem para que utilizaremos pelos servidores virtuais, uma e delas e a /dev/sda8 e a outra e /dev/sda9. Para criar os dispositivo de blocos para ser utilizado pelo servidores virtuais basta digitar:

pvcreate /dev/sda8
pvcreate /dev/sda9

Neste ponto criarmos 2 dispositivos de blocos, para verificar se os dispositivos foram criados corretamente, basta digitar o seguinte comando.

pvscan

Agora iremos criar o grupo de volume que seria uma especie de disco

vgcreate VGxen1 /dev/sda8
vgcreate VGxen2 /dev/sda9

Para verificar se os grupos (discos) foram criados corretamente digite:

lvs

Depois de todos os volumes e grupos criados tera que ativa-los:

vgchange -a y

Neste ponto iremos criar um volume logico no grupo criado anteriormente e já indicando o tamanho que sera o disco.

lvcreate -L 100G -n debian.disk1 Vgxen1
lvcreate -L 100G -n debian.disk2 VGxen2 

Depois de criado os volumes lógicos (os discos virtuais) teremos que particiona-los para que as maquinas virtuais utilize este particionamento, iremos utilizar o cfdisk, mas você poderá utilizar qual utilitário quiser, abaixo iremos particionar os 2 discos.

cfdisk /dev/VGxen1/debian.disk1
cfdisk /dev/VGxen2/debian.disk2

Crie 3 partições uma da area de swap ocupando 1 GB outras 2 partições uma com 25 GB, e a outra o que sobrar. Desta forma acima, já iremos criar as partições para ser utilizadas pelo 2 servidores virtuais. Para criar a partição referente a swap usando o cfdisk, tera que alterar o tipo dela para 82, que indica que e uma partição de swap, já as outras duas já são criadas no formato linux mesmo. Após criada as partições com o cfdisk as mesmas estarão dentro de /dev/mapper/, dentro deste diretório iremos ter tando as partições referente ao disco 1 como as do disco 2, os arquivos referente ao disco 1 são estas abaixo:

debian.disk1p1 (Partição Swap)
debian.disk1p2 (Partição Barra que onde esta instalado o linux)
debian.disk1p3 (Partição que iremos utilizar para armazenar o sistema) 


Da mesma forma haverá mais outros 3 arquivos referente as partições do disco 2.

debian.disk2p1 (Partição Swap)
debian.disk2p2 (Partição Barra que onde esta instalado o linux)
debian.disk2p3 (Partição que iremos utilizar para armazenar o sistema)

Neste ponto teremos que disponibilizar o acesso as partições criadas pelo cfdisk, para isto teremos que disponibilizar o acesso tando ao disco 1 (VGxen-debian.disk1) como ao disco 2 (VGxen-debian.disk2) com o seguinte comando:

kpartx -a /dev/mapper/VGxen1-debian.disk1
kpartx -a /dev/mapper/VGxen2-debian.disk2


Agora para podermos utilizar as partições antes criadas teremos que formata-las, neste exemplo iremos utilizar reiserfs e a swap.

mkswap /dev/mapper/VGxen1-debian.disk1p1 (Partição Swap)
mkreiserfs /dev/mapper/VGxen1-debian.disk1.p2 (Partição instalado o Debian)
mkreiserfs /dev/mapper/VGxen1-debian.disk1.p3 (Partição reservada ao sistema)
mkswap /dev/mapper/VGxen2-debian.disk2p1 (Partição Swap)
mkreiserfs /dev/mapper/VGxen2-debian.disk2.p2 (Partição instalado o Debian)
mkreiserfs /dev/mapper/VGxen2-debian.disk2.p3 (Partição reservada ao sistema)


Instalando o Debian Etch básico para as maquinas virtuais

Para instalarmos o Debian básico nas partições VGxen1-debian.disk2p2 para o servidor xen1, e Vgxen2-debian.diskp2 para o servidor xen2, teremos que montar estas partições para poder-mos instalar o Debian.

Então crie 2 diretórios dentro /mnt/ chamado debian e debian2 com o seguinte comando:

mkdir /mnt/debian
mkdir /mnt/debian2 

Para montar as 2 partições utilize os seguintes comandos:

mount /dev/mapper/VGxen1-debian.disk1p2 /mnt/debian
mount /dev/mapper/VGxen2-debian.disk2p2 /mnt/debian2

Para verificar se realmente foi montada as partições, utilize o comando df. Para instalar o Debian esta partição teremos que utilizar o utilitário debootstrap. (Se você estiver em uma rede que utilize proxy autenticado, você tera que exportar 2 variáveis de ambiente relacionadas ao proxy: export http_proxy=http://usuário:senha@IP_SERV_PROXY:porta e ftp_proxy=http://usuário:senha@IP_SERV_PROXY:porta, digite estes comandos na linha de comando). Para baixar o Debian básico:

debootstrap etch /mnt/debian http://ftp.br.debian.org/debian
debootstrap etch /mnt/debian http://ftp.br.debian.org/debian2


Desta maneira ira ser feita uma instalação básica do Debian nas 2 partições, o tempo que levara para baixar ira depender da sua conexão. Ao terminar de baixar o sistema básico tera que efetuar a configuração de alguns arquivos para dentro do /mnt/debian /mnt/debian2 que e onde esta os arquivos relacionados ao servidor xen1 e servidor xen2


Configurando arquivos após a instalação básica do Debian Etch

Neste ponto teremos que fazer algumas alterações em alguns arquivos que sera utilizados pelas próprias maquinas virtuais, que são eles:

/etc/inittab,
/etc/securetty,
/etc/hosts,
/etc/hostname,
/etc/network/interfaces.


Estes arquivos estao localizados dentro /mnt/debian e dentro /mnt/debian2, pois dentro de debian e debian2, possui uma instalação minima do Debian. Teremos que autera-los, o primeiro a ser alterado e o /mnt/debian/etc/inittab: Localize as linhas abaixo

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6 

Deixe somente a primeira linha descomentada, pois a maquina virtual zen so utiliza um terminal, caso não comente a maquina virtual ira gerar um mensagem referente ao terminal. Comente com # na frente, desta forma abaixo.

1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6


O próximo arquivo a ser editado sera o /mnt/debian/etc/securretty adicionado a seguinte linha:

# Xen console
xvc0

Agora editar o /mnt/debian/etc/hosts, que e o arquivo responsável por fazer o relacionamento entre um nome de computador e endereço IP, no nosso exemplo ira chamar xen1 com ip 192.168.1.1.

192.168.1.1       xen1.dominio.com.br    xen1

No arquivo /mnt/debian/etc/hostname você tera que indicar qual e o nome deste servidor. Ira ficar desta forma abaixo.

xen1


Para que este servidor virtual possa acessar a rede iremos configurar o aquivo /mnt/debian/network/interfaces desta forma:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

Após todos arquivos configurados teremos que copiar os modulos do kernel do servidor real para o servidor virtual desta forma.

cp -a /lib/modules/2.6.18-6-xen-amd64 /mnt/debian/lib/modules

Neste ponto esta pronto a configuração do servidor xen1, para você configurar o servidor virtual xen2, os procedimentos são bem parecidos porem fazendo apenas pequenas alterações como descrito abaixo. Editar o arquivos:

/etc/inittab,
/etc/securetty,
/etc/hosts,
/etc/hostname,
/etc/network/interfaces.


Estes arquivos estão localizados dentro /mnt/debian2 e dentro. Teremos que altera-los, o primeiro a ser alterado e o /mnt/debian/etc/inittab: Localize as linhas abaixo

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

Deixe somente a primeira linha descomentada, pois a maquina virtual zen so utiliza um terminal, caso não comente a maquina virtual ira gerar um mensagem referente ao terminal. Comente com # na frente, desta forma abaixo.

1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6


O próximo arquivo a ser editado sera o /mnt/debian2/etc/securretty adicionado a seguinte linha:

# Xen console
xvc0

Agora editar o /mnt/debian2/etc/hosts, que e o arquivo responsável por fazer o relacionamento entre um nome de computador e endereço IP, no nosso exemplo ira chamar xen1 com ip 192.168.1.1.

192.168.1.6       xen2.dominio.com.br    xen2

No arquivo /mnt/debian2/etc/hostname você tera que indicar qual e o nome deste servidor. Ira ficar desta forma abaixo.

xen2

Para que este servidor virtual possa acessar a rede iremos configurar o aquivo /mnt/debian2/network/interfaces desta forma:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.6
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

Após todos arquivos configurados teremos que copiar os módulos do kernel do servidor real para o servidor virtual desta forma.

cp -a /lib/modules/2.6.18-6-xen-amd64 /mnt/debian2/lib/modules

Terminamos a configuração inicial para os servidores virtuais, neste ponto teremos que criar o arquivo de configuração tanto para o xen1 como xen2, para criar o arquivo referente ao xen1, crie um diretório dentro /etc/nagios/auto e dentro deste diretório iremos criar um arquivo chamado Xen1.cfg, contendo o seguinte conteúdo:

import commands
krn_vers = commands.getoutput('uname -r')
builder = 'linux'
name ='xen1'   # nome do dominio
disk = [ 'phy:/dev/VGxen1/debian.disk1,xvda,w,' ]
memory = 1024
vif = [ 'mac=00:16:3E:25:DC:B0','bridge=xenbr0' ]
kernel = '/boot/vmlinuz-' + krn_vers
ramdisk = '/boot/initrd.img-' + krn_vers
vcpus = 2  # Quantidade de CPU
root = '/dev/xvda2 ro'
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
extra = 'xencons=xvc console=xvc0 video=tty'

Neste ponto crie o arquivo Xen2.cfg dentro /etc/xen/auto com o seguinte conteúdo:

import commands
krn_vers = commands.getoutput('uname -r')
builder = 'linux'
name ='xen2'
disk = [ 'phy:/dev/VGxen2/debian.disk2,xvda,w,' ]
memory = 512
vif = [ 'mac=00:21:3A:27:BC:B3','bridge=xenbr1' ] # Bridge diferente
kernel = '/boot/vmlinuz-' + krn_vers
ramdisk = '/boot/initrd.img-' + krn_vers
vcpus = 2
root = '/dev/xvda2 ro'
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
extra = 'xencons=xvc console=xvc0 video=tty'


Subindo os servidores virtuais Xen

Para iniciarmos e já entrar no modo console da maquina virtual basta digitar o seguinte comando:

xm create -c /etc/xen/auto/Xen1.cfg

O mesmo comando vale para o Xen2.cfg, porem se voce quiser apenas iniciar os servidores virtuais não prescisando entrar no no console apenas digite:

xm create /etc/xen/auto/Xen1.cfg

Detalhe importante para que você consiga subir os servidores virtuais e que o serviço xend tem que estar inicializado.


Configurando FSTAB dos servidores.

Para que as maquinas virtuais possam utilizar tanto o a partição swap, linux como a partição /sistema que deixamos reservadas, teremos que editar o/etc/fstab de ambas as maquinas. Utilize o editor de texto de sua preferencia, no caso iremos utilizar o vim /etc/fstab. Os servidores virtuais quando e para utilizar partições criadas pelo LVM, ela utiliza ao invés de /dev/sda ou /dev/hda, para a utilizar /dev/xvda 1,2,3 e por ai diante, para conferir basta logado em uma maquina cliente utilizar o comando fdisk -l, que ele ira listar todas partições criadas pela LVM.

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/xvda1       none            swap    sw               0       0
/dev/xvda2       /               reiserfs defaults        0       1
/dev/xvda3       /sistema        reiserfs defaults        0       2


Comandos para administrar os servidores virtuais Xen

Desligando servidor virtual

xm shutdown -H xen1


Reiniciado servidor virtual

xm reboot xen1


Desligando servidor virtual bruscamente, sem sincronizar ou desmontar os discos

xm destroy xen1


Listar servidores virtuais

xm list


Verificar consumo das maquinas virtuais

xm top


Pausar execução de um servidor virtual

xm pause xen1


Retirar a pause

xm unpause xen1


Redefinindo a quantidade de memoria locada para uma determinada maquina sem precisar reiniciar o serviço

xm mem-set xen1 256


Comandos para administrar os volume LVM

Listar volumes físicos criado pelo comando pvcreate:

pvs


Remover volumes físicos, porem antes remover os grupos antes de executar este comando

pvremove /dev/partição

Listar os grupos criados e informações

vgs


Remover um grupo, porem antes remover os volumes logicos antes

vgremove Vgxen1


Listar os volumes lógicos definidos

lvs


Remover um volume logico

lvremove /dev/VGxen1/debian.disk1


Redimensionar um volume logico

lvresize -L 10G /dev/VGxen1/debian.disk1

Elaboração:

Gilmar Jacinto Cabral

Rodrigo Braga Prado

Bibliografia:

http://www.eriberto.pro.br/xen

http://www.xen-br.org/

Canal: #xen-br

Ferramentas pessoais