Configuracion de cluster de HDD con gfs2(red hat) y ocfs2(oracle) + ISCSI (Ubuntu 12.04 LTS)

Esta guia la hago para que ustedes puedan sacar sus propias conclusiones de como funciona cada uno de los distintos sistemas de ficheros en cluster, uno creado por RHEL y otro creado por ORACLE.  Esta vez lo realizare en un sistema operativo fuera del mundo de YUM y los RPM, para hacer mas transparentes las pruebas usaremos UBUNTU 14.04 LTS

iscsi: El protocolo iSCSI es un protocolo de red de área de almacenamiento (SAN), que permite a los iniciadores iSCSI usar los dispositivos de almacenamiento de forma remota utilizando el cableado de Ethernet normal. Para el iniciador iSCSI, el almacenamiento remoto se ve como un disco duro normal, conectada localmente.

gfs2: Es un sistema de ficheros nativo creado por Red Hat y distribuido bajo licencia GNU, que puede ser utilizado de forma local (como por ejemplo ext3) o en cluster, de manera que varios nodos puedan estar trabajando simultáneamente sobre él sin peligro a que se corrompan los datos. La capacidad máxima de almacenamiento de GFS2 es de 8 EB.

ocfs2: Es un Sistema de ficheros en Cluster que permite el acceso simultáneo de multiples nodos. Deberemos definir nuestro dispositivo drbd para acceder a los nodos de la red simultaneamente. Cada nodo OCFS2 dispone de un sistema de ficheros montado, regularmente escribe un fichero meta-data permitiendo a los otros nodos saber que se encuentra disponible.

1.- Crearemos 3 maquinas virtuales para estas pruebas

Nameserver : SVRiSCSI
Funcion : Servidor iSCSI target
IP : 192.168.254.105
S.O (sda) : 4GB (UBUNTU 14.04 LTS )
HDD1 (sdb) : 1.5GB
HDD1 (sdc) : 1.5GB

Nameserver : SERV1
Funcion : Servidor cluster 1
IP : 192.168.254.106
S.O (sda) : 4GB (UBUNTU 14.04 LTS )
HDD1 (sdb) : 1.5GB
HDD1 (sdc) : 1.5GB

Nameserver : SERV2
Funcion : Servidor cluster 2
IP : 192.168.254.107
S.O (sda) : 4GB (UBUNTU 14.04 LTS )
HDD1 (sdb) : 1.5GB
HDD1 (sdc) : 1.5GB

Lo primero que haremos sera ajustar los nombres de las maquinas en el archivo de hosts de cada 1 de ellos /etc/resolv.conf

vim /etc/hosts
192.168.254.105 SVRiSCSI
192.168.254.106 SERV1
192.168.254.107 SERV2

Configuracion de Target iSCSI

1.- Instalar el controlador de target iscsi

apt-get install iscsitarget

2.- Habilitar el target ISCSI, editar /etc/default/iscsitarget y cambiar el valor false a true

vim /etc/default/iscsitarget
ISCSITARGET_ENABLE=true

3.- Editar /etc/iet/ietd.conf y asignar nuestro iqn

Aquí tendremos que configurar tres cosas principalmente:

  • El nombre de nuestro target
  • El nombre de usuario y la contraseña para la conexión del iniciador
  • Los dispositivos que presentaremos como targets

El estándar iSCSI define que tanto los target como los iniciadores deben tener un nombre que sigue un patrón, el cual es el siguiente:

iqn.[yyyy-mm].[nombre del dominio invertido]:[identificador]

Donde:

iqn es un término fijo y debe figurar al principio.

yyyy-mm es la fecha de alta del servidor o la fecha de publicacion de los targets

A continuación debe figurar el nombre del dominio invertido un jemplo podria ser:

cl.svriscsi.xentech

Luego de los “:”, un identificador que podemos ponerlo a nuestro gusto, y que puede en muchos casos brindar información del target.

Un ejemplo válido sería:

iqn.2015-11.cl.svriscsi.xentech:san.2G.gfs2

