divendres, 29 de març de 2013

Balancing a RHEL HA Cluster

L'objectiu d'aquesta entrada es donar les eines necessaries per a podre realitzar un balanceig d'un node a un altre en una arquitectura RHEL HA cluster. Per a poder assolir aquesta tasca, el primer que necessitarem serà poder obtenir informació detallada de l'estat del cluster.

Mostrar Informacio del Cluster:

Per revisar el status del cluster pots utilitzar:

# clustat
Cluster Status for TEST @ Thu Mar 28 09:21:04 2013
Member Status: Quorate

 Member Name                             ID   Status
 ------ ----                             ---- ------
 test1-cluster                               1 Online, Local, rgmanager
 test2-cluster                               2 Online, rgmanager

 Service Name                   Owner (Last)                   State
 ------- ----                   ----- ------                   -----
 service:Apache                 test1-cluster                 started

El Status que mostra la comanda correspon al següent:
  • Online: El node esta operatiu i el servei cman(cluster) esta funcionant i es accecible.
  • Local: Mostra el host, a dins del qual hem llançat la comanda clustat. Si llances la comanda des de l'altra màquina aquesta etiqueta apareixera en l'altre membre.
  • rgmanager: Mostra si el servei Resource Group Manager (rgmanager) esta funcionant en el node. Si aquesta etiqueta no es mostra en l'estat d'un node llavors aquest node no podra recibir un failover. 

La linia Member Status: Quorate ens mostra que el quorum ha estat assolit. Un cluster de dos nodes només necessita un sol node per a estar en el estat de Quorum.

També podem utilitzar la opció -l ens mostra l'ID del membre des del que l'estem
executant.
# clustat -l
Cluster Status for TEST @ Thu Mar 28 15:33:23 2013
Member Status: Quorate

 Member Name                               ID   Status
 ------ ----                               ---- ------
 test1-cluster                                 1 Online, Local, rgmanager
 test2-cluster                                 2 Online, rgmanager
 

Service Information
------- -----------

Service Name      : service:Apache
  Current State   : started (112)
  Flags           : none (0)
  Owner           : test1-cluster
  Last Owner      : test2-cluster
  Last Transition : Thu Mar 28 14:51:39 2013

La opcio -i actualitza la informació de la comanda cada X segons. La següent comanda realitzaria un refresc cada 10 segons.
# clustat -i 10 

Amb cman_tool status mostrem la percepcio local de l'estat del cluster.
# cman_tool  status
Version: 6.2.0
Config Version: 37
Cluster Name: Apache

Cluster Id: 50665
Cluster Member: Yes
Cluster Generation: 1196
Membership state: Cluster-Member
Nodes: 2
Expected votes: 3
Total votes: 3
Node votes: 1
Quorum: 2
Active subsystems: 10
Flags:
Ports Bound: 0 177 178
Node name: test1-cluster

Node ID: 1
Node addresses: 1.2.3.4

Balancejar el Cluster

Per a balancejar el cluster disposem de la comanda clusvadm
  • -d : Deshabilita un servei
  • -e : Habilita un servei
  • -r : Fa un failover del servei, balanceja el node.
Aquestes opcions s'utilitzarien de la següent forma:

#clusvadm -d Apache
#clusvadm -e Apache
#clusvadm -r Apache

cman_tool es un programa que gestiona el cluster management subsystem CMAN. cman_tool s'utilitza per a afegir/expulsar nodes del cluster per a matar un node o canviar el valor dels expected votes de un cluster.

Troubleshooting

Per a realitzar troubleshooting es interesant utilitzar el log /var/log/messages

Mar 28 14:38:42 test2-cluster rgmanager[2930]: Member 1 shutting down
Mar 28 14:39:04 test2-cluster qdiskd[2110]: Node 1 shutdown
Mar 28 14:39:04 test2-cluster corosync[2026]:   [QUORUM] 
    Members[1]: 2
Mar 28 14:39:04 test2-cluster corosync[2026]:   [TOTEM ] 
    A processor joined or left the membership and a new membership was 
    formed.
