Gerenciamento de Cluster · 8 min read · Jan 30, 2026
Gerenciamento de Cluster Xen Com Ganeti No Debian Lenny
Gerenciamento de Cluster Xen Com Ganeti No Debian Lenny
Versão 1.0
Autor: Falko Timme
Ganeti é um sistema de gerenciamento de virtualização de cluster baseado em Xen. Neste tutorial, explicarei como criar uma máquina virtual Xen (chamada de instância) em um cluster de dois nós físicos e como gerenciar e transferir essa instância entre os dois nós físicos.
Este documento vem sem garantia de qualquer tipo! Não dou nenhuma garantia de que isso funcionará para você!
[Atualização 21/01/2010] Recebi uma mensagem da equipe de desenvolvimento do Ganeti:
“ […] Nos últimos meses, notamos o infeliz fato de que as pessoas tentam seguir suas instruções à risca e acabam instalando versões antigas ou muito antigas do Ganeti. Você poderia, por favor, atualizar ambos os tutoriais com notas dizendo que eles não estão atualizados para versões mais recentes do Ganeti e pedir às pessoas que consultem a documentação atualizada em http://docs.ganeti.org/ganeti/? “
Este tutorial é baseado em uma versão antiga do Ganeti. Consulte a documentação atualizada em http://docs.ganeti.org/ganeti/.
1 Nota Preliminar
Neste tutorial, usarei os nós físicos node1.example.com e node2.example.com:
- node1.example.com: endereço IP 192.168.0.100; será o mestre do cluster.
- node2.example.com: endereço IP 192.168.0.101; será o nó primário da máquina virtual (também conhecida como instância).
Ambos têm um disco rígido de 500GB, dos quais uso 20GB para a partição /, 1GB para swap e deixo o restante não particionado para que possa ser usado pelo Ganeti (o mínimo é 20GB!). Claro, você pode alterar a partição conforme sua preferência, mas lembre-se do espaço mínimo não utilizado.
O cluster que vou criar será chamado cluster1.example.com e terá o endereço IP 192.168.0.102. O IP do cluster 192.168.0.102 estará sempre vinculado ao mestre do cluster, então mesmo que você não saiba qual nó é o mestre, pode usar o IP do cluster (ou o nome do host cluster1.example.com) para se conectar ao mestre usando SSH.
A máquina virtual Xen (chamada de instância na linguagem do Ganeti) será nomeada inst1.example.com com o endereço IP 192.168.0.105. inst1.example.com será espelhada entre os dois nós físicos usando DRBD - você pode ver isso como uma espécie de RAID1 de rede.
Como você vê, node1.example.com será o mestre do cluster, ou seja, a máquina a partir da qual você pode controlar e gerenciar o cluster, e node2.example.com será o nó primário de inst1.example.com, ou seja, inst1.example.com será executada em node2.example.com (com todas as alterações em inst1.example.com espelhadas de volta para node1.example.com com DRBD) até que você transfira para node1.example.com (se você quiser desligar node2.example.com para manutenção, por exemplo). Esta é uma configuração ativa-passiva.
Acho que é uma boa prática dividir os papéis entre os dois nós, para que você não perca o mestre do cluster e o nó primário ao mesmo tempo, caso um nó falhe.
É importante que todos os nomes de host mencionados aqui sejam resolvíveis para todos os hosts, o que significa que eles devem existir no DNS ou você deve colocar todos os nomes de host em todos os arquivos /etc/hosts em todos os hosts (que é o que farei aqui).
Todos os nós do cluster devem usar a mesma interface de rede (por exemplo, eth0). Se um nó usar eth0 e o outro eth1, o Ganeti não funcionará corretamente.
Ok, vamos começar…
2 Preparando Os Nós Físicos
node1:
Quero que node1 tenha o endereço IP estático 192.168.0.100, portanto, meu arquivo /etc/network/interfaces fica assim (por favor, note que substituí allow-hotplug eth0 por auto eth0; caso contrário, reiniciar a rede não funciona, e teríamos que reiniciar todo o sistema):
vi /etc/network/interfaces| # A interface de rede de loopback auto lo iface lo inet loopback # A interface de rede primária #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |
Se você modificou o arquivo, reinicie sua rede:
/etc/init.d/networking restartEm seguida, edite /etc/hosts. Deixe assim:
vi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # As linhas a seguir são desejáveis para hosts compatíveis com IPv6 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
Em seguida, devemos garantir que os comandos
hostnamee
hostname -fimprimam o nome completo do host (node1.example.com). Se você obtiver algo diferente (por exemplo, apenas node1), faça o seguinte:
echo node1.example.com > /etc/hostname
/etc/init.d/hostname.sh startDepois, os comandos de hostname devem mostrar o nome completo do host.
Em seguida, atualize o sistema:
aptitude updateaptitude safe-upgradenode2:
Agora fazemos o mesmo novamente em node2.example.com (por favor, tenha em mente que node2 tem um IP diferente!):
vi /etc/network/interfaces| # A interface de rede de loopback auto lo iface lo inet loopback # A interface de rede primária #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.101 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |
/etc/init.d/networking restartvi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # As linhas a seguir são desejáveis para hosts compatíveis com IPv6 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
echo node2.example.com > /etc/hostname
/etc/init.d/hostname.sh startaptitude updateaptitude safe-upgrade3 Configurando LVM No Espaço Livre Do HDD
node1/node2:
Vamos descobrir sobre nosso disco rígido:
fdisk -lnode1:~# fdisk -l
Disco /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Identificador do disco: 0x00023cd1
Dispositivo Boot Início Fim Blocos Id Sistema
/dev/sda1 * 1 62 497983+ 83 Linux
/dev/sda2 63 6141 48829567+ 8e Linux LVM
node1:~#Agora criaremos a partição /dev/sda3 (em ambos os nós físicos) usando o restante do disco rígido e a prepararemos para LVM:
fdisk /dev/sdanode1:~# fdisk /dev/sda
O número de cilindros para este disco está definido como 60801.
Não há nada de errado com isso, mas isso é maior que 1024,
e pode, em certas configurações, causar problemas com:
- software que é executado no momento da inicialização (por exemplo, versões antigas do LILO)
- software de inicialização e particionamento de outros SOs
(por exemplo, DOS FDISK, OS/2 FDISK)
Comando (m para ajuda): <– n
Ação do comando
e estendido
p partição primária (1-4)
<– p
Número da partição (1-4): <– 3
Primeiro cilindro (6142-60801, padrão 6142): <– ENTER
Usando o valor padrão 6142
Último cilindro ou +tamanho ou +tamanhoM ou +tamanhoK (6142-60801, padrão 60801): <– ENTER
Usando o valor padrão 60801
Comando (m para ajuda): <– t
Número da partição (1-4): <– 3
Código hexadecimal (tipo L para listar códigos): <– L
0 Vazio 1e Oculto W95 FAT1 80 Antigo Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / antigo Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 oculto C: c6 DRDOS/sec (FAT-
5 Estendido 41 PPC PReP Boot 85 Linux estendido c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2ª parte 88 Linux plaintext de Dell Utility
9 AIX inicializável 4f QNX4.x 3ª parte 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 acesso DOS
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext’d (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Oculto FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Diagnóstico Compaq 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Oculto FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Oculto FAT16 63 GNU HURD ou Sys ab Darwin boot f2 DOS secundário
17 Oculto HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Oculto W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Oculto W95 FAT3 75 PC/IX
Código hexadecimal (tipo L para listar códigos): <– 8e
Mudou o tipo do sistema da partição 3 para 8e (Linux LVM)
Comando (m para ajuda): <– w
A tabela de partições foi alterada!
Chamando ioctl() para reler a tabela de partições.
AVISO: Reler a tabela de partições falhou com erro 16: Dispositivo ou recurso ocupado.
O kernel ainda usa a tabela antiga.
A nova tabela será usada na próxima reinicialização.
Sincronizando discos.
node1:~#
Agora vamos dar uma olhada em nosso disco rígido novamente:
fdisk -l
node1:~# fdisk -l
Disco /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Identificador do disco: 0x00023cd1
Dispositivo Boot Início Fim Blocos Id Sistema
/dev/sda1 * 1 62 497983+ 83 Linux
/dev/sda2 63 6141 48829567+ 8e Linux LVM
/dev/sda3 6142 60801 439056450 8e Linux LVM
node1:~#
Parece bom. Agora devemos reiniciar ambos os nós físicos para que o kernel possa ler a nova tabela de partições:
reboot
Após a reinicialização, instalamos o LVM (provavelmente já está instalado, mas é melhor ter certeza):
aptitude install lvm2
Após a reinicialização, preparamos /dev/sda3 para LVM em ambos os nós e a adicionamos ao grupo de volumes xenvg:
pvcreate /dev/sda3
vgcreate xenvg /dev/sda3
(O Ganeti quer usar um grupo de volumes próprio, por isso criamos xenvg; teoricamente poderíamos usar um grupo de volumes existente com espaço não alocado suficiente, mas o comando gnt-cluster verify reclamará sobre isso.)Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.