Xenganetidrbd

De Xen-BR wiki

Xen-BR 
Documentação Xen + Ganeti + DRBD0.7

Xenlogo.png




Esta documentação aborda a instalação, configuração e utilização do ganeti em um cluster de servidores físicos xen dom0.

O Ganeti é um software desenvolvido pelo google que permite o gerenciamento de um "cluster" de servidores virtualizados.

Tabela de conteúdo

Autor desta documentação

O autor desta documentação técnica é Leonardo Rodrigues de Mello.

Licença de utilização

Esta documentação está licenciada sob a licença "GNU Free Documentation License". Pode ser utilizada livremente desde que citada a fonte.

Máquinas Utilizadas

  • Nodo404.labcluster (IBM04)
  • Nodo405.labcluster (IBM05)

Instalação e Configuração do Ganeti

Pré-requisitos

Dispositivo LVM

Para o funcionamento adequado do ganeti é necessário criar um grupo de volumes lvm denominado xenvg. Este volume deve possuir no mínimo 20GB, caso contrário o ganeti não funcionará corretamente.

Neste manual será utilizado a partição /dev/sda3 como dispositivo físico do volume lvm.

Criando Volume Físico LVM
  #pvcreate /dev/sda3
Criando Grupo de Volumes LVM
  #vgcreate xenvg /dev/sda3 
Ativando Grupo de Volumes LVM
  #vgchange -a y
Verificando se o Grupo de Volumes LVM está correto
  #vgdisplay 
    --- Volume group ---
    VG Name               xenvg
    System ID             
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  1
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                0
    Open LV               0
    Max PV                0
    Cur PV                1
    Act PV                1
    VG Size               125,43 GB
    PE Size               4,00 MB
    Total PE              32110
    Alloc PE / Size       0 / 0   
    Free  PE / Size       32110 / 125,43 GB
    VG UUID               6O5lsM-0c6J-8Vxa-InHE-J92y-D23r-9GG5WO
Configurando o LVM

Editar o arquivo /etc/lvm/lvm.conf, definindo como filtros:

  filter = [ "r|/dev/cdrom|", "r|/dev/drbd[0-9]+|" ]

Interface de Rede

O ganeti espera utilizar um bridge chamado xen-br0.

Configuração

Para configurar esta interface deve-se editar o arquivo de configuração /etc/network/interfaces:

  #Deve-se remover todas as entradas relativas a interface de rede.
  #deve-se adaptar as configurações para refletirem o sua configuração de
  #hardware e rede.
  auto xen-br0 inet static
  iface xen-br0 inet static
       address 192.168.9.36
       netmask 255.255.0.0
       gateway 192.168.6.1
       bridge_ports eth1
       bridge_stp  off
       bridge_fs  0
Ativação da alteração
  #ifup xen-br0
Teste da alteração
  ~# brctl show
       bridge name     bridge id               STP enabled     interfaces
       xen-br0         8000.00145e178714       no              eth1

DRBD

Instalação de pré-requisitos

1. Instalação do module-assistant

  #apt-get install module-assistant 

2. Preparação do ambiente de compilação

  #m-a prepare

3. Download do codigo fonte do drbd0.7

  #m-a get drbd0.7 

4. Compilação do drbd0.7

  #m-a build drbd0.7 

5. Instalação do módulo do kernel e dependências

  #m-a install drbd0.7

6. Configurar a carga do módulo automática e até 32 instâncias por nodos:

  #echo drbd minor_count=64 >> /etc/modules
  #modprobe drbd minor_count=64

Configurações específicas do XEN

/etc/xen/xend-config.sxp

O conteúdo do arquivo do xen /etc/xen/xend-config.sxp, Deverá ser:

  (xend-relocation-server yes)
  (xend-relocation-address )
  (xend-relocation-hosts-allow )
  (network-script 'network-bridge bridge=xen-br0')
  (vif-script vif-bridge)
  (dom0-min-mem 0)
  (dom0-cpus 0)
Criação de links simbólicos

