Instalación y configuración del Cluster hasta la versión VIVAit 3.3
De VIVAitwiki
Ir a la navegaciónIr a la búsquedaSumario
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.
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.