[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

Configurando un cluster de alta disponibilidad con Heartbeat/DRBD

1. Requisitos Previos

2. Situación actual

3. Configuración DRBD

Configuraremos DRBD para que /dev/sdb sea replicado desde un nodo a otro (los roles pueden ser cambiados en cualquier momento) El nombre del recuso drbd puede ser “repdata” (por supuesto usted puede utilizar el nombre que desee) Aquí está el contenido del fichero /etc/drbd.conf :

 #
 # por favor mire el ejemplo de archivo de configuración en
 # /usr/share/doc/drbd/drbd.conf
 #
 global { usage-count no; }
 resource repdata {
  protocol C;
  startup { wfc-timeout 0; degr-wfc-timeout     120; }
  disk { on-io-error detach; } # or panic, ...
  net {  cram-hmac-alg "sha1"; shared-secret "Cent0Sru!3z"; } # no olvide de  seleccionar una clave para la autenticación!
  syncer { rate 10M; }
  on nodo1.midominio.org {
    device /dev/drbd0;
    disk /dev/sdb;
    address 172.29.156.20:7788;
    meta-disk internal;
  }
  on nodo2.midominio.org {
    device /dev/drbd0;
    disk /dev/sdb;
    address 172.29.156.21:7788;
    meta-disk internal;
  }
}

Replique este fichero de configuración (/etc/drbd.conf) al segundo nodo

scp /etc/drbd.conf root@nodo2:/etc/

Inicie el área meta-data en el disco antes de iniciar drdb (! en ambos nodos!)

[root@nodo1 etc]# drbdadm create-md repdata
v08 Magic number not found
v07 Magic number not found
About to create a new drbd meta data block on /dev/sdb.
. ==> This might destroy existing data! <==
Do you want to proceed? [need to type 'yes' to confirm] yes
Creating meta data... initialising activity log NOT initialized bitmap (256 KB) New drbd meta data block sucessfully created.

Inicie drdb en ambos nodos (service drbd start)

[root@nodo1 etc]# service drbd start
Starting DRBD resources:    [ d0 n0 ]. ......
[root@nodo1 etc]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86) SVN Revision: 2947 build by  buildsvn@c5-i386-build, 2007-07-31 19:17:18
. 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
 . ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
  . resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0 act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
[root@nodo1 etc]# ssh root@nodo2 cat /proc/drbd  version: 8.0.4 (api:86/proto:86) SVN Revision: 2947 build by buildsvn@c5-i386-build, 2007-07-31 19:17:18
. 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
 . ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
  . resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0 act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

Como puede ver, ambos nodos son secundarios, lo cual es normal, necesitamos decidir cual nodo actuará como primario ahora (nodo1): esto iniciará la primera 'sincronización completa' entre los dos nodos:

[root@nodo1 etc]# drbdadm -- --overwrite-data-of-peer primary repdata
[root@nodo1 etc]# watch -n 1 cat /proc/drbd  version: 8.0.4 (api:86/proto:86) SVN Revision: 2947 build by buildsvn@c5-i386-build, 2007-07-31 19:17:18
. 0: cs:SyncTarget st:Primary/Secondary ds:Inconsistent/Inconsistent C r---
 . ns:0 nr:68608 dw:68608 dr:0 al:0 bm:4 lo:0 pe:0 ua:0 ap:0
  . [>...................] sync'ed:  0.9% (8124/8191)M finish: 0:12:05 speed: 11,432 (11,432) K/sec resync: used:0/31 hits:4283 misses:5 starving:0 dirty:0 changed:5 act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

Ahora podremos formatear /dev/drbd0 y montarlo en el nodo1:

Cree algún dato falso en el nodo1:

[root@nodo1 etc]# for i in {1..5};do dd if=/dev/zero of=/repdata/file$i bs=1M count=100;done

Ahora cambie manualmente al segundo nodo:

[root@nodo1 /]# umount /repdata ; drbdadm secondary repdata
[root@nodo2 /]# mkdir /repdata ; drbdadm primary repdata ; mount /dev/drbd0 /repdata
[root@nodo2 /]# ls /repdata/ file1  file2  file3  file4  file5  lost+found

Bien, los datos has sido replicados .... ahora borremos/agreguemos algunos archivos:

[root@nodo2 /]# rm /repdata/file2 ; dd  if=/dev/zero of=/repdata/file6 bs=100M count=2

Ahora cambiemos para el primer nodo :

[root@nodo2 /]# umount /repdata/ ; drbdadm secondary repdata
[root@nodo1 /]# drbdadm primary repdata ; mount /dev/drbd0 /repdata
[root@nodo1 /]# ls /repdata/ file1  file3  file4  file5  file6  lost+found

OK .... Drbd está funcionando ... asegurémosnos que siempre inicie al arrancar:

chkconfig drbd on

4. Configuración Heartbeat V2

Vamos a configurar un simple fichero /etc/ha.d/hs.cf:

keepalive 2
deadtime 30
warntime 10
initdead 120
bcast   eth0
node    nodo1.midominio.org
node    nodo2.midominio.org
crm yes

Cree también /etc/ha.d/authkeys (con permisos 600 !!!) :

auth 1
1 sha1 MySecret

Inicie el servicio heartbeat en el nodo1 :

[root@nodo1 ha.d]# service heartbeat start
Starting High-Availability services: [OK]