Mar 28 14:39:04 test2-cluster kernel: dlm: closing connection to node 1
Mar 28 14:39:04 test2-cluster corosync[2026]:   [CPG   ] 
    chosen downlist: sender r(0) ip(1.2.3.4) ; members(old:2 left:1)
Mar 28 14:39:04 test2-cluster corosync[2026]:   [MAIN  ] 
    Completed service synchronization, ready to provide service.
Mar 28 14:40:40 test2-cluster rgmanager[2930]: #43: Service 
    service:Apache has failed; can not start.
Mar 28 14:40:41 test2-cluster rgmanager[2930]: #13: Service 
    service:Apache failed to stop cleanly
Mar 28 14:42:13 test2-cluster corosync[2026]:   [TOTEM ] A 
    processor joined or left the membership and a new membership was 
    formed.
Mar 28 14:42:13 test2-cluster corosync[2026]:   [QUORUM]
    Members[2]: 1 2
Mar 28 14:42:13 test2-cluster corosync[2026]:   [QUORUM] 
    Members[2]: 1 2
Mar 28 14:42:13 test2-cluster corosync[2026]:   [CPG   ] 
    chosen downlist: sender r(0) ip(1.2.3.4) ; members(old:1 left:0)
Mar 28 14:42:13 test2-cluster corosync[2026]:   [MAIN  ]
    Completed service synchronization, ready to provide service.
Mar 28 14:42:29 test2-cluster kernel: dlm: got connection from 1
Mar 28 14:42:34 test2-cluster rgmanager[2930]: State change: 
    test1-cluster UP
Mar 28 14:46:34 test2-cluster rgmanager[2930]: Member 1 shutting down
Mar 28 14:46:55 test2-cluster qdiskd[2110]: Node 1 shutdown
Mar 28 14:46:56 test2-cluster corosync[2026]:   [QUORUM]
    Members[1]: 2
Mar 28 14:46:56 test2-cluster corosync[2026]:   [TOTEM ] 
    A processor joined or left the membership and a new membership 
    was formed.
Mar 28 14:46:56 test2-cluster kernel: dlm: closing connection to node 1
Mar 28 14:46:56 test2-cluster corosync[2026]:   [CPG   ] 
    chosen downlist: sender r(0) ip(1.2.3.4) ; members(old:2 left:1)
Mar 28 14:46:56 test2-cluster corosync[2026]:   [MAIN  ] 
    Completed service synchronization, ready to provide service.
Mar 28 14:50:08 test2-cluster corosync[2026]:   [TOTEM ] 
    A processor joined or left the membership and a new membership 
    was formed.
Mar 28 14:50:08 test2-cluster corosync[2026]:   [QUORUM] 
    Members[2]: 1 2 
Mar 28 14:50:08 test2-cluster corosync[2026]:   [QUORUM] 
    Members[2]: 1 2
Mar 28 14:50:08 test2-cluster corosync[2026]:   [CPG   ] 
    chosen downlist: sender r(0) ip(1.2.3.4) ; members(old:1 left:0)
Mar 28 14:50:08 test2-cluster corosync[2026]:   [MAIN  ]
    Completed service synchronization, ready to provide service.
Mar 28 14:50:26 test2-cluster kernel: dlm: got connection from 1
Mar 28 14:50:31 test2-cluster rgmanager[2930]: State change: 
    test1-cluster UP
Mar 28 15:13:51 test2-cluster ntpd[2544]: synchronized to 1.4.4.5, 
    stratum 4

Per a veure si la configuració del cluster (fitxer XML) es vàlida podem utilitzar la següent comanda.

# ccs_config_validate /etc/cluster/cluster.conf
Configuration validates

El fitxer de configuració principal d'un cluster es un fixer XML localitzat en /etc/cluster/cluster.conf. El servei esta definit entre els següents tags.

<rm>
    <service autostart="1" domain="" exclusive="0" name="" recovery="restart">
...
    </service>
</rm>

La configuració entre aquestes linies ajuda a  entendre com esta configurat el cluster.


Enllaços:

Cluster Suite Overview [PDF]
Adventures with two node RHEL HA Cluster
Cluster Administration