Como vemos el identificador aunque es variable y personalizable, puede reflejar el nombre dado al target, la capacidad y el servicio donde lo usaremos.

Si queremos que nuestro target requiera autenticación., podemos definir un usuario y una contraseña para que solo se conecten los iniciadores que nosotros queremos.

debemos descomentar la linea y dejar a nuestro gusto esta información

#IncomingUser joe secret

un ejemplo valido seria:

IncomingUser xentech lab123

donde xentech es el nombre de usuario y lab123 nuestra contraseña

Como ultimo paso devemos declarar los dispositivos que se presentaran para ser iniciados en los clientes, se debe descomentar y editar la linea siguiente:

#Lun 0 Path=/dev/sdc,Type=fileio,ScsiId=xyz,ScsiSN=xyz

como nuestro sistema presentara dos discos los declararemos de la siguiente manera:

Lun 0 Path=/dev/sdb,Type=fileio
Lun 1 Path=/dev/sdc,Type=fileio

En este ejemplo el primer dispositivo que estamos ofreciendo es la partición /dev/sdb del servidor y el segundo en /dev/sdc. La documentación nos dice que además de particiones podemos usar discos enteros, volúmenes LVM y RAID, e incluso archivos. En cualquier caso solo hay que definir el path.

4.- Una vez que hemos configurado el servidor y que tenemos listos nuestros discos a ofrecer, debemos levantar el servicio.

service iscsitarget restart

5.- Por último si queremos que nuestro servicio iSCSI target inicie junto con el servidor, debemos agregarlo al inicio del sistema.

update-rc.d iscsitarget defaults

Configuración de nuestro iniciador

Lo primero que vamos a hacer es instalar el software iniciador. usaremos open-iscsi, además está dentro de la paquetería de Debian y Ubuntu. Lo instalamos de la siguiente manera en los server clientes SEVR1 y SERV2

apt-get install open-iscsi

una vez instalado debemos editar el archivo de iniciacion de open-iscsi y cambiar

vim /etc/iscsi/iscsid.conf
node.startup = manual

debe quedar

node.startup = automatic

Habilitar login, descomentar las lineas destacadas

...
node.session.auth.authmethod = CHAP
...
node.session.auth.username = xentech
node.session.auth.password = lab123
...
discovery.sendtargets.auth.authmethod = CHAP
...
discovery.sendtargets.auth.username = xentech
discovery.sendtargets.auth.password = lab123

reiniciar el iniciador

/etc/init.d/open-iscsi restart

Configuración de open-iscsi

La configuración de open-iscsi se realiza a través del comando iscsiadm y la misma se guarda en una base de datos. Si queremos cambiar algún parámetro de la configuración tenemos que hacerlo a través de iscsiadm.

Detección del target

En primer lugar tenemos que indicarle a iscsiadm que detecte nuestro target iSCSI y lo agregue a su base de datos. Hay que aclarar que iscsiadm tiene tres formas de operación

discovery: En este modo se pueden descubrir targets y agregarlos a la base de datos.

node: En este modo se administran los targets ya descubiertos y se pueden visualizar datos acerca de estos nodos, así como conectarse a ellos.

session: En este modo se administran los targets a los que se está conectados (en los que se ha hecho login).

Para descubrir nuestro target usamos obviamente discovery, se debe ejecutar:

iscsiadm -m discovery -t st -p 192.168.1.100

Captura de pantalla de 2015-12-01 16-45-52

Confirmar el estado de la conexion

iscsiadm -m node -o show | grep node.name

Captura de pantalla de 2015-12-01 17-03-09

ahora debemos conectarnos con nuestro Target

iscsiadm -m node --login

Captura de pantalla de 2015-12-01 17-07-19
con esto ya deberiamos tener conectadas las dos unidades presentadas desde nuestro servidor iSCSI, para comprobarlo basta hacer un dmesg del sistema y veremos lo que conecto

dmesg

Captura de pantalla de 2015-12-01 17-08-49

Creacion de particiones, formateos y armados del cluster

Instalar los siguientes paquetes en los servidores clientes

