Instalación y configuración del Cluster hasta la versión VIVAit 3.3

De VIVAitwiki
Ir a la navegaciónIr a la búsqueda
1 HEARTBEAT

El funcionamiento en cluster se basa en:

  • Heartbeat: IP flotante entre las dos máquinas que componen el cluster; típicamente este "latido" entre máquinas se realizará mediante conexión directa con cable cruzado para asegurar que no existan problemas de comunicaciones tales como retardo, pérdida de paquetes, etc en este latido y pueda ser causa de un balanceo inadecuado.
Nota 17-11-2015: Se ha realizado en un cliente un cluster distribuido, con dos servidores en diferentes sedes, realizando el heartbeat mediante enlace Gigabit. Si bien la solución no está validada por desarrollo, se está observando el funcionamiento.
  • DRBD se encargar de mantener una serie de carpetas totalmente replicadas entre los dos nodos; dichas carpetas son:


El cluster es activo/pasivo; la máquina activa posee la IP flotante y tiene arrancados los servicios.

1.1 Configuración del cluster

Para montar un cluster de asterisk partimos de la siguiente situación inicial:

  • Dos maquinas con VIVAit Call 3.0 instalado.
  • El driver bonding de Interfaces de Red en Ubuntu Server.

Los pasos a seguir para la configuración en el Ubuntu Server son los siguientes:

  • Instalar ifenslave:
aptitude install ifenslave.
Finalizada la instalación, comprobamos que la instalación de Bonding se ha configurado para empezar desde el arranque del sistema operativo desde el fichero /etc/modules:
vi /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
lp
rtc
bonding
  • Crear o editar el archivo llamado /etc/modprobe.d/bonding.conf y añadir la siguiente linea en negrita:
echo "alias bond0 bonding"> /etc/modprobe.d/bonding.conf
  • Editar el fichero /etc/network/interfaces y añadir lo que esta en negrita:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback

# Bonding

#em1 ip manual y esclavo en el "bond0" NIC
auto em1
iface em1 inet manual
bond-master bond0
bond-primary em0 

#em2 ídem, creando así un vínculo de enlace 2.
auto em2
iface em2 inet manual
bond-master bond0
auto bond0
iface bond0 inet static
        address 10.255.255.11
       netmask 255.255.255.0
       gateway 10.255.255.254
bond-mode active-backup
bond-miimon 100
bond-slaves none

# em3 replica entre servidores
auto em3
iface em3 inet static
        address 10.255.254.10
       netmask 255.255.255.0

# em4 gestion
auto em4
iface em4 inet static
        address 172.17.47.255
        netmask 255.255.0.0
  • Reiniciamos el sistema para que el kernel tome los cambios.
  • Comprobación que en las dos maquinas el archivo /etc/host contenga el los nombre de las dos maquinas a vincular. En el ejemplo el archivo en ambas maquinas es:
127.0.0.1       localhost

10.255.255.11   vivaitcall-CL-UAH-1

10.255.255.12   vivaitcall-CL-UAH-2

10.255.255.10   vivaitcall-CL-UAH

10.255.255.10   BDTR

10.255.254.10   vivaitcall-CL-UAH-1-em3

10.255.254.11   vivaitcall-CL-UAH-2-em3


  • Creamos dos particiones iguales en ambos ordenadores , usando el comando parted.
root@vivaitcall-CL-UAH-1:~# parted /dev/sda
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p free
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start   End     Size    File system     Name  Flags
       17,4kB  262kB   245kB   Free Space

1      262kB   1000MB  1000MB  fat32                 boot
2      1000MB  201GB   200GB   ext4
3      201GB   217GB   16,0GB  linux-swap(v1)
4      217GB   237GB   20,0GB  ext4
       237GB   1000GB  763GB   Free Space

(parted) mkpart primary 237GB 1000GB
(parted) p free
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start   End     Size    File system     Name     Flags
       17,4kB  262kB   245kB   Free Space
1      262kB   1000MB  1000MB  fat32                    boot
2      1000MB  201GB   200GB   ext4
3      201GB   217GB   16,0GB  linux-swap(v1)
4      217GB   237GB   20,0GB  ext4
5      237GB   1000GB  763GB                   primary  No File System como ext4
       1000GB  1000GB  204kB   Free Space
(parted)quit
mkfs.ext4 /dev/sda5
root@vivaitcall-CL-UAH-1:~# parted /dev/sda
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p free
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start   End     Size    File system     Name     Flags
       17,4kB  262kB   245kB   Free Space