É necessário criar os seguintes links para o kernel xenU e initrd:

  #cd /boot
  #ln -s vmlinuz-2.6.18-5-xen-686 vmlinuz-2.6-xenU
  #ln -s initrd.img-2.6.18-5-xen-686 initrd-2.6-xenU

Configurações de DNS

Para o funcionamento adequado do ganeti é necessário que todos os nodos do cluster resolvam os hostnames uns dos outros e também resolvam os nomes das vms.

Esta configuração pode ser realizada através do arquivo /etc/hosts, entretanto conforme aumentar a quantidade de nodos no cluster e a quantidade de máquinas virtuais se tornará extremamente trabalhoso manter sincronizados este arquivo entre todas as máquinas.

É recomendado configurar um dns interno no cluster para resolver este problema. Aqui no Laboratório de Cluster e Inovação Tecnológica em Cluster e Grid da secretaria foram acrescentadas as seguintes linhas na zona do dominío interno.

  ; Regra para gerar as entradas no bind para as máquinas do blocok
  ; de blocok01 ate blocok11
  $GENERATE 1-11  blocok${0,2,d} IN       A       192.168.10.$
  ;
  ;  Regra para gerar as entradas no bind para as máquinas 1U
  ; de nodo101 ate  nodo116
  $GENERATE 1-16  nodo1${0,2,d}  IN       A       192.168.9.$
  ;
  ;  Regra para gerar as entradas no bind para as máquinas 2U
  ; de nodo201 ate nodo208
  $GENERATE 1-8   nodo2${0,2,d}  IN       A       192.168.9.${16,2,d}
  ;
  ;  Regra para gerar as entradas no bind para as máquinas STORAGE
  ; de nodo301 ate  nodo308
  $GENERATE 1-8   nodo3${0,2,d}  IN       A       192.168.9.${24,2,d}
  ;
  ;  Regra para gerar as entradas no bind para as máquinas IBM
  ; de nodo401 ate nodo408
  $GENERATE 1-8   nodo4${0,2,d}  IN       A       192.168.9.${32,2,d}
  ;
  ;  Regra para gerar as entradas no bind para as máquinas virtuais
  ; de vm01 ate vm253
  $GENERATE 1-253 vm${0,2,d}     IN       A       192.168.8.$

Configuração Grub

Para se obter uma melhor performance é recomendado que o dom0 esteja com o smp desativado.

Edite o arquivo de configuração do grub /boot/grub/menu.lst:

  ## Xen hypervisor options to use with the default Xen boot option
  # xenhopt=dom0_mem=512M
  ## Xen Linux kernel options to use with the default Xen boot option
  # xenkopt=console=tty0 nosmp

As outras opções não devem ser alteradas.

Atualizar o Grub
  #update-grub

Instalando a partir de pacote debian

O ganeti encontra-se disponível no repositório oficial do debian unstable e testing.

Mais informações sobre o pacote do ganeti: http://alioth.debian.org/projects/pkg-ganeti/

Acrescentando repositório do pacote

Para instalar o ganeti em um servidor debian testing ou unstable, não é preciso alterar o sources.list, pois o pacote se encontra no main do repositório oficial debian.

Caso se esteja utilizando o debian etch (stable) é necessário adicionar o repositório do backports.org para efetuar a instalação.

Editar o arquivo /etc/apt/sources.list acrescentando as seguintes linhas:

  deb http://www.backports.org/debian etch-backports main contrib non-free

Atualizando a lista de pacotes do sistema

  #aptitude update

Instalando o pacote do ganeti

  #aptitude -t etch-backports install ganeti

Iniciando o Cluster

  #gnt-cluster init $HOSTNAME 

Caso ocorra tudo certo, parabéns! vc é o mais novo usuário do ganeti.

Instalando o script de sistema operacional

Para que sejam criadas máquinas virtuais é necessário instalar o script de sistema operacional, atualmente encontra-se disponível um script de sistema operacional apenas para o debian etch.