apt-get install pacemaker cman resource-agents fence-agents gfs2-utils gfs2-cluster ocfs2-tools-cman openais rgmanager

Desabilitar o2cb del inicio

update-rc.d -f o2cb remove

Trabajaremos con el sistema de archivos gfs2 en el servidor SERV1 y con ocfs2 en SERV2

GSF2

Creacion de particion sdb en SERV1

fdisk /dev/sdb
  • presione n para la creacion de una nueva particion
  • presione w para la escritura de la nueva particion

una vez terminada la creacion ya podremos formatear nuestra unidad con un sistema de archivos gfs2

mkfs.gfs2 -p lock_dlm -t clusterxentech:gfs2 -j 2 /dev/sdb1
  • donde:
    • mkfs.gfs2: Tipo de formato que en este caso sera el nuevo sistema de archivos en cluster de RedHat
    • p lock_dlm: El parámetro lock_dlm indica el protocolo de bloqueo a emplear, siendo lock_dlm (DLM – Distributed Lock Manager) para el caso de acceso concurrente y lock_nolock para el caso de acceso de un único nodo.
    • -t clusterme:gfs2: Con la opción de -t se especifica el nombre del cluster y el nombre que le queremos dar al sistema de archivos
    • -j 2: indica el número de nodos que accederán concurrentemente al sistema de archivos
    • /dev/sdb1: Unidad a formatear

Captura de pantalla de 2015-12-02 12-28-29

Creacion de archivo de cluster para gfs2

Cree el archivo cluster en ambos servidores clientes y Pegue la siguiente informacion en /etc/cluster/cluster.conf

<?xml version="1.0"?>
        <cluster name="clusterxentech" config_version="3">
        <cman two_node="1" expected_votes="1"/>
        <gfs_controld enable_plock="1"/>

<clusternodes>
        <clusternode name="SERV1" votes="1" nodeid="1">
                <fence>
                        <method name="single">
                                <device name="manual" ipaddr="192.168.254.106"/>
                        </method>
                </fence>
        </clusternode>
        <clusternode name="SERV2" votes="1" nodeid="2">
                <fence>
                        <method name="single">
                             <device name="manual" ipaddr="192.168.254.107"/>
                        </method>
                </fence>
        </clusternode>
</clusternodes>
    <fence_daemon clean_start="1" post_fail_delay="0" post_join_delay="3"/>
                <fencedevices>
                <fencedevice name="manual" agent="fence_manual"/>
    </fencedevices>
</cluster>

Lineas Importantes:

<cluster name="clusterxentech" config_version="3">

Esta linea indica el nombre del cluster, el cual definimos al momento de formatear la unidad sdb1, un punto muy importante este archivo funciona al igual que los archivos de zonas de DNS con un numero de serie, el cual con cada cambio tbm debe ser cambiado el numero de serie config_version=»3″

<clusternode name="SERV1" votes="1" nodeid="1">

Linea que hace la llamada al primer nodo y le da como identificador de nodeid=1, en el caso de ser el nodo 2 cambia la informacion a la que tiene el servidor 2

<device name="manual" ipaddr="192.168.254.106"/>

Linea que indica la ip del servidor

NOTA: el resto de las lineas no se tocan.

Montaje de sdb1 como sistema de archivos gfs2

El montaje lo realizaremos en el cliente1 SERV1, crearemos nuestro punto de montage en /mnt/

mkdir /mnt/gfs2

Procedemos a montar la particion en /mnt/gfs2

mount -t gfs2 /dev/sdb1 /mnt/gfs2

Realizamos el mismo procedimiento en el servidor cliente2 SERV2

Por último, sólo tendremos que reiniciar los servicios gfs2, cman, rgmanager y en ambos servidores, partiendo por SVRCluster1 y mediante el comando chkconfig haremos que dichos demonios se inicien automáticamente cada vez que arranque el nodo.

/etc/init.d/gfs2-cluster restart
/etc/init.d/cman restart
/etc/init.d/rgmanager restart
update-rc.d gfs2 default
update-rc.d cman default
update-rc.d rgmanager default

