viernes, 22 de julio de 2016

CentOS-6 : Alta Disponibilidad activo/pasivo con Crosync-Pacemaker + DRBD (III)

Configuración del Cluster





    Observaciones


  • Desactivamos firewall y SELinux en ambos nodos.
  • El usuario administrador del cluster será hacluster.
  • Desactivaremos el Quorum, trabajando con dos nodos no tiene sentido.
  • El nombre elegido para el cluster es BP.
  • Daremos preferencia a node-1 para trabajar como Master.
  • Crearemos los siguientes recurosos para el DRBD.
    • Para los datos : BP_data.
    • Para la sincronización : BP_syncro.
    • Para el filesystem : BP_fs.


Instalamos paquetes en ambos nodos:

yum install corosync pcs pacemaker cman



Configuramos la contraseña para el usuario hacluster:

[node-1]# passwd hacluster
[node-2]# passwd hacluster



Configuramos servicios:

[node-1]# service pcsd start
[node-2]# service pcsd start


[node-1]# chkconfig pcsd on
[node-1]# chkconfig pacemaker on

[node-2]# chkconfig pcsd on
[node-2]# chkconfig pacemaker on



Autenticamos los nodos:

[node-1]# pcs cluster auth node-1 node-2

Username: hacluster
Password: 
node-1: Authorized
node-2: Authorized



Creamos el cluster:

[node-1] mkdir /etc/cluster
[node-2] mkdir /etc/cluster

[node-1]# pcs cluster setup --name BP node-1 node-2

node-1: Updated cluster.conf...
node-2: Updated cluster.conf...

Synchronizing pcsd certificates on nodes node-1, node-2...
node-1: Success
node-2: Success

Restarting pcsd on the nodes in order to reload the certificates...
node-1: Success
node-2: Success



Arrancamos el cluster:

[node-1]# pcs cluster start --all
node-1: Starting Cluster...
node-2: Starting Cluster...



Comprobamos el estado del cluster:

node-1]# pcs status cluster

Cluster Status:
 Last updated: Tue Mar  1 04:58:26 2016
 Last change: Tue Mar  1 04:57:52 2016
 Stack: cman
 Current DC: server2 - partition with quorum
 Version: 1.1.11-97629de
 2 Nodes configured
 0 Resources configured

PCSD Status:
  node-1: Online
  node-2: Online



[node-2]# pcs status cluster

Cluster Status:
 Last updated: Tue Mar  1 05:00:33 2016
 Last change: Tue Mar  1 04:57:52 2016
 Stack: cman
 Current DC: server2 - partition with quorum
 Version: 1.1.11-97629de
 2 Nodes configured
 0 Resources configured

PCSD Status:
  node-1: Online
  node-2: Online




Comprobamos el status de los nodos:

[node-1]# pcs status nodes

Pacemaker Nodes:
 Online: node-1 node-2
 Standby:
 Maintenance:
 Offline:
Pacemaker Remote Nodes:
 Online:
 Standby:
 Maintenance:
 Offline:


[node-2]# pcs status nodes

Pacemaker Nodes:
 Online: node-1 node-2
 Standby:
 Maintenance:
 Offline:
Pacemaker Remote Nodes:
 Online:
 Standby:
 Maintenance:
 Offline:


[node-1]# pcs status corosync

Nodeid     Name
   1   node-1
   2   node-2


[node-2]# pcs status corosync

Nodeid     Name
   1   node-1
   2   node-2




Comprobamos el status general:

[node-1]# pcs status

Cluster name: BP
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Thu Jul  7 13:16:43 2016  Last change: Thu Jul  7 13:14:47 2016 by root via crmd on node-2
Stack: cman
Current DC: node-2 (version 1.1.14-8.el6-70404b0) - partition with quorum
2 nodes and 0 resources configured

Online: [ node-1 node-2 ]

Full list of resources:


PCSD Status:
  node-1: Online
  node-2: Online



Desactivamos el fenced:

[node-1]# pcs property set stonith-enabled=false



Desactivamos el quorum:

[node-1]# pcs property set no-quorum-policy=ignore



Comprobamos las propiedades del clsuter:

[node-1]# pcs property

Cluster Properties:
 cluster-infrastructure: cman
 dc-version: 1.1.14-8.el6-70404b0
 have-watchdog: false
 no-quorum-policy: ignore
 stonith-enabled: false



Añadimos la IP Virtual:

[node-1]# pcs resource create IpVirt ocf:heartbeat:IPaddr2 ip=192.168.0.4 cidr_netmask=32 op monitor interval=30s



Añadimos los servicios MySQl y Tomcat:

[node-1]# pcs resource create MySQL ocf:heartbeat:mysql op monitor interval="20" timeout="60"

[node-1]# pcs resource create Tomcat lsb:tomcat



Vincularemos la Ip Virtual a los servicios para que trabajen siempre juntos:

[node-1]#pcs constraint colocation add Tomcat MySQL INFINITY



Forzamos a que inicie primero la IP Virtual y luego los servicios:

[node-1]# pcs constraint order IpVirt then Tomcat  

Adding IpVirt Tomcat (kind: Mandatory) (Options: first-action=start then-action=start)

[node-1]# pcs constraint order Tomcat then MySQL

Adding Tomcat MySQL (kind: Mandatory) (Options: first-action=start then-action=start)



Damos preferencia al nodo que hará de master:

[node-1]# pcs constraint location MySQL prefers node-1=50
[node-1]# pcs constraint location Tomcat prefers node-1=50



Comprobamos restricciones:

[node-1]# pcs constraint

Location Constraints:
  Resource: MySQL
    Enabled on: node-1 (score:50)
  Resource: Tomcat
    Enabled on: node-1 (score:50)
Ordering Constraints:
  start IpVirt then start Tomcat (kind:Mandatory)
  start Tomcat then start MySQL (kind:Mandatory)
Colocation Constraints:
  Tomcat with MySQL (score:INFINITY)



Gestión del DRBD



Creamos un nuevo CIB (Cluster Infromation Base):

[node-1]# pcs cluster cib add_drbd
[node-1]# ls -al add_drbd

-rw-r--r-- 1 root root 10665  7 jul 13:28 add_drbd

[node-1]# pcs -f add_drbd resource create BP_data ocf:linbit:drbd drbd_resource=data op monitor interval=60
[node-1]# pcs -f add_drbd resource master BP_data_sync BP_data master-max=1 master-node-max=1 clone-max=2\
 clone-node-max=1 notify=true



Consultamos la configuración del CIB:

[node1]# pcs -f add_drbd resource show

IpVirt (ocf::heartbeat:IPaddr2): Started node-1
 MySQL (ocf::heartbeat:mysql): Started node-1
 Tomcat (lsb:tomcat): Started node-1
 Master/Slave Set: BP_data_sync [BP_data]
     Stopped: [ node-1 node-2 ]



Activamos la configuración del CIB :

[node1]# pcs cluster cib-push add_drbd

CIB updated

[node-1]# pcs cluster cib add_fs
[node-1]# pcs -f add_fs resource create BP_fs Filesystem device="/dev/drbd1" directory="/data" fstype="ext3"



El filesystem debe estar disponible en el Master :

[node1]# pcs -f add_fs constraint colocation add BP_fs BP_data_sync INFINITY with-rsc-role=Master



Debe arrancar antes DRBD para que el filesystem este disponible :

[node-1]# pcs -f add_fs constraint order promote BP_data_sync then start BP_fs Adding BP_data_sync BP_fs
Adding BP_data_sync BP_fs (kind: Mandatory) (Options: first-action=promote then-action=start)



El filesystem debe estar montado antes de que arranque los servicios :

[node-1]# pcs -f add_fs  constraint order BP_fs then MySQL
Adding BP_fs MySQL (kind: Mandatory) (Options: first-action=start then-action=start)

[node-1]# pcs -f add_fs constraint order BP_fs then Tomcat
Adding BP_fs Tomcat (kind: Mandatory) (Options: first-action=start then-action=start)




Forzamso a todos los recursos a trabajar juntos :

[node-1]# pcs -f add_fs constraint colocation add BP_fs Tomcat IpVirt MySQL INFINITY with-rsc-role=Master 



Aplicamos cambios :

[node1]# pcs cluster cib-push add_fs
CIB updated



Comprobamos restricciones :

[node-1]# pcs constraint

Location Constraints:
  Resource: MySQL
    Enabled on: node-1 (score:50)
  Resource: Tomcat
    Enabled on: node-1 (score:50)
Ordering Constraints:
  start IpVirt then start Tomcat (kind:Mandatory)
  start Tomcat then start MySQL (kind:Mandatory)
  promote BP_data_sync then start BP_fs (kind:Mandatory)
  start BP_fs then start MySQL (kind:Mandatory)
  start BP_fs then start Tomcat (kind:Mandatory)
Colocation Constraints:
  Tomcat with MySQL (score:INFINITY)
  BP_fs with BP_data_sync (score:INFINITY) (with-rsc-role:Master)
  BP_fs with MySQL (score:INFINITY) (rsc-role:Started) (with-rsc-role:Master)




jueves, 21 de julio de 2016

