Heartbeat como complemento del DRBD

En una entrada anterior, explique la instalación y la configuración del DRBD, ahora vamos a complementarlo con el Hearbeat. DRBD nos va a controlar la función de servidor primario/secundario y Heartbeat nos va a controlar los servicios a levantar.

Partiremos de la configuración que hicimos para el DRBD y añadiremos una interfaz de red virtual a cada uno de los servidores.

Accedemos a /etc/network/ en drbd1:

# vim interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.10.1.200
netmask 255.255.255.0
gateway 10.10.1.1
broadcast 10.10.1.255

auto eth0:1
iface eth0:1 inet static
address 10.10.1.210
netmask 255.255.255.0
netwotk 10.10.1.1
broadcast 10.10.1.255

Guardamos

# ifup eth0:1
# /etc/init.d/networking restart

Repetimos configuración para el drbd2 pero cambiando la ip:

eth0 10.10.1.201 y eth0:1 10.10.1.210

Instalamos en los dos:

drdb1 y drbd2

Sigue leyendo

DRBD en Debian Squeeze

Para esta instalación partimos de dos nodos iguales, drbd1 y drbd2, los dos tienen dos discos, uno de 2gb (SO) uno de 1gb (datos).

Instalamos en los dos:

drbd1 y drbd2

# apt-get install drbd8-utils ntp ntpdate

Cargamos el modulo del DRBD en el kernel:

# modprobe drbd

Miramos si ha cargado:

# lsmod | grep drbd

La salida en pantalla tendrá que ser parecida a esta:

root@drbd1:~# lsmod | grep drbd
drbd                     193296    0
lru_cache               5042     1     drbd
cn                             4563     1     drbd

root@drbd2:~# lsmod | grep drbd
drbd                    193296     0
lru_cache               5042     1     drbd
cn                             4563     1     drbd

Ahora  hacemos una copia del original /etc/drbd.conf

# cp /etc/drbd.conf drbd.conf.old

Editamos el fichero de configuración que acabamos de copiar:

# vim /etc/drbd.conf

Introducimos la configuración en los dos nodos: (ojo a la nomenclatura de los puntos de montaje, yo tengo xvda2 porque estoy en maquinas virtuales, usar dmesg para ver la descripción correcta)

global { usage-count no; }
common { syncer { rate 100M; } }
resource r0 {
protocol C;
startup {
become-primary-on drbd1;
}
net {
cram-hmac-alg sha1;
shared-secret “secret”;
}
on drbd1 {
device /dev/drbd0;
disk /dev/xvda3;
address 10.10.1.200:7788;
meta-disk internal;
}
on drbd2 {
device /dev/drbd0;
disk /dev/xvda3;
address 10.10.1.201:7788;
meta-disk internal;
}
}

Inicializamos el contenedor de los datos en los dos nodos:

# drbdadm create-md r0

root@drbd1:/# drbdadm create-md r0
Writing meta data…
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
root@drbd1:/#

root@drbd2:/# drbdadm create-md r0
Writing meta data…
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
root@drbd2:/#

Levantamos el servicio DRBD en ambos nodos:

# /etc/init.d/drbd start

root@drbd1:/# /etc/init.d/drbd start
Starting DRBD resources:[ d(r0) s(r0) n(r0) ].
root@drbd1:/#

root@drbd2:/# /etc/init.d/drbd start
Starting DRBD resources:[ d(r0) s(r0) n(r0) ].
root@drbd2:/#

El siguiente paso solo lo haremos en el drbd1, que sera hacerle nodo primario, con lo que empezara la sincronización entre el dbrd1 y dbrd2:

# drbdadm -- --overwrite-data-of-peer primary all

En el drbd2 podremos ver el progreso de la sincronización:

# cat /proc/drbd

root@drbd2:/# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r—-
ns:0 nr:471696 dw:471696 dr:0 al:0 bm:28 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:552236
[========>………..] sync’ed: 46.4% (552236/1023932)K
finish: 0:00:40 speed: 13,592 (12,748) K/sec
root@drbd2:/#

Nos dice Secondary/Primary al ser el nodo secundario y si hacemos  cat /proc/drbd en drbd1 nos dira Primary/Secondary por ser el nodo primario:

# cat /proc/drbd

root@drbd1:/# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r—-
ns:1023932 nr:0 dw:0 dr:1024132 al:0 bm:63 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
root@drbd1:/#

Crearemos el sistema de ficheros (ext3) en el segundo disco que tenemos (1gb en mi caso) y lo montaremos en el directorio /datos. Esta acción la haremos solo en el drbd1:

# mkfs.ext3 /dev/drbd0

root@drbd1:/# mkfs.ext3 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
64000 inodes, 255983 blocks
12799 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=264241152
8 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376

Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
root@drbd1:/#

# mkdir /datos
# mount /dev/drbd0 /datos

Y comprobamos que esta montado:

# mount

