Xenganetidrbd
De Xen-BR wiki
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.
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