1      262kB   1000MB  1000MB  fat32                    boot
2      1000MB  201GB   200GB   ext4
3      201GB   217GB   16,0GB  linux-swap(v1)
4      217GB   237GB   20,0GB  ext4
5      237GB   1000GB  763GB                   primary
       1000GB  1000GB  204kB   Free Space
(parted) rm 5
(parted) mkpart primary 237GB 1000GB
(parted) p free
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name     Flags
       17,4kB  262kB   245kB   Free Space
1      262kB   1000MB  1000MB  fat32                    boot
2      1000MB  201GB   200GB   ext4
3      201GB   217GB   16,0GB  linux-swap(v1)
4      217GB   237GB   20,0GB  ext4
5      237GB   1000GB  763GB   ext4            primary  Si File Sytem ext4
       1000GB  1000GB  204kB   Free Space
(parted)quit
  • Instalar los paquetes necesarios para el drbd. En Ubuntu server 14.04 ya está instalado.
aptitude install drbd8-utils  
aptitude update (si no instala el drbd8-utils actualizar)
aptitude install drbd8-utils  (volver a lanzar)

 

  • Creamos el archivo /etc/drbd.conf en ambas maquinas:
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
resource MDcluster {
        protocol C;
        on vivaitcall-CL-UAH-1 {
              device /dev/drbd0;
              disk /dev/sda5;
              address 10.255.254.10:7788;
              meta-disk internal;
       }
       on vivaitcall-CL-UAH-2 {
              device /dev/drbd0;
              disk /dev/sda5;
              address 10.255.254.11:7788;
              meta-disk internal;
       }
       disk {
              on-io-error detach;
       }
       net {
              max-buffers 2048;
              ko-count 4;
       }
       syncer {
              rate 100M;
              al-extents 257;
       }
       startup {
               wfc-timeout 0;
               degr-wfc-timeout 120;
       }
}
  • Reiniciamos el sistema para que el kernel tome los cambios.
  • Inicializamos el recurso, para ello primero deberemos crear los recursos DRBD teclearemos en ambas maquinas. Desde /etc.
 drbdadm create-md MDcluster  (no y yes )
Si tenemos algún problema porque ya exista sistema de ficheros.
dd if=/dev/zero of=/dev/sda5 bs=1M count=128
drbdadm create-md MDcluster  (no y yes )
  • Reiniciamos ambas maquinas para que su kernel tome los cambios.
  • Levantamos el servicio del DRBD en ambos servidores (nos preguntara que si queremos enviar los datos a los desarrolladores de drbd) tecleando no, no se envían.
service drbd start
/etc/init.d/drbd start
Ahora ambas maquinas son secundarias.
Indicar cual de las dos maquinas usaremos como primaria, por tanto en la maquina elegida habra que ejecutar:
drbdadm -- --overwrite-data-of-peer primary all (en una máquina)
Nota: La ip virtual que va a estar asignada a la maquina activa es 172.25.129.70.
Podemos teclear el comando cat para ver si esta sincronizando y su progreso:
cat /proc/drbd
Nota: El servicio DRBD  aparecera como Primary/Secondary  si ejecutamos en el primario ; 
y aparecerá 'Secondary/Primary' si lo ejecutamos en el secundario. 
  • Instalación de los script de arranque:
update-rc.d -f drbd remove (en las dos maquinas)
update-rc.d drbd start 13 2 3 4 5 . stop 87 0 1 6 . (en las dos máquinas)
  • Seleccionar la fuente de sincronización.
Formateamos un disco de la maquina que queramos que funcione como fuente del servicio DRBD, para evitar conflictos:
mkfs.ext4  /dev/drbd0
Creamos el directorio sobre el que vamos a montar el disco, en ambas maquinas.
mkdir  /HDcluster
Creamos un archivo dentro /HDcluster de que se verá solo cuando el disco no está montado en ambas maquinas.
touch sinMontar
Nota: Este archivo nos puede servir para monitorizar mediante zabbix, nagios, ... que el disco no está montado.
 En una de las maquinas montamos el disco (desde fuera del directorio HDcluster)
mount  /dev/drbd0 /HDcluster
  • Procedemos a mover todos los datos que necesitemos en este disco y a crear accesos directos, los directorios que vamos a mover son los siguientes:
/etc/asterisk
/var/lib/asterisk
/usr/lib/asterisk
/usr/spool/asterisk
/var/lib/mysql
/var/tftp/
El procedimiento que vamos a seguir es el siguiente, en el primer ordenador:
Cd /HDcluster
tar -zcvf etc-asterisk.tgz /etc/asterisk
tar -zxvf  etc-asterisk.tgz
rm -rf /etc/asterisk
ln -s /HDcluster/etc/asterisk /etc/asterisk
tar -zcvf var-lib-asterisk.tgz /var/lib/asterisk
tar -zxvf  var-lib-asterisk.tgz
rm -rf /var/lib/asterisk
ln -s /HDcluster/var/lib/asterisk /var/lib/asterisk
tar -zcvf usr-lib-asterisk.tgz /usr/lib/asterisk
tar -zxvf  usr-lib-asterisk.tgz
rm -rf /usr/lib/asterisk
ln -s /HDcluster/usr/lib/asterisk /usr/lib/asterisk
tar -zcvf var-spool-asterisk.tgz /var/spool/asterisk
tar -zxvf  var-spool-asterisk.tgz
rm -rf /var/spool/asterisk
ln -s /HDcluster/var/spool/asterisk /var/spool/asterisk
tar -zcvf var-lib-mysql.tgz /var/lib/mysql
tar -zxvf  var-lib-mysql.tgz
rm -rf /var/lib/mysql
ln -s /HDcluster/var/lib/mysql /var/lib/mysql
tar -zcvf var-lib-phoneprov-tftp.tgz /var/lib/phoneprov-tftp/
tar -zxvf  var-lib-phoneprov-tftp.tgz
rm -rf /var/lib/phoneprov-tftp/
ln -s /HDcluster/var/lib/phoneprov-tftp /var/lib/phoneprov-tftp
En la segunda maquina debemos borrar los directorios y crear los accesos directos.
rm -rf /etc/asterisk
ln -s /HDcluster/etc/asterisk /etc/asterisk
rm -rf /var/lib/asterisk
ln -s /HDcluster/var/lib/asterisk /var/lib/asterisk
rm -rf /usr/lib/asterisk
ln -s /HDcluster/usr/lib/asterisk /usr/lib/asterisk
rm -rf /var/spool/asterisk
ln -s /HDcluster/var/spool/asterisk /var/spool/asterisk
rm -rf /var/lib/mysql
ln -s /HDcluster/var/lib/mysql /var/lib/mysql
rm -rf /var/lib/phoneprov-tftp
ln -s /HDcluster/var/lib/phoneprov-tftp /var/lib/phoneprov-tftp
  • Configurar heartbeat para las dos maquinas.
Instalamos heartbeat en las dos maquinas. En UBUNTU Server 14.04 ya está instalado.
aptitude install heartbeat
Debemos modificar 3 ficheros en cada una de las maquinas, estos se encuentran en /etc/ha.d. El primer fichero a modificar es ha.cf.:
En la maquina vivaitcall-CL-UAH-1 es: 
root@vivaitcall-CL-UAH-1:~# cat /etc/ha.d/ha.cf
# Explicacion en /usr/share/doc/heartbeat/ha.cf.gz

udpport 694
baud 19200
auto_failback off
use_logd yes
crm no

# Temporizaciones en segs
logfacility local0
keepalive 2
deadtime 8
warntime 16
initdead 64
deadping 6

#ucast bond0 vivaitcall-CL-UAH-1
ucast bond0 vivaitcall-CL-UAH-2

#ucast em3 vivaitcall-CL-UAH-1-em3
ucast em3 vivaitcall-CL-UAH-2-em3

#Ping a puerta de enlace,gw1,gw2,gw3,gw4
ping_group red_local 10.255.255.12

respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

node vivaitcall-CL-UAH-1
node vivaitcall-CL-UAH-2
Y en la maquina vivaitcall-CL-palacio-2 es:
root@vivaitcall-CL-UAH-1:~# cat /etc/ha.d/ha.cf
# Explicacion en /usr/share/doc/heartbeat/ha.cf.gz

udpport 694
baud 19200
auto_failback off
use_logd yes
crm no

# Temporizaciones en segs
logfacility local0
keepalive 2
deadtime 8
warntime 16
initdead 64
deadping 6

ucast bond0 vivaitcall-CL-UAH-1
#ucast bond0 vivaitcall-CL-UAH-2

ucast em3 vivaitcall-CL-UAH-1-em3
#ucast em3 vivaitcall-CL-UAH-2-em3