CentOS-6 : Alta Disponibilidad activo/pasivo con Crosync-Pacemaker + DRBD (II)

Configuración DRBD



    Observaciones


  • En este ejemplo trabajaremos con una sola tarjeta de red, pero es aconsejable utilizar dos. Una de ellas en exclusiva para la sincronización DRBD y siempre que sea físicamente posible directa, sin pasar por switch.
  • Partimos de la base que tenemos en ambos nodos un partición reservada para el DRBD. Esta será exactamente del mismo tamaño y la identificaremos como /dev/sdb1
  • Identificaremos la partición del DRBD como /dev/drbd1
  • El nombre del recurso compartido será data
  • En ambos nodos el recuros se montará en el punto de montaje que creamos en el primer capítulo: /data


Editaremos correctamente el fichero "/etc/hosts" en ambos nodos :

192.168.0.2     node-1
191.168.0.3     node-2


Configuración del fichero "/etc/drbd.conf"

resource data {
protocol C;

handlers {pri-on-incon-degr "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f"; }
startup { wfc-timeout 5; degr-wfc-timeout 120; }
disk { on-io-error detach; }

net {
        cram-hmac-alg sha1;
        shared-secret "afsa6eert7";
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;

}


syncer { rate 100M; }

 on BBDD1-act {
   device    /dev/drbd1;
   disk      /dev/sdb1;
   address   192.168.0.2:7789;
   meta-disk internal;
 }
 on BBDD1-pas {
   device    /dev/drbd1;
   disk      /dev/sdb1;
   address   192.168.0.3:7789;
   meta-disk internal;
 }
}



Creamos el recurso :


nodo-1# drbdadm create-md data                
nodo-2# drbdadm create-md data                


node-1# service drbd start               
node-2# service drbd start                


Convertimos node-1 en el nodo primario :

node-1# drbdadm — --overwrite-data-of-peer primary data



Formateamos la partición :
En este caso se utiliza ext3, pero puede utilizarse el filesystem que mas convenga.

node-1# mkfs.ext3 /dev/drbd1       


Montamos la partición :

node-1# mount /dev/drbd1 /data    


Atomáticamente las particiones DRBD de ambos nodos emepezarán a sincronizarse.
Podemos seguir el proceso ejecutando :

#watch -n1 service drbd status 


Procederemos a linkar MySQL y Tomcat en el recurso compartido DRBD

Proceso de linkado en "node-1" :



-----------------MySQL--------------------------------------------------------------------------




cp -av /var/lib/mysql /data/
mv /var/lib/mysql /var/lib/mysql.org
ln -s /data/mysql /var/lib/
chown -h mysql:mysql /var/lib/mysql
cp -av /etc/my.cnf /data/etc/
mv /etc/my.cnf /etc/my.cnf.org
ln -s /data/etc/my.cnf /etc/

chkconfig mysqld off

service mysqld start
service mysqld stop


-----------------------Tomcat-------------------------------------------------------------------



cp -av /var/lib/tomcat /data
mv /varlib/tomcat /var/lib/tomcat.org
cp -av /usr/share/tomcat /usr/share/tomcat.org

mkdir -p /data/tomcat
cp -av /var/cache/tomcat /data/cache/
mv /var/cache/tomcat /var/cache/tomcat.org

mkdir -p /data/etc

cp -av /etc/tomcat /data/etc/
mv /etc/tomcat /etc/tomcat.org
ln -s /data/etc/tomcat /etc/
chgrp -h tomcat /etc/tomcat

unlink /usr/share/tomcat/conf
ln -s /data/etc/tomcat /usr/share/tomcat/conf
chgrp -h tomcat /usr/share/tomcat/conf

unlink /usr/share/tomcat/temp
ln -s /data/cache/tomcat/temp /usr/share/tomcat/temp
chgrp -h tomcat /usr/share/tomcat/temp

unlink /usr/share/tomcat/webapps
ln -s /data/tomcat/webapps /usr/share/tomcat/webapps


unlink /usr/share/tomcat/work
ln -s /data/cache/tomcat/work /usr/share/tomcat/work
chgrp -h tomcat /usr/share/tomcat/work

chkconfig tomcat off


Comprobamos servicios en "node-1" :


service tomcat start
service tomcat stop


Proceso de linkado en "node-2" :



----------------MySQL--------------------------------------------------------------------


mv /var/lib/mysql /var/lib/mysql.org
ln -s /data/mysql /var/lib/
chown -h mysql:mysql /var/lib/mysql
mv /etc/my.cnf /etc/my.cnf.org
ln -s /data/etc/my.cnf /etc/

chkconfig mysqld off




--------------Tomcat--------------------------------------------------------------------