root@drbd1:/# mount
/dev/xvda2 on / type ext3 (rw,noatime,nodiratime,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/drbd0 on /datos type ext3 (rw)
root@drbd1:/#

Vamos a probar que todo lo que acabamos de hacer funciona, creo una carpeta dentro del directorio /datos del drbd1 que sera replicado en el drbd2:

# mkdir /datos/fotos
# ls -l /datos/

root@drbd1:/# ls -l /datos/
total 20
drwxr-xr-x 32 root root  4096 Oct 17 00:28 fotos
root@drbd1:/#

Desmontamos la partición /datos del drbd1:

# umount /datos

Y asignamos el rol secundario al drbd1:

# drbdadm secondary r0

Asignamos el rol primario al drbd2:

# drbdadm primary r0

Comprobamos que sea así, Primary/Secondary en drbd2:

root@drbd2:/# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r—-
    ns:0 nr:1192488 dw:1192488 dr:200 al:0 bm:63 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
root@drbd2:/#

Crearemos en el drbd2 el directorio /datos y montaremos /dev/drbd0

# mkdir /datos
#mount /dev/drbd0

Comprobamos el contenido del directorio /datos:

# ls -l

root@drbd2:/# ls -l /datos/
total 20
drwxr-xr-x 32 root root  4096 Oct 17 00:28 fotos
drwx——  2 root root 16384 Oct 17 00:20 lost+found
root@drbd2:/#

Por ultimo, comprobaremos el cambio de rol en el drbd1 que estará en Secondary/Primary:

# cat /proc/drbd

root@drbd1:/# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r—-
    ns:1192488 nr:4 dw:168560 dr:1024449 al:46 bm:81 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
root@drbd1:/#

Siguiente paso hearbeat para que automatice.

Fuentes:

DRBD Debian GNU/Linux


dpkg y apt (aptitude), herramientas de gestión de paquetes de Debian

apt – Herramienta avanzada de paquetes

La configuración de los repositorios está en /etc/apt/source.list.

Actualizar la base de datos de los programas disponibles.

# apt-get update

Actualizará todo el sistema, con las nuevas versiones de los programas descargadas después de usar el comando update.

# apt-get upgrade

Actualizará de la versión instalada en el equipo a la siguiente.

# apt-get dist-upgrade

Instalación de paquetes.

# apt-get install nombre_paquete

Simula la instalación.

# apt-get -s install nombre_paquete

Borra los paquetes instalados.

# apt-get remove nombre_paquete

Borra los paquetes instalados (como remove) y los archivos de configuración.

# apt-get purge nombre_paquete

Borrado de librerías que quedan huérfanas.

# apt-get autoremove

Borra el repositorio local que contiene los ficheros de los paquetes descargados.

# apt-get clean

Fuerza acabar instalaciones anteriores.

# apt-get -f install

Busca el paquete en la base de datos.

# apt-cache search nombre_paquete

Muestra la información del paquete.

# apt-cache show nombre_paquete

Un poco de humor.

# apt-get moo

 

aptitude – interfaz de alto nivel para la gestión de paquetes

El funcionamiento es igual que apt

# aptitude install nombre_paquete

 

dpkg – Gestor de paquetes de Debian

Manejador de paquetes que permite la instalación, desintalación y consulta de información de paquetes con extensión .deb.

Lista los paquetes instalados.

# dpkg -l

Instala un fichero .deb.

# dpkg -i nombre_paquet.deb

Reconfigura el paquete.

# dpkg-reconfigure nombre_paquete

Información del fichero.

# dpkg -I nombre_paquete.deb

Borra el paquete instalado.

# dpkg -r nombre_paquete

Borra el paquete y los ficheros de configuración.

# dpkg --purge nombre_paquete

 

Mas información.

# man apt
# man aptitude
# man dpkg

 

 

Formateo de discos

Lo primero que tenemos que hacer, es ver donde esta dentro de nuestro equipo:

#dmesg

……….

[    2.026644] sd 0:0:0:0: [sdb] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
[    2.026738] sd 0:0:0:0: [sdb] Write Protect is off
[    2.026742] sd 0:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    2.026780] sd 0:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn’t support DPO or FUA
[    2.026984]  sdb:
[    2.050874] sd 0:0:0:0: [sdb] Attached SCSI disk
[    2.354354] sr0: scsi3-mmc drive: 48x/48x writer dvd-ram cd/rw xa/form2 cdda tray

……….

#fdisk /dev/sdb (donde sdX es el punto que le dio el equipo)
opcion p (lista las tablas de particiones)
opcion n (añade una nueva partición)
opcion p (para partición primaria)
opcion 1 (para el numero de la partición)
opcion 1 (en este caso 1 uno representa el comienzo del disco)
opcion (tamaño)(intro tomara todo el tamaño o le daremos el tamaño a mano "ejemplo +40GB")
opcion p (lista las tablas de particiones)
opcion w (Escribe la tabla en el disco y sale)

Si quisiéramos y tuviéramos espacio en el disco para añadir mas particiones, repetiríamos los pasos.

Ahora formateamos la partición nueva

#mkfs.ext3 /dev/sdXX (XX representa el disco)

Cuando termine el mkfs, pedirá hacer esto:

#tune2fs -c0 -i0 /dev/sdXX (XX representa el disco)

Ya tenemos nuestro nuevo disco formateado.