#Ping a puerta de enlace gw1 gw2 gw3 gw4
ping_group red_local 10.255.255.12

respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

node vivaitcall-CL-UAH-1
node vivaitcall-CL-UAH-2
Nota: El parámetro auto_failback se utiliza para indicar si queremos que al recuperarse una maquina adquiera los recursos sobre los que tiene prioridad.
El segundo fichero es authkeys,, este fichero es el mismo en ambas maquinas:
chmod 600 authkeys (importante)
auth 1
1 sha1 claveSecretaATope
El tercer fichero haresources, donde especificaremos en las dos maquinas que deben apuntar a la maquina que queremos que tenga prioridad en la adquisición de los recursos, este fichero es el mismo en las dos maquinas:
MÁQUINA 1 -> vivaitcall-CL-palacio-1 hb_mdtel
MÁQUINA 2-> vivaitcall-CL-palacio-1 hb_mdtel 
Copiaremos en el directorio /etc/ha.d/resource.d/ los scripts de arranque con permisos 755 (lo podemos hacer mediante WINSCP). Los scripts se encuentran en C:\Documents and Settings\javier.gutierrez.MDTEL\Mis documentos\Centrales\Asterisk\Cluster\scripts.
chmod 755 hb_catalina
chmod 755 hb_mdtel
chmod 755 hb_mdtel_firewall
Deberemos editar el archivo hb_mdtel
(IP flotante a.b.c.d./mask) 10.255.255.10
CAD_IP_FLOTA=10.255.255.10/24/bond0
  • Paramos el proceso myAcdSuperv.
mv /etc/rc2.d/S02myAcdSuperv s02myAcdSuperv
  • Reiniciamos ambas maquinas para que su kernel tome los cambios.

[| Volver al índice]

1.2 Comprobación de buen funcionamiento del cluster
  • La maquina activa tiene que tener en HDcluster montado el disco con todos sus directorios y la maquina inactiva no (tenemos que ver el archivo que hemos creado "sinMontar"). 
  • La ip virtual tiene que estar en la maquina activa (ifconfig) y no tiene que estar en la inactiva. 
  • El asterisk tiene que estar arrancado en la maquina activa y parado en la inactiva. 
  • Tecleando la ip de la maquina activa en un navegador debemos acceder al portal de vivait-call y en la inactiva no debe de estar activo. 
  • Para cambiar el cluster manualmente podemos utilizar los siguientes comandos:
 /usr/share/heartbeat/hb_takeover
La maquina desde la que se ejecuta se convierte en la maquina activa
 /usr/share/heartbeat/hb_standby
La maquina desde la que se ejecuta deja de ser la maquina activa
1.3 Notas para MySQL

Si mysql es parte del cluster tenemos que tener en cuenta dos cosas:

  • El archivo /etc/mysql/debían.cnf contiene una clave que debe ser igual en ambas maquinas y debe ser la clave de la máquina de donde cojamos la base de datos.
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = AI6AdPtnhLUrNm1S
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user     = debian-sys-maint
password = AI6AdPtnhLUrNm1S
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

  • El archivo /etc/apparmor.d/usr.sbin.mysqld contiene donde pueden estar ubicados los archivos de mysql, al cambiar su ubicación y poner un enlace directo en /var/lib/mysql si no modificamos este archivo mysql no arrancara al no tener la nueva ubicación entre sus localizaciones permitidas. Este es un ejemplo de las líneas que debemos añadir.
/var/run/mysqld/mysqld.sock w, (copiar después de esta linea)

#//!!
  /HDcluster/var/lib/mysql/ r,
  /HDcluster/var/lib/mysql/** rwk,
  #//!!
1.4 Notas de desincronización

EL servicio del DRBD esta iniciado pero al teclear el comando cat /proc/drbd para ver si esta sincronizando se presenta "primary/unknown" y/o secondary/unknown ".

  • En el nodo primary
drbdadm connect all 
  • En el nodo secondary
drbdadm disconnect all  
drbdadm -- --discard-my-data connect all
1.5 Adaptar red a cliente

Para adaptar la red de los equipos al entorno del cliente hay que editar los siguientes ficheros:

/etc/network/interfaces
/etc/resolv.conf
/etc/hosts
/etc/ha.d/resource.d/hb_mdtel
/etc/ha.d/ha.cf 
- TFTP: 
/etc/inetd.conf (IP del cluster)

Tras la modificaciones oportunas, se debe reiniciar las dos máquinas para cargar las nuevas configuraciones.