Montaje automatico desde el inicio FSTAB

Es fundamental dejar el disco montado desde el inicio del sistema para lo cual yo hago lo siguiente.

1.- Descubrir el identificador unico del disco

blkid

Captura de pantalla de 2015-12-04 16-22-59

2.- Agregar disco a tabla de particiones, deberia quedar como la linea destacada

vim /etc/fstab
UUID=18da39a5-f3b4-d3a8-11a8-a28d1bac077b      /mnt/gfs2       gfs2        defaults 0 0

Captura de pantalla de 2015-12-04 16-27-15

3.- repetir los mismos pasos en SERV2

Si ejecutamos el comando clustat, podremos ver la configuración actual del cluster que acabamos de levantar.

Captura de pantalla de 2015-12-04 16-36-01

haremos la prueba creando un archivo de 10 megas en el disco compartido

dd if=/dev/zero of=/mnt/gfs2/Disc10M bs=1M count=10

Captura de pantalla de 2015-12-04 16-43-39

revisar en ambos servidores que este se haya creado sin problemas

ls -l /mnt/gfs2/Disc10M

OCFS2

Ya tenemos instalados los paquetes necesarios en nuestro servidor segun los pasos anteriores por lo que comenzaremos inmediatamente con la configuracion.

Trabajaremos con el sistema de archivos ocfs2 en el servidor SERV2

Creacion de particion sdb en SERV2

fdisk /dev/sdc
  • presione n para la creacion de una nueva particion
  • presione w para la escritura de la nueva particion

una vez terminada la creacion ya podremos formatear nuestra unidad con un sistema de archivos gfs2

mkfs.ocf2 /dev/sdc1
  • mkfs.ocfs2: Tipo de formato que en este caso sera el nuevo sistema de archivos en cluster de Oracle
  • /dev/sdc1: Unidad a formatear

Captura de pantalla de 2015-12-04 17-04-30

Creacion de archivo de cluster para ocfs2

Crear archivo cluster en ambos servidores clientes y Pegue la siguiente informacion en /etc/ocfs2/cluster.conf

node:
        ip_port = 7777
        ip_address = 192.168.1.107
        number = 0
        name = SERV2
        cluster = xentechocfs
node:
        ip_port = 7777
        ip_address = 192.168.1.106
        number = 1
        name = SERV1
        cluster = xentechocfs
cluster:
        node_count = 2
        name = xentechocfs

habilitar el cluster

dpkg-reconfigure ocfs2-tools

Captura de pantalla de 2015-12-04 17-16-00

Seleccionar <Si>

Captura de pantalla de 2015-12-04 17-17-14

Ingresamos el nombre de nuestro cluster xentechocsf y presionamos <Aceptar> al resto de las opciones le dan OK y ya nuestro cluster esta iniciado

Iniciar servicios y dejarlos al inici

/etc/init.d/o2cb restart
update-rc.d cman o2cb

Montaje de sdc1 como sistema de archivos ocfs2

El montaje lo realizaremos en el cliente2 SERV2, crearemos nuestro punto de montage en /mnt/

mkdir /mnt/ocfs2

Procedemos a montar la particion en /mnt/ocfs2

mount -t ocfs2 /deb/sdb1 /mnt/ocfs2

Realizamos el mismo procedimiento en el servidor cliente1 SERV1

revisar estado

/etc/init.d/o2cb status

Captura de pantalla de 2015-12-04 18-38-17

Revisar los discos y los diferentes tipos de formato

blkid

Captura de pantalla de 2015-12-04 18-37-59

No agregare el montaje automatico en FSTAB, ya que es igual al de gfs2

Espero que les sirva este lab, por lo menos a mi me sirvio mucho para revisar los comportamientos del sistema de red-hat (gfs2) V/S el de oracle (ocfs2), no hare las pruebas ya que las conclusiones las debe sacar cada uno de que sistema es mejor que el otro, aunque esto dependera mucho de la distribucion que se use ya que son nativos de sus propios sistemas y optimazados para ello.

 

Jorge Romero
Sigueme

Deja una Respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.