Ganeti

¿Qué es Ganeti y para qué sirve? ¶

Ganeti es un sistema administrador de clusters basado en Xen, el cual integra un conjunto de herramientas, a saber:

* LVM
* XEN
* DRBD

que permiten facilitarle al administrador la gestión de servidores virtuales. Es opensource creada por Google. Posee capacidad de debootstraping.
Documentación Posta

* http://code.google.com/p/ganeti/

Jerga de ganeti

* Nodo: equipo físico, contenedor de máquinas virtuales.
* Instancia: máquina virtual administrada por el cluster.

Requesitos obligatorios

* Un Volume Group de al menos de 20GB, para almacenamiento de las máquinas virtuales.
* Resolución para el cluster ganeti, diferente de la resolución del nodo primario que forma parte del cluster.
* Xen.
* Configuración de bridge para Xen.

Requisitos opcionales

* Drbd.

Instalación

Suponiendo una distribución Debian.

apt-get install ganeti

La versión utilizada y probada es la 1.2.6-3.

Configuración del cluster
Configuración de red para el ganeti cluster

1. Obligatoriamente el Xen inicial debe estar trabajando en modo bridge.

marte:# cat /etc/network/interfaces

allow-hotplug xenbr0
auto xenbr0
iface xenbr0 inet static
address 10.0.0.2
netmask 255.255.255.0
network 10.0.0.0
gateway 10.0.0.1
pre-up ifconfig eth4 up
bridge_ports eth4
bridge_stp off
bridge_fd 0

2. Resolución propia para el cluster y diferente de la resolución del nodo master.

marte:/srv/ganeti/os# cat /etc/hosts

10.0.0.4 cluster1.intranet cluster1

3. Definición del hostname

marte:# echo "marte.intranet" > /etc/hostname
marte:# /etc/init.d/hostname.sh start

Sí o sí la salida del comando hostname debe ser marte.intranet, si devuelve tan solo marte las configuraciones sgtes. no funcionarán.

4. Configuración final de red

marte:/srv/ganeti/os# ifconfig

eth4 Link encap:Ethernet HWaddr 00:22:19:18:29:7b
inet6 addr: fe80::222:19ff:fe18:297b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:727133 errors:0 dropped:0 overruns:0 frame:0
TX packets:39613 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:150008152 (143.0 MiB) TX bytes:5237793 (4.9 MiB)
Interrupt:16 Memory:da000000-da012100

xenbr0 Link encap:Ethernet HWaddr 00:22:19:18:29:7b
inet addr:10.0.0.2 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::222:19ff:fe18:297b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:724972 errors:0 dropped:0 overruns:0 frame:0
TX packets:36700 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:136587142 (130.2 MiB) TX bytes:4721560 (4.5 MiB)

xenbr0:0 Link encap:Ethernet HWaddr 00:22:19:18:29:7b
inet addr:10.0.0.4 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Inicialización del cluster ganeti

1. Inicializo el cluster. Para esto es necesario especificar: el nombre del volume group el cual almacenará las instancias ganeti (máquinas virtuales); y el bridge por defecto.

# gnt-cluster init -g vgganeti --bridge=xenbr0 cluster1.intranet

2. Compruebo el paso anterior.

# gnt-node list

Node DTotal DFree MTotal MNode MFree Pinst Sinst
marte.intranet 95368 0 32762 1024 30768 0 0

Incorporación de un nodo al cluster

Hasta aquí el nodo marte es el único nodo que conforma el cluster (denominado cluster1). Para agregar un nuevo nodo (venus.intranet) al mismo, es necesario:

1. Redefinir el hostname del nodo

venus:~# echo "venus.intranet" > /etc/hostname && /etc/init.d/hostname.sh start;

2. Regenerar par de claves ssh. la clave DEBE SER dsh.

marte:~/.ssh# rm id_dsa*
marte:~/.ssh# ssh-keygen -t dsa

3. Decirle a ganeti que incorporo un nuevo nodo al cluster.

marte:~/.ssh# gnt-node add venus.intranet

4. Compruebo que el nodo antes agregado forme parte del cluster.

marte:~/.ssh# gnt-node list

Node DTotal DFree MTotal MNode MFree Pinst Sinst
marte.intranet 445244 438588 32762 1024 31024 2 0
venus.intranet 445244 445244 32762 1024 31280 0 0

Generación de templates de Sistema Operativo

Según la documentación de ganeti se pueden generar diferentes templates de sistemas operativos a partir de debootstrap.