A instalação desse script é realizada da seguinte forma:

  #cd /srv/ganeti/os
  #wget http://ganeti.googlecode.com/files/ganeti-instance-debian-etch-0.4.tar
  #tar xvf instance-debian-etch-0.4.tar 
  #mv  ganeti-instance-debian-etch-0.4  debian-etch
  #rm ganeti-instance-debian-etch-0.4.tar

Utilizando o Ganeti

Segue abaixo algumas das utilizações mais comuns do ganeti:

Comandos do Cluster

Comandos cujas ações são realizadas em todo o cluster.

Obtendo Informações do Cluster
  # gnt-cluster info
  Cluster name: nodo404.labcluster
  Master node: nodo404.labcluster
  Architecture (this node): 64bit (x86_64)
Executando Comandos no Cluster

O comando gnt-cluster command comando executa o argumento comando em todo o cluster.

  ex: 
   #gnt-cluster command hostname 
   ------------------------------------------------
   node: nodo404.labcluster
   nodo404.labcluster
   
   return code = 0
Copiando arquivos no Cluster

O comando gnt-cluster copyfile arquivo irá copiar o argumento arquivo para todos os nodos do cluster.

  #gnt-cluster copyfile /etc/hosts            
Verificando o correto funcionamento do cluster

Para se verificar o funcionamento correto do cluster deve-se utilizar o comando:

  nodo404:~# gnt-cluster verify 
  * Verifying global settings
  * Gathering data (1 nodes)
  * Verifying node nodo404.labcluster
  * Verifying orphan volumes
  * Verifying remaining instances
  nodo404:~# echo $?
  0

Comandos relativos a nodos

Os servidores físicos que rodam o sistema de virtualização xen (dom0), são denominados no ganeti nodos. As operações abaixo são relativas a nodos.

Adicionando Nodos no Cluster

Para se adicionar nodos no cluster, deve ser utilizado o seguinte comando:

  #gnt-node add node_hostname
  ex:
  #gnt-node add node405.labcluster
Listando todos os nodos

Listando todos os nodos:

  # gnt-node list       
  Node               DTotal  DFree MTotal MNode MFree Pinst Sinst
  nodo404.labcluster 128440 128440   8191  7940   127     0     0

DTotal = Capacidade total do disco. Dfree = Capacidade livre do disco Mtotal = Memória Total no nodo. MFree = Memória livre no nodo Pinst = Quantidade de instâncias primárias no nodo Sinst = Quantidade de instâncias secundárias no nodo.

Obtendo Informações dos Nodos
  # gnt-node info    
  Node name: nodo404.labcluster
  primary ip: 192.168.9.36
  secondary ip: 192.168.9.36
  primary for no instances
  secondary for no instances
Removendo Nodos no Cluster

Para se remover nodos no Cluster deve-se utilizar o comando:

  #gnt-cluster remove node_hostname 

Onde node_hostname é o hostname do nodo que se deseja remover.

Comandos relativos a máquinas virtuais

Abaixo segue uma lista dos principais comandos relacionados a máquinas virtuais.

Criando Máquinas Virtuais

Durante a criação da máquina virtual é possivel definir uma série de parâmetros de configuração da mesma, tamanho do disco, quantidade de memória, em qual nodo do cluster a máquina virtual será criada, endereço ip, script de sistema operacional, tipo de disco, se a máquina será configurada em ambiente de alta disponibilidade etc.

Comando exemplo de criação de máquina virtual:

  #gnt-instance add --node=nodo404 -o debian-etch -t plain -s 10g -m 1g vm01.labcluster 
   * creating instance disks...
   adding instance vm01.labcluster to cluster config
   Waiting for instance vm01.labcluster to sync disks.
   Instance vm01.labcluster's disks are in sync.
   creating os for instance vm01.labcluster on node nodo404.labcluster
   * running the instance OS create scripts...
   * starting instance...

Neste comando:

  • A máquina virtual será criada no nodo404
  • Será utilizado o script de sistema operacional debian-etch
  • O tipo do disco será plain
  • O tamanho do disco será 10g
  • A quantidade de memória será 1GB de ram
  • o Hostname da máquina será vm01.labcluster

OBS: É importante que o hostname da máquina seja resolvido para um endereço ip, além disso esse script de sistema operacional padrão cria uma máquina com o mínimo de configuração, sem rede e senha de root em branco.

O log do procedimento de instalação pode ser acompanhado no diretório /var/log/ganeti/os/

Acessando o console da máquina virtual

Para acessar o console da máquina virtual deve ser utilizado o comando gnt-instance console, este comando possibilita acessar o console de máquinas virtuais em qualquer nodo do cluster.

  #ex:
  #gnt-instance console vm01
   
  Debian GNU/Linux 4.0 vm01.labcluster tty1
   
  vm01.labcluster login:

Para sair do console deve-se utilizar o comando: ctrl+]

Iniciando Máquinas virtuais

Para se iniciar máquinas virtuais deve ser utilizado o comando gnt-instance startup.

  ex:
  #gnt-instance startup vm01 
Desligando Máquinas virtuais

Para se desligar máquinas virtuais deve ser utilizado o comando gnt-instance shutdown

  ex:
  #gnt-instance shutdown vm01
Listando as máquinas virtuais

Para se obter uma lista completa de todas as máquinas virtuais no cluster deve ser utilizado o comando gnt-instance list:

  ex
  # gnt-instance list
  Instance        OS          Primary_node       Autostart Status  Memory
  vm01.labcluster debian-etch nodo404.labcluster yes       running   1024
Obtendo informações sobre as máquinas virtuais
  # gnt-instance info 
  Instance name: vm01.labcluster
  State: configured to be up, actual state is up
  Nodes:
   - primary: nodo404.labcluster
   - secondaries: 
  Operating system: debian-etch
  Hardware:
   - memory: 1024MiB
   - NICs: {MAC: aa:00:00:30:49:30, IP: None, bridge: xen-br0}
  Block devices:
   - sda, type: lvm, logical_id: ('xenvg', '2d261939-da8d-45de-9496-497eee50cd4a.sda')
     primary:   /dev/xenvg/2d261939-da8d-45de-9496-497eee50cd4a.sda (254:0)
   - sdb, type: lvm, logical_id: ('xenvg', '737b85c3-76fd-4871-9b22-e09ae1cdd71c.sdb')
     primary:   /dev/xenvg/737b85c3-76fd-4871-9b22-e09ae1cdd71c.sdb (254:1)
Removendo Máquinas Virtuais

Para se remover máquinas virtuais deve ser utilizado o comando: gnt-instance remove:

  ex:
  nodo404:/# gnt-instance remove vm01 
  This will remove the volumes of the instance vm01 (including mirrors),
  thus removing all the data of the instance. Continue?
  y/[n]: y


Alta Disponibilidade
Criação da VM

Criando máquinas virtuais com alta disponibilidade e mirror do disco:

   # gnt-instance add -t remote_raid1 --secondary-node node404.labcluster \
        -s 10g -m 512 -o debian-etch \
        -n node405.labcluster vm02.labcluster

Neste comando:

  • Será criado a máquina virtual vm02.labcluster
  • O nodo primário desta vm será node405.labcluster
  • O nodo secundário desta vm será node404.labcluster
  • O disco será do tipo remote_raid1 que é um drbd criado automaticamente pelo ganeti, entre dispositivos lvm

do primário e do nodo secundário.

  • O tamanho do disco será de 10 GB
  • A quantidade de memória será de 512 MB
  • O script de sistema operacional utilizado será debian-etch.
Failover da VM

Durante o processo de failover da VM, ela é desligada no nó primário e iniciada no nó secundário de maneira automatizada pelo ganeti. O comando que deve ser utilizado para realizar este procedimento é:

  #gnt-instance failover vm02.labcluster

Caso se deseje migrar a máquina virtual de um nodo do cluster que encontra-se desligado ou com problemas deverá ser acrescentado o parâmetro --ignore-consistency

  #gnt-instance failover --ignore-consistency vm02.labcluster

Maiores Informações

Ferramentas pessoais