mv /varlib/tomcat /var/lib/tomcat.org
cp -av /usr/share/tomcat /usr/share/tomcat.org

mv /var/cache/tomcat /var/cache/tomcat.org


mv /etc/tomcat /etc/tomcat.org
ln -s /data/etc/tomcat /etc/
chgrp -h tomcat /etc/tomcat

unlink /usr/share/tomcat/conf
ln -s /data/etc/tomcat /usr/share/tomcat/conf
chgrp -h tomcat /usr/share/tomcat/conf

unlink /usr/share/tomcat/temp
ln -s /data/cache/tomcat/temp /usr/share/tomcat/temp
chgrp -h tomcat /usr/share/tomcat/temp

unlink /usr/share/tomcat/webapps
ln -s /data/tomcat/webapps /usr/share/tomcat/webapps

unlink /usr/share/tomcat/work
ln -s /data/cache/tomcat/work /usr/share/tomcat/work
chgrp -h tomcat /usr/share/tomcat/work

chkconfig tomcat off


Comprobamos servicios en "node-2" :



node-1# umount /data
node-1# drbdadm secondary data

node-2# drbdadm primary data
node-2# mount /dev/drbd1 /data
node-2# service tomcat start
node-2# service mysqld start


Detenemos servicios y desmontamos filesystem del DRBD :



node-2# service tomcat stop
node-2# service mysqld stop
node-2# umount /data
node-2# drbdadm secondary data


miércoles, 20 de julio de 2016

CentOS-6 : Alta Disponibilidad activo/pasivo con Crosync-Pacemaker + DRBD (I)

Configuración de los servicios


    Observaciones:

  • Vamos a instalar Tomcat-7 con la versión Java 1.7 de Sun Microsystem, para MySQL y Tomcat utilizaremos la versión del repositorio oficial de CentOS. Los nodos van a tener los nombres de host y las IPS que se muestran en el gráfico.
  • Hasta ahora hemos trabajado con tomcat dentro del directorio "/opt/tomcat", para adaptarnos a la nueva HA y conservar lo máximo posible nuestra estructura deberemos modificar parte de la estructura de directorios original.

Tomcat

En ambos nodos:

yum install epel-release
yum install tomcat



Por defecto, CentOS nos instalará OpenJDK con Tomcat-7
Para ello deberemos localizarlos y desinstalarlos :


rpm -qa | grep java
java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
java-1.8.0-openjdk-headless-1.8.0.91-1.b14.el6.x86_64
java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64
java_cup-0.10k-5.el6.x86_64
tzdata-java-2016e-1.el6.noarch

rpm -e --nodeps java-1.5.0-gcj java-1.8.0-openjdk-headless java-1.8.0-openjdk java_cup-0.10k tzdata-java


rpm -qa | grep jakarta
jakarta-commons-collections-3.2.1-3.5.el6_7.noarch
jakarta-commons-pool-1.3-12.7.el6.x86_64
jakarta-commons-daemon-1.0.1-8.9.el6.x86_64
jakarta-commons-dbcp-1.2.1-13.9.el6.noarch
jakarta-commons-logging-1.0.4-10.el6.noarch


rpm -e --nodeps jakarta-commons-collections jakarta-commons-pool jakarta-commons-daemon jakarta-commons-dbcp\ 
jakarta-commons-logging


Descargaremos e instalaremos el Java de Sun :

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F;\
 oraclelicense=accept-securebackup-cookie"\
 "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm"

rpm -Uvh jdk-7u79-linux-x64.rpm 


Comprobamos versión :

#java -version

java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)


Iniciamos el servicio y comprobamos versión:
#service tomcat start

#tomcat version

Server version: Apache Tomcat/7.0.65
Server built:   Jan 6 2016 18:50:03 UTC
Server number:  7.0.65.0
OS Name:        Linux
OS Version:     2.6.32-573.el6.x86_64
Architecture:   amd64
JVM Version:    1.7.0_79-b15
JVM Vendor:     Oracle Corporation



MySQL

En ambos nodos:

yum install mysql-server
service mysqld start
service mysqld stop



DRBD

En ambos nodos:
yum install drbd83 kmod-drbd83    
yum install gnutls* ipvsadm*   


mkdir /data



CentOS-6 : Alta Disponibilidad activo/pasivo con Crosync-Pacemaker + DRBD



Configuración de un cluster en activo/pasivo compartiendo datos mediante DRBD y gestionando los servicios :


.- MySQL

.- Tomcat

.- IP Virtual



1.- Configuración de los Servicios (I)

2.- Configuración DRBD (II)

3.- Configuración del Cluster (III)

4.- Gestión Cluster (IV)