1. La disponibilidad de los S.O se pueden ver a través del sgte. comando:

marte:# gnt-os list

Name
debian-etch
debootstrap

2. Si se desea generar otros templates de S.O es necesario instalar el sgte. paquete:

marte:# apt-get install ganeti-instance-debootstrap

3. Configuración para el debootsrap de las variables: $MIRROR, $PROXY,$ARCH y $LENNY.

marte:~# vi /etc/default/ganeti-instance-debootstrap

4. Adaptación del script create de deboostrap

marte:/srv/ganeti/os/rect64# vi create

Administración de instacias
Definición del kernel que usarán las instancias (domU)

marte:/boot# ln -s vmlinuz-2.6.26-1-xen-amd64 vmlinuz-2.6-xenU
marte:/boot# ln -s initrd.img-2.6.26-1-xen-amd64 initrd-2.6-xenU

Creación de una instancia

El comando que spre. se utilizará a nivel instancia (antes domU) será spre. gnt-instance con diferentes combinaciones de parámetros según se requiera, a saber:

* -t plain: indica que las particiones de la instancia serán LVM.
* -n marte: la instancia se creará en el node (antes denominado dom0) marte.
* -o rect64: la instancia se creará a partir del template utilizado en rectorado rect64.
* -s 3g: tamaño de la partición /dev/sda de la instancia.
* --swap-size 256: tamaño de la partición de swap de la instancia.
* -m 64: cant. de memoria asignada a la instancia.
* --mac 00:16:3e:00:00:25: mac asignada a la instancia, que en el caso de estar declarada dn DHCP+DNS la misma levantará con red configurada.
* minmei: nombre de la instancia, spre. debe ser el último parámetro.

marte:~# gnt-instance add -t plain -n marte.intranet -o rect64 -s 3g --swap-size 256 -m 64 --mac 00:16:3e:00:00:25 --no-start minmei

Levantar una instancia

Luego de crear una instancia, es OBLIGATORIO correr los sgtes. dos comandos. NO USAR COMANDOS DE XEN.

gnt-instance startup --extra "xencons=tty1 console=tty1" minmei
gnt-instance console minmei

Verificar estado de una instancia

Una instancia luego de estar creada, puede estar corriendo o pausada. El sgte. comando permite verificar cualq. de los casos antes mencionados. Ver la columna Status.

gnt-instance list

Instance OS Primary_node Status Memory
minmei.intranet rect64 marte.intranet running 64

Ver información general de una instancia

La información gral. comprende: nodo en el cual está creada la instancia, tipo de S.O, kernel, memoria, cant. de CPUS, mac, bridge y devices.

marte:~# gnt-instance info Instance name:
minmei.intranet

State: configured to be up, actual state is up
Considered for memory checks in cluster verify: True
Nodes:
- primary: marte.intranet
- secondaries:
Operating system: rect64
Kernel path: (default: /boot/vmlinuz-2.6-xenU)
initrd: (default: /boot/initrd-2.6-xenU)
Hardware:
- VCPUs: 1
- memory: 64MiB
- NICs: {MAC: 00:16:3e:00:00:25, IP: None, bridge: xenbr0}
Block devices:
- sda, type: lvm, logical_id: (u'vgganeti', u'316f28b2-e8c1-4618-b329-504656abc1ba.sda')
primary: /dev/vgganeti/316f28b2-e8c1-4618-b329-504656abc1ba.sda (254:1)
- sdb, type: lvm, logical_id: (u'vgganeti', u'a78b14a1-4f77-424a-af57-8e30fd3d2ba6.sdb')
primary: /dev/vgganeti/a78b14a1-4f77-424a-af57-8e30fd3d2ba6.sdb (254:2)


Modificar tamaño de una instancia

Que pasa si el /dev/sda de la instancia es de 2GB y necesito hacerlo crecer a 4GB?? A continuación se encuentran en orden los comandos para extender (no disminuir) una partición en una instancia.

marte:~# gnt-instance grow-disk minmei sda 2g
marte:~# gnt-instance stop minmei
marte:~# gnt-instance startup --extra "xencons=tty1 console=tty1" minmei
marte:~# gnt-instance console minmei

Loguearse a la instancia y dentro de la misma ejecutar:

minmei:~# resize2fs /dev/sda

Reasignar memoria a una instancia

El cambio debe hacerse desde el cluster.

marte:~# gnt-instance modify -m 128 minmei

All the changes take effect at the next restart. If the instance is
running, there is no effect on the instance.

No hay comentarios.: