Está en la página 1de 13

Zimbra: Cluster DRBD

Hoy con una entrada muy interesante y demandada, Zimbra con Cluster DRBD.

Veo mucho en los foros, que los administradores de Zimbra, preguntan sobre el

sistema DRBD (Distributed Replicated Block Device) para poderlo implementarlo en la

plataforma de Zimbra. Yo personalmente, tengo varios clusters DRBD, pero implementados

con sistemas de Postfix para dar alta disponibilidad (HA) y tolerancia a fallos (FT). Como es

normal, Zimbra no da soporte a instalaciones basadas en este tipo de plataformas, ya

que DRBD no está soportado. Por ese motivo para explicar este despliegue usaré Zimbra

OpenSource y no la versión Network. Para el desarrollo, usaremos tres piezas

fundamentales:

 Zimbra: Poco hay que hablar de este producto

 DRBD: Es el encargado de que los datos se mantengan sincronizados en los dos

servidores

 OCFS2: Es el sistema de ficheros que nos permite Activo/Activo o Activo/Pasivo

¿Por qué usar OCFS2 y no otro tipo de sistema de ficheros? La respuesta es, que solo (que

yo conozca) hay dos sistemas de ficheros que permitan Activo/Activo. Uno es OCFS2 (de

Oracle) y el otro es GFS2, el cual pertenece a RedHat. Si no queréis usar Activo/Activo y lo

que queréis es Activo/Pasivo, os aconsejo usar XFS en vez de los sistemas clásicos, como

podrían ser Ext3 o Ext4, ya que XFS da mejor performance y rendimiento.

El esquema del sistema quedaría de la siguiente manera:


Montaje del sistema
Para que las dos distribuciones de Linux (en nuestro caso Ubuntu 12.04 LTS) estén a la par,

actualizaremos los paquetes la ultima versión:

root@zimbra1:~# aptitude update && aptitude upgrade –y


root@zimbra2:~# aptitude update && aptitude upgrade -y

También es importante que los dos sistemas tengan la misma hora, ya que sinó nos

podemos volver locos con los logs:

root@zimbra1:~# aptitude install ntp ntpdate –y


root@zimbra2:~# aptitude install ntp ntpdate -y

Si lo que realmente queréis es poner en producción este sistema, os aconsejo que uséis la

versión 8.4.4 de DRBD, ya que viene con el “dynamically adaptive resync rate controller”,

cosa que con la versión 8.4.3 (que es la que usaremos) no viene por defecto. A

consecuencia es esto tendremos que ajustar correctamente el valor sync-rate en el fichero de

configuración del DRBD.

Con las distribuciones Ubuntu 12.04 existe un bug, el cual la versión del modulo de DRBD es

la versión 8.4.3 y la versión del userland es la 8.3.11. Es de vital importancia que tanto la

versión de DRBD como la de userland sean la misma. Para que lo entendamos; el userland,
son las herramientas de espacio del usuario que interactúan con el Kernel, de ahí que tengan

que ser la misma versión. Para que esta capa se entienda con el Kernel, lo que haremos es

instalar la versión por defecto de los repositorios de Ubuntu, posteriormente lo eliminaremos

y acto seguido compilaremos la versión correspondiente para que cuadren tanto el modulo

DRBD como el userland:

root@zimbra1:~# aptitude install drbd8-utils –y && aptitude remove drbd8-ut


ils –y

Como podéis ver en la captura anterior, la versión 8.3.11 que nos ofrece la Ubuntu es muy

vieja. Nos descargaremos los paquetes necesarios para poder compilar la versión 8.4.3 y de

esta manera tener una versión más reciente del DRBD

root@zimbra1:~# aptitude install psmisc build-essential flex git xsltproc –


y
root@zimbra1:~# cd /usr/local/src/
root@zimbra1:/usr/local/src# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3
.tar.gz
root@zimbra1:/usr/local/src# tar xzvf drbd-8.4.3.tar.gz
root@zimbra1:/usr/local/src# cd drbd-8.4.3/
root@zimbra1:/usr/local/src/drbd-8.4.3# ./configure && make && make install

Verificaremos que hemos actualizado el DRBD a la versión 8.4.3:

Crearemos la estructura de ficheros para que podamos trabajar de una manera standard, ya

que al compilar el paquete no le hemos pasado ningún parámetro:


root@zimbra1:~# rm -rf /etc/drbd.conf
root@zimbra1:~# rm -rf /etc/drbd.d/
root@zimbra1:~# ln -s /usr/local/etc/drbd.conf /etc/drbd.conf
root@zimbra1:~# ln -s /usr/local/etc/drbd.d /etc/drbd.d

Configuraremos el DRBD:

root@zimbra1:~# vim /usr/local/etc/drbd.d/zimbra_drbd.res


resource r0 {
protocol C;
meta-disk internal;
device /dev/drbd0;
disk /dev/sdb1;
net {
allow-two-primaries;
cram-hmac-alg "sha1";
shared-secret "oscarmash_zimbra";
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
rr-conflict violently;
}

startup {
wfc-timeout 60;
become-primary-on both;
}

syncer { rate 35M; }


on zimbra1 { address 172.30.30.201:7789; }
on zimbra2 { address 172.30.30.202:7789; }
}
Una vez llegado a este punto, es importante conocer y saber bien los valores que ponemos

en cada caso. Os aconsejo que os miréis la documentación de DRBD, ya que es exquisita:

http://www.drbd.org/docs/about/ . La explicación de los valores más interesantes del fichero

de configuración del sistema de DRBD es la siguiente:

 protocol C – Indicamos que el protocolo de comunicación va a ser síncrono. Lo que se

escriba en el disco duro de uno de los nodos, no se considerará acabado hasta que

ambos sistemas den el Ok de escritura. Es el protocolo más usado en instalaciones de

DRBD

 meta-disk internal – indicamos al sistema que el archivo de meta data, será el mismo

que donde tenemos ubicado el disco duro que estamos usando en producción. Cabe

destacar que se necesitará un espacio adicional para poder almacenar los mata data

 wfc-timeout 60 – Le indicamos en segundos el tiempo que el sistema esperará a que

el otro nodo del cluster esté levantado. Pasado este tiempo arrancará los servicios.

Hay que ponerlo, ya que por defecto el tiempo de espera es infinito

 become-primary-on both – Le indicamos al sistema que usaremos Activo/Activo.

 syncer { rate 35M; } – Es el ancho de banda que usará DRBD para hacer la

sincronización en background. Ha de ser el 30% del ancho de banda de nuestra

Ethernet. Supongamos que tenemos una Ethernet de 1GB, que son 125Mb, el 30% de

125 es 37,5…… para hacer números redondos pondremos 35M en nuestro caso.

Como es de suponer, los dos discos duros que hay en cada Ubuntu, tanto en Zimbra 1 como

en Zimbra 2, han de tener el mismo tamaño. Crearemos la partición del disco duro que

posteriormente formatearemos con el sistema de ficheros OCFS2:

root@zimbra1:~# fdisk /dev/sdb


Device contains neither a valid DOS partition table, nor Sun, SGI or OSF di
sklabel
Building a new DOS disklabel with disk identifier 0xd74972ac.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(ri
te)
The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

Command (m for help): n

Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended

Select (default p): p


Partition number (1-4, default 1): 1

First sector (2048-209715199, default 2048):


Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199):
Using default value 209715199

Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.
Syncing disks.

Crearemos el sistema de ficheros del DRBD:


root@zimbra1:~# drbdadm create-md r0

Writing meta data...


initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
Success

Instalamos las herramientas del sistema de ficheros OCFS2, para poder formatear la

partición y que nuestro sistema pueda trabajar con OCFS2:

root@zimbra1:~# aptitude install ocfs2-tools –y

Configuramos el OCFS2:
root@zimbra1:~# vim /etc/ocfs2/cluster.conf
cluster:
node_count = 2
name = zimbra
node:
ip_port = 7777
ip_address = 172.30.30.201
number = 1
name = zimbra1
cluster = zimbra
node:
ip_port = 7777
ip_address = 172.30.30.202
number = 2
name = zimbra2
cluster = zimbra

Arrancamos los servicios de DRBD:


root@zimbra1:~# service drbd start

Al arrancarlo, podremos ver que esta esperando 60 segundos al otro cluster, tal y como le

hemos indicado en el fichero de configuración (/usr/local/etc/drbd.d/zimbra_drbd.res ) del

DRBD en la variable wfc-timeout 60; :

Y podremos ver que actualmente nuestro servidor esta Secondary y desconoce como está el

otro sistema. Es normal que desconozca como está el otro sistema, ya que aún no lo hemos

configurado:

Le indicamos que el nodo 1 (zimbra1) será primario:

root@zimbra1:~# drbdadm -- --overwrite-data-of-peer primary all


Y formateamos la partición de datos que usaremos con el DRBD. Este formateo, solamente

se ha de hacer una vez. Es importante usar la variable mail cuando formateamos la partición,

ya que automáticamente nos hará el sistema de bloques más pequeños, de no ser así

podríamos tener un problema a la larga de INodes: el problema consiste en que si hacemos

un df –h, veremos que nos queda espacio libre, pero el sistema nos dirá que no left space, y

al hacer un df –i, veremos que los INodos están al 100%:

root@zimbra1:~# mkfs.ocfs2 --label ocfs2-zimbra -T mail /dev/drbd0

Le indicamos al sistema que cuando arranque nos monté la partición, pero hasta que no

estén levantadas las tarjetas de red, no lo monte. Esto se hace con la opción _netdev:

root@zimbra1:~# echo "/dev/drbd0 /opt ocfs2 noauto,noatime,nodiratime,_n


etdev 0 0" >> /etc/fstab

Ahora hemos de realizar los mismos pasos en el segundo servidor de Zimbra, excepto estos

dos pasos:

root@zimbra2:~# drbdadm -- --overwrite-data-of-peer primary all


root@zimbra2:~# mkfs.ocfs2 --label ocfs2-zimbra -T mail /dev/drbd0

En el momento de levantar los servicios del DRBD del Zimbra2, ya podremos observar que

las dos particiones están Primary/Primary y que los datos se replican del Zimbra 1 al Zimbra

2:

Ahora hemos de ser pacientes y esperar a que se repliquen los datos desde el Zimbra1 al

Zimbra2. Cargamos los modulos a mano, para poder montar la partición en los dos

servidores de Zimbra

root@zimbra1:~# service o2cb load

Y ya para acabar, necesitamos habilitar el sistema OCFS2 que arranque con el sistema

operativo y de esta manera nos cargue los modulos, lo podemos hacer mediante el wizard

que nos proporciona el paquete deb. Una vez lanzado, si queremos modificarlo

manualmente, hay que editar el fichero: /etc/default/o2cb . Para realizar esta operación

simplemente hay que lanzar el siguiente comando en los dos servidores:

root@zimbra1:~# dpkg-reconfigure ocfs2-tools


Ahora ya, solamente nos queda montar el sistema de ficheros, en los dos sistemas:

Instalamos las dependencias de Zimbra, en los dos servidores:

root@zimbra1:~# aptitude install libgmp3c2 libperl5.14 pax sysstat sqlite3


–y
root@zimbra2:~# aptitude install libgmp3c2 libperl5.14 pax sysstat sqlite3
–y

Y empezamos la instalación únicamente en el primer servidor de Zimbra, ya que en el

segundo servidor realizaremos una instalación Dummy:

root@zimbra1:~# cd /usr/local/src/zcs-8.0.6_GA_5922.UBUNTU12_64.20131203103
702/
root@zimbra1:/usr/local/src/zcs-8.0.6_GA_5922.UBUNTU12_64.20131203103702# .
/install.sh

No voy a entrar, en como se instala el sistema de Zimbra, ya que Jorge tiene un magnifico

HowTo de como instalarlo:http://www.jorgedelacruz.es/2013/04/12/instalando-zimbra-8-0-

3-ubuntu-12-04/. Ahora hacemos una Dummy instalación en el segundo servidor de Zimbra.

Este tipo de instalación, lo que hace es instalar los servicios de Zimbra cogiendo por defecto

los valores que encuentre en el directorio opt:

root@zimbra2:~# cd /usr/local/src/zcs-8.0.6_GA_5922.UBUNTU12_64.20131203103
702/
root@zimbra2:/usr/local/src/zcs-8.0.6_GA_5922.UBUNTU12_64.20131203103702# .
/install.sh -s

Durante la instalación el wizard de nos indicará si queremos borrar el directorio /opt/zimbra,

indicarle que no. Esto es debido a que al instalarlo en el servidor de Zimbra 1, el DRBD ha

replicado toda la partición /opt, contra nuestro servidor de Zimbra 2:

Como ya hemos comentado anteriormente, Zimbra no es una plataforma que soporte

Activo/Activo, por ese motivo aconsejo encarecidamente, deshabilitar los servicios de

arranque del segundo cluster (zimbra2) y solamente levantarlos en el momento que

tengamos algún tipo de problema con el primer cluster (Zimbra 1)

root@zimbra2:/usr/local/src/zcs-8.0.6_GA_5922.UBUNTU12_64.20131203103702# u
pdate-rc.d -f zimbra remove

También podría gustarte