Chequee el estado del cluster :

[root@nodo1 ha.d]# crm_mon

Replique ahora los ficheros ha.cf y authkeys para el nodo2 e inicie heartbeat:

[root@nodo1 ha.d]# scp /etc/ha.d/ha.cf /etc/ha.d/authkeys root@nodo2:/etc/ha.d/
[root@nodo2 ha.d]# service heartbeat start

Verifique el cluster con crm_mon:

=====
Last updated: Wed Sep 12 16:20:39 2007
Current DC: nodo1.centos.org (6cb712e4-4e4f-49bf-8200-4f15d6bd7385)
2 Nodes configured.
0 Resources configured.
=====
Node: nodo1.midominio.org (6cb712e4-4e4f-49bf-8200-4f15d6bd7385): online
Node: nodo2.midominio.org (f6112aae-8e2b-403f-ae93-e5fd4ac4d27e): online

ArtWork/WikiDesign/icon-admonition-info.png

NOTA: sobre la GUI - Usted puede instalar heartbeat-gui (yum install heartbeat-gui) en una estación de trabajo X y conectarse al cluster, pero necesitará cambiar la contraseña del usuario hacluster en ambos nodos ! (o usted puede usar otra cuenta pero debe poner esta en el grupo haclient)

Ahora crearemos un grupo de recursos que contengan una dirección ip (172,29,156,200), el dispositivo drbd (de nombre repdata) y la operación de montaje de sistema de archivos (mount /dev/drbd0 /repdata). Esto iniciará todos los recursos de un grupo en orden (ordered=true) y en un nodo (collocated=true).

ArtWork/WikiDesign/icon-admonition-info.png

NOTA: Usar un grupo es más sencillo que usar recursos independientes.

Aquí está el contenido de /var/lib/heartbeat/crb/cib.xml:

<cib generated="false" admin_epoch="0" epoch="25" num_updates="1" have_quorum="true" ignore_dtd="false" num_peers="0" cib-last-written="Sun Sep 16 19:47:18 2007" cib_feature_revision="1.3" ccm_transition="1">
   <configuration>
     <crm_config/>
     <nodes>
       <node id="6cb712e4-4e4f-49bf-8200-4f15d6bd7385" uname="nodo1.midominio.org" type="normal"/>
       <node id="f6112aae-8e2b-403f-ae93-e5fd4ac4d27e" uname="nodo2.midominio.org" type="normal"/>
     </nodes>
     <resources>
       <group id="Mi-Grupo-DRBD" ordered="true" collocated="true">
         <primitive id="IP-Addr" class="ocf" type="IPaddr2" provider="heartbeat">
           <instance_attributes id="IP-Addr_instance_attrs">
             <attributes>
               <nvpair id="IP-Addr_target_role" name="target_role" value="started"/>
               <nvpair id="2e967596-73fe-444e-82ea-18f61f3848d7" name="ip" value="172.29.156.200"/>
             </attributes>
           </instance_attributes>
         </primitive>
         <instance_attributes id="Mi-Grupo-DRBD_instance_attrs">
           <attributes>
             <nvpair id="Mi-Grupo-DRBD_target_role" name="target_role" value="started"/>
           </attributes>
         </instance_attributes>
         <primitive id="DRBD_data" class="heartbeat" type="drbddisk" provider="heartbeat">
           <instance_attributes id="DRBD_data_instance_attrs">
             <attributes>
               <nvpair id="DRBD_data_target_role" name="target_role" value="started"/>
               <nvpair id="93d753a8-e69a-4ea5-a73d-ab0d0367f001" name="1" value="repdata"/>
             </attributes>
           </instance_attributes>
         </primitive>
         <primitive id="FS_repdata" class="ocf" type="Filesystem" provider="heartbeat">
           <instance_attributes id="FS_repdata_instance_attrs">
             <attributes>
               <nvpair id="FS_repdata_target_role" name="target_role" value="started"/>
               <nvpair id="96d659dd-0881-46df-86af-d2ec3854a73f" name="fstype" value="ext3"/>
               <nvpair id="8a150609-e5cb-4a75-99af-059ddbfbc635" name="device" value="/dev/drbd0"/>
               <nvpair id="de9706e8-7dfb-4505-b623-5f316b1920a3" name="directory" value="/repdata"/>
             </attributes>
           </instance_attributes>
         </primitive>
       </group>
     </resources>
     <constraints>
       <rsc_location id="runs_on_pref_node" rsc="Mi-Grupo-DRBD">
         <rule id="prefered_runs_on_pref_node" score="100">
           <expression attribute="#uname" id="786ef2b1-4289-4570-8923-4c926025e8fd" operation="eq" value="nodo1.midominio.org"/>
         </rule>
       </rsc_location>
     </constraints>
   </configuration>
 </cib>

Como puede ver, hemos creado una limitación rsc_location para que los recursos del cluster puedan iniciar en el nodo preferido.

Ahora usted podrá mover recursos a través de cli (crm_resource) o usando la gui (cambie la localización del valor de la regla de limitación – por ejemplo cambiando de nodo1.midominio.org a nodo2.midominio.org y luego haga click en aplicar). Usted será capaz de ver todos los recursos cambiando de un nodo a otro (dirección ip, drbd y sistema de archivos de montaje).


2023-09-11 07:23