Este artículo explica cómo configurar el clúster de NFS y la tolerancia frente a fallos entre dos servidores usando Corosync como máquina de clúster y Pacemaker como gestor de recursos.

Esta entrada es la continuación de la serie de publicaciones sobre la configuración de un servidor de NFS en alta disponibilidad. Echa un vistazo al primer artículo sobre cómo configurar la parte de almacenamiento iSCSI lo encontrarás en este enlace.

Tecnologías

Pacemaker
Pacemaker es un gestor de recursos de código abierto altamente disponible. Las tareas de Pacemaker son mantener la configuración de todos los recursos del clúster, así como las relaciones entre los servidores y los recursos. Por ejemplo, si necesitamos configurar una VIP (una IP virtual), montar un sistema de archivos o iniciar un servicio en el nodo activo del clúster, Pacemaker situará todos los recursos asignados al servidor en el orden que especifiquemos en la configuración para garantizar que todos los servicios se inician correctamente.

Corosync
Corosync es una máquina de clúster de código abierto que permite compartir mensajes entre diferentes servidores de un clúster. Esto es para verificar el estado de salud e informar a otros componentes del clúster, en caso de que uno de los servidores se caiga e inicie el proceso de tolerancia a fallos.

Resource Agents
Los Resource Agents son scripts que administran diferentes servicios basándose en el estándar OCF. El sistema ya incluye algunos, y la mayoría de las veces serán suficientes para las configuraciones típicas de clúster. Pero, evidentemente, es posible desarrollar uno nuevo según tus necesidades y requisitos.

Pacemaker Stack Visual

Tras esta pequeña introducción sobre los componentes del clúster, ¡empecemos con la configuración!

Configuración de Corosync:

– Instala las dependencias del paquete:

# aptitude install corosync pacemaker

– Genera una clave privada para asegurar la autenticidad y la privacidad de los mensajes enviados entre los nodos del clúster:

# corosync-keygen –l

NOTA: Este comando generará la clave privada en la ruta: /etc/corosync/authkey. Copia el archivo clave al otro servidor.

– Edita /etc/corosync/corosync.conf:

# Please read the openais.conf.5 manual page

totem {
version: 2

# How long before declaring a token lost (ms)
token: 3000

# How many token retransmits before forming a new configuration
token_retransmits_before_loss_const: 10

# How long to wait for join messages in the membership protocol (ms)
join: 60

# How long to wait for consensus to be achieved before starting a new round of membership configuration (ms)
consensus: 3600

# Turn off the virtual synchrony filter
vsftype: none

# Number of messages that may be sent by one processor on receipt of the token
max_messages: 20

# Limit generated nodeids to 31-bits (positive signed integers)
clear_node_high_bit: yes

# Enable encryption
secauth: on

# How many threads to use for encryption/decryption
threads: 0

# This specifies the mode of redundant ring, which may be none, active, or passive.
rrp_mode: active

interface {
# The following values need to be set based on your environment
ringnumber: 0
bindnetaddr: 10.55.71.0
mcastaddr: 226.94.1.1
mcastport: 5405
}
}

nodelist {
node {
ring0_addr: nfs1-srv
nodeid: 1
}
node {
ring0_addr: nfs2-srv
nodeid: 2
}
}

amf {
mode: disabled
}

quorum {
# Quorum for the Pacemaker Cluster Resource Manager
provider: corosync_votequorum
expected_votes: 1
}

service {
# Load the Pacemaker Cluster Resource Manager
ver: 0
name: pacemaker
}

aisexec {
user: root
group: root
}

logging {
fileline: off
to_stderr: yes
to_logfile: no
to_syslog: yes
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
tags: enter|leave|trace1|trace2|trace3|trace4|trace6
}
}

Configuración de Pacemaker:

– Desactiva la política de quorum, ya que necesitamos desplegar una configuración de 2 nodos:

# crm configure property no-quorum-policy=ignore

– Configura el recurso de la IP virtual del clúster:

# crm configure primitive p_ip_nfs ocf:heartbeat:IPaddr2 params ip="10.55.71.21" cidr_netmask="24" nic="eth0" op monitor interval="30s"

– Configura el script original para el servidor NFS:

# crm configure primitive p_lsb_nfsserver lsb:nfs-kernel-server op monitor interval="30s"

NOTA: el script original nfs-kernel-server lo administará el clúster. Deshabilita el servicio para iniciarlo en el momento de arrancer utilizando la utilidad update-rc.d :

# update-rc.d -f nfs-kernel-server remove

– Configura el punto de montaje para la exportación de NFS:

# crm configure primitive p_fs_nfs ocf:heartbeat:Filesystem params device="/dev/mapper/nfs1" directory="/mnt/nfs" fstype="ext3" op start interval="0" timeout="120" op monitor interval="60" timeout="60" OCF_CHECK_LEVEL="20" op stop interval="0" timeout="240"

– Configura un grupo de recurso con el servicio de NFS, el punto de montaje y la IP virtual:

# crm configure group g_nfs p_fs_nfs p_lsb_nfsserver p_ip_nfs meta target-role="Started"

– Evita que los recursos sanos se muevan alrededor del clúster configurando la adherencia de los recursos:

# crm configure rsc_defaults resource-stickiness=200

Comprobar el estado del clúster:

– Comprueba el estado de los recursos del clúster:

# crm status
Last updated: Wed Jun 3 21:44:29 2015
Last change: Wed Jun 3 16:56:15 2015 via crm_resource on nfs1-srv
Stack: corosync
Current DC: nfs1-srv (1) - partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
3 Resources configured

Online: [ nfs1-srv nfs2-srv ]

Resource Group: g_nfs
p_lsb_nfsserver (lsb:nfs-kernel-server): Started nfs2-srv
p_ip_nfs (ocf::heartbeat:IPaddr2): Started nfs2-srv
p_fs_nfs (ocf::heartbeat:Filesystem): Started nfs2-srv

Tolerancia frente a fallos en el clúster:

– Si los recursos están en NFS2-SRV y queremos aplicar la tolerancia a fallos en NFS1-SRV:

# crm resource move g_nfs nfs1-srv

– Elimina todas las limitaciones creadas por el comando move:

# crm resource unmove g_nfs

Configuración resultante:

# crm configure show
node $id="1" nfs1-srv
node $id="2" nfs2-srv
primitive p_fs_nfs ocf:heartbeat:Filesystem
params device="/dev/mapper/nfs-part1" directory="/mnt/nfs" fstype="ext3" options="_netdev"
op start interval="0" timeout="120"
op monitor interval="60" timeout="60" OCF_CHECK_LEVEL="20"
op stop interval="0" timeout="240"
primitive p_ip_nfs ocf:heartbeat:IPaddr2
params ip="10.55.71.21" cidr_netmask="24" nic="eth0"
op monitor interval="30s"
primitive p_lsb_nfsserver lsb:nfs-kernel-server
op monitor interval="30s"
group g_nfs p_lsb_nfsserver p_ip_nfs
meta target-role="Started"
colocation c_nfs_on_fs inf: p_lsb_nfsserver p_fs_nfs
order o_volume_before_nfs inf: p_fs_nfs g_nfs:start
property $id="cib-bootstrap-options"
dc-version="1.1.10-42f2063"
cluster-infrastructure="corosync"
no-quorum-policy="ignore"
rsc_defaults $id="rsc-options"
resource-stickiness="200"

 

Referencias
Natty Information
Ubuntu Quickstart
Clusters from Scratch

Entrada original escrita por Iván Mora (SysOps Engineer @ CAPSiDE), puede encontrarse en opentodo.net.

Para ir a la primera parte sobre cómo configurar el almacenamiento de ISCSI, haz clic aquí.

TAGS: clustering, corosync, how-to, iscsi, multipath, nfs server, opensource, pacemaker

speech-bubble-13-icon Created with Sketch.
Comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*
*