Oracle cluster registry OCR (componentes del grid)

Oracle cluster registry ( OCR)

El Oracle cluster registry (OCR) mantiene los metadata y los wallets para todos los recursos que maneja el clusterware , al contrario de lo que ocurría en las versiones previas, solamente se requiere para administrar los recursos que están bajo la CRSD stack and its agents.
En la versión 11gR2 el l OCR incluye el Oracle Local Registry (OLR)

En esta versión el OCR no es necesario para unirse al cluster,ya que la información necesaria para unirse al cluster está en el OLR and GPnP, la información que maneja el OCR si que incluye aquella que requiere el agente para crear ,comprobar el estado,parar o arrancar un recurso así como la de las dependencias de un recurso ante un cambio de estado (Por ejemplo qué hacer con un listener si la IP sobre la que está desaparece)

Como mínimo debe de existir un OCR, sin embargo es posible tener hasta 5 copias, el OCR puede estar (desde 11gR2) en los discos ASM, pero a diferencia del voting disk puedes tener un OCR en los mismos discos que datos o copias.
La localización de los OCR (en un sistema linux) se encuentra en /etc/oracle/ocr.loc

[grid@rac1 oracle]$ cat /etc/oracle/ocr.loc
ocrconfig_loc=+OCRQUORUM
local_only=FALSE

La variable local_only puede tener dos valores:

  • FALSE: Estamos en un RAC
  • TRUE: estamos en una single instance

Mediante el comando ocrconfig se pueden llevar acciones de añadir , eliminar y reemplazar ubicaciones del OCR, sin embargo , si hay solamente una localización e OCR no se puede hacer un replace, hay que añadir uno nuevo y eliminar el viejo.
La información del OCR se guarda cada 4 horas en el $GI_HOME/cdata de uno de los nodos, desde la versión 11gR2 se reparten por todos los nodos (donde está instalado). Habitualmente se guarda los últimos 3 backups horarios ( 12 horas), 1 backup con un día de antigüedad y otro con una semana de antigüedad.
Cuando el OCR se almacena en ASM hace que la instancia de ASM y los diskgroups en los que está ubicado el OCR se monten antes de que el CRSD sea arrancado. Igualmente, si hay que detener el ASM hay que parar toda la pila del CRSD mediante el comando crscrtl stop crs ya que, sino la parada del ASM dará el error

 “ORA-15097: cannot SHUTDOWN ASM instance with connected client.”

por supuesto ni se te ocurra para el asm de manera forzada.

Los comandos para interactuar con el OCR son:

[grid@rac1 oracle]$ ocrcheck
Status of Oracle Cluster Registry is as follows :
	 Version                  :          3
	 Total space (kbytes)     :     262120
	 Used space (kbytes)      :       2644
	 Available space (kbytes) :     259476
	 ID                       :  165462643
	 Device/File Name         : +OCRQUORUM
                                    Device/File integrity check succeeded

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

	 Cluster registry integrity check succeeded

	 Logical corruption check bypassed due to non-privileged user


Añadir un disco

[grid@rac1 oracle]$ ocrconfig -add +DATA

reemplazarlo

[grid@rac1 oracle]$ ocrconfig -replace +DATA  -replacement +DATA2

O eliminarlo

[grid@rac1 oracle]$ ocrconfig -delete +DATA2

La documentación del ocrconfig podemos encontrarla en http://docs.oracle.com/cd/E11882_01/rac.112/e16794/ocrsyntax.htm#CWADD92022

Voting disk (componentes del grid)

Vamos a dedicar una serie de entradas a explicar los distintos componentes del Grid infraestructurae de Oracle a partir de la version 11gR2

El voting disk es usado por el demonio de sincronización de servicios (ocssd Oracle cluster sincronization services daemon) para comprobar el estado de los nodos del disco.
Cada uno de los nodos envía en intervalos predeterminados un herbeat por la red para indicar a el resto que está vivo. Si el resto determina que uno de los nodos está muerto entonces le hace un “fence” para evitar corrupción de datos o un split brain.
Cada nodo debe de enviar un hearbeat por red por segundo y escribir un herbeart por voting disk por segundo. Si un nodo no hiciera ambas cosas, el resto de nodos comenzarían un proceso de reconfiguración que, sirve para comprobar qué nodos están vivos que básicamente es que cada nodo indica cuales encuentra como vivos y cuáles no .
A los nodos que no contestan se les envía un “poison packet via network and disk” y se les saca del cluster.

En las versiones anteriores el voting file debía de ser un sistema compartido de red (NFS,OCFS.. ), pero en la versión 11gR2 ya puede ser un disco de ASM (Es aconsejable ir pasándolos a ASM ya que podrían ser de-soportados los otros tipos de voting)

Si usas OCFS para el voting file, se aconseja el uso de 3 o 5 copias del voting file, aunque el máximo es de 15. En caso de uso del ASM no puedes determinarlo ya que es transparente y dependen del tipo de redundancia del ASM (external,normal,hit). En el caso de tener redundancia interna de ASM (normal/high),oracle chequea que tengas el número de discos mencionados anteriormente, conlo que deberás de tener un mínimo de 3 failure groups en redundancia normal y 5 en high. Si no los tuvieras, recibirás un error indicándote lo :

ORA-15273: Could not create the required number of voting files
ORA-15274 ...

En la versión 11gR2, el voting file, registro local y el perfil de Grid Plug and Play (GPnP) tienen toda la información necesaria del cluster por lo que no dependen del OCR, sin embargo el OCR es necesario para administrar los recursos del cluster

El voting disk se ubica en un disco de ASM individual, esto hace que el Cluster Synchronization Services daemon (CSSD) acceda directamente al contenido de los voting disk, lo que le permite arrancarse antes que los propios discos de ASM

En la versión 11gR2 de Oracle el backup del voting disk se lleva a cabo automáticamente con el backup el OCR.

El comando con el que administraremos el voting disk es el crscrtl, la sintaxsis de las acciones mas comunes es:


[grid@rac1 oracle]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   731fe6f479734f1fbf75ed0d30b3e76b (/dev/asmdisk_sdb1) [OCRQUORUM]
Located 1 voting disk(s).

También prodríamos añadir un votedisk

[grid@rac1 oracle]$ crsctl add css votedisk /shared/vfile1 

Reemplazar un votedisk

[grid@rac1 oracle]$ crsctl replace votedisk /shared/vfile1
  /shared2/vfile2 

O eliminar un votedisk

[grid@rac1 oracle]$ crsctl delete votedisk  /shared2/vfile2 

Como siempre, mas información en la documentación de Oracle en:
http://docs.oracle.com/cd/E11882_01/rac.112/e16794/crsref.htm#CWADD91143

Crear un diskgoup desde asmca

Nos hemos mudado a bloger!
El contenido actualizado de esta entrada lo tienes en:

http://dba.pamplona.name/2013/12/crear-un-diskgoup-desde-asmca.html

Vamos a ver como crear un diskgroup en nuestro grid.

Lo primero que haremos será conectarnos como el usuario propietario del grid control (grid) y cargar las variables de entorno.

[oracle@rac1 grid]$ . oraenv
ORACLE_SID = [oracle] ? +ASM1
The Oracle base has been set to /oracle/11.2.0/grid
[oracle@rac1 grid]$ 

Una vez tenemos cargadas las variables, ejecutaremos el comando que lanza la interfaz gráfica asmca

Nosotros iremos a la pestaña de grupo de discos y pulsaremos en crear . Para este ejemplo crearemos el grupo DATA con los dos primeros discos con redundancia normal. tras esto, haremos lo mismo con los dos últimos (los mas pequeños) y llamaremos a el grupo INDICES

Como podemos ver, el uso de la herramienta gráfica que gestiona el ASM es bastante sencilla, en la siguiente entrada crearemos un grupo y le asignaremos discos desde la línea de comandos.

Instalacion de RAC II , instalacion de grid infraestructure

Repasando las entradas anteriores he podido comprobar como , tas la entrada de RAC I Preparativos no teníamos las siguientes entradas de instalación del RAC, así pues, vamos a hacer de nuevo la instalación para dejarla documentada.

Partimos de la base de la configuración de entorno y máquinas del post RAC I Preparativos
Como recordatorio rápido tenemos que los directorios a utilizar serán:

  • GI_HOME=/oracle/11.2.0/grid
  • ORACLE_BASE=/oracle/app/grid

    grid

Y la configuración de red de los servidores será

# Direcciones para nuestros equipos
# HOST y publica  eth0
10.0.2.2  exodar.pamplona.name   exodar
10.0.2.3  rac1.pamplona.name     rac1
10.0.2.4  rac2.pamplona.name     rac2
10.0.2.5  rac3.pamplona.name     rac3
10.0.2.6  rac4.pamplona.name     rac4
10.0.2.24 plantilla.pamplona.name        plantilla


#Virtual  Eth1  direcciones de la red sobre la que se da el servicio 
192.168.1.1  exodar-vip.pamplona.name   exodar-vip
192.168.1.2  rac1-vip.pamplona.name     rac1-vip
192.168.1.3  rac2-vip.pamplona.name     rac2-vip
192.168.1.4  rac3-vip.pamplona.name     rac3-vip
192.168.1.5  rac4-vip.pamplona.name     rac4-vip
192.168.1.24 plantilla-vip.pamplona.name        plantilla-vip

#ScaN  comentadas ya que estan dada de alta en round robin dns
# estas son las verdaderas direcciones de servicio 
#192.168.1.20  ractest.pamplona.name  ractest
#192.168.1.21  ractest.pamplona.name  ractest
#192.168.1.22  ractest.pamplona.name  ractest

#Private ETH2 red privada de los nodos
192.168.2.1  exodar-priv.pamplona.name  exodar-priv
192.168.2.2  rac1-priv.pamplona.name    rac1-priv
192.168.2.3  rac2-priv.pamplona.name    rac2-priv
192.168.2.4  rac3-priv.pamplona.name    rac3-priv
192.168.2.5  rac4-priv.pamplona.name    rac4-priv
192.168.2.24 plantilla-priv.pamplona.name   plantilla-priv

Así pues, lanzamos la instalación del grid control:
En nuestro caso omitiremos la información de soporte, en el caso de una instalación real de RAC es muy recomendable el incluirla ya que facilitará mucho el uso del área de soporte así como la descarga de los últimos parches para llevar a cabo la instalación de la ultima versión disponible.
rac_pantalla1
En la siguiente pantalla indicaremos que queremos instalar la versión del grid infraestructure que aplica a un cluster
tac_pantalla2
Nosotros elegiremos la instalación avanzada para poder afinar mas las opciones de instalación.
rac_pantalla3
rac4
En este punto comenzamos con la instalación específica del rac.
Aquí tendremos que introducir las direcciones de servicio y privadas del RAC.
Hemos de tener en cuenta que, nosotros ya teníamos comprobado y solucionado el tema de la conexión ssh entre los nodos, en caso de no estar claro ese tema, podremos comprobarlo desde la opción conectividad ssh
Captura de pantalla 2013-12-28 a la(s) 17.56.41
rac_pantalla7
rac_pantalla8
Si la configuración de las tarjetas con los nombres es correcta, pasamos a la pantalla en la que indicamos cual van a ser las direcciones de red.
Como las traducciones las carga el diablo,vamos a detallar unpoco que es cada cosa:

  • privada:van a ser las interfaces de interconexión del rac, esta debe de ser una conexión dedicada para la sincronización de las caches.
  • públicaEs las interfaces vip que serán sobre las que posteriormente Oracle levantará las interfaces de scan

rac_pantalla9
La version 11.2 del Grid nos permite tener el OCR y el Quorum en un disco en ASM, nosotros vamos a elegir este tipo de instalacion
rac_pantalla10

Estamos en el momento en el que ASM nos muestra los discos disponibles, en nuestro caso lo hacemos mediante asmlib ( ver RAC I Preparativos ) , en la imagen tenemos que vamos a crear el grupo de discos OCRQUORUM y vamos a usar 1 disco de los que tenemos con la redundancia EXTERNAL.
En un entorno de producción real, será más aconsejable el uso de varios discos de 1 Gb con redundancia SUPERIOR.
Que el nombre del grupo de datos sea distinto a DATA (por defecto), llamándose OCRQUORUM no es un standard o buena práctica de Oracle, sino una modificación mía para que sirva para distinguirlo fácilmente del nombre del diskgroup que usaré en las bases de datos
Captura de pantalla 2013-12-28 a la(s) 17.58.20

rac_pantalla12
El IPMI podríamos decir que es lo que tradicionalmente se ha llamado fencing , para tener mas infiormación del mismo podemos mirar en la documentación de Oracle Configuring IPMI for Failure Isolation, en nuestro caso, no lo vamos a activar.
rac_pantalla13
rac_pantalla14
Indicamos los directorios que teníamos planificados
rac_pantalla16
Finalmente, vemos las opciones y el resumen

Captura de pantalla 2013-12-28 a la(s) 18.33.06
Y la tipica ventana de ejecución de los comandos como root.
Aquí hemos de ser pacientes y ejecutar los scripts en orden, primero siempre en el nodo en el que estamos llevando a cabo la instalacón, y, solamente cuando hallan acabado de manera correcta ejecutarlos en el otro nodo
rac_pantalla20

Tras esto, continuamos con la instalación dando a «siguiente» hasta que finalice.
rac_panbtalla21
rac_pantalla_22

La instalación del Grid Infraestructure no es (desde mi punto de vista) algo muy limpio, y , tiene bastantes papeletas de fallar en algún punto, por lo que, es muy recomendable el tener a mano las notas específicas de soporte Oracle que nos ayudarán a solucionar estos problemas.
Estas notas son:

Estado del Cluster/Rac/Grid tabulado

Nos hemos mudado a bloger!
El contenido actualizado de esta entrada lo tienes en:
http://dba.pamplona.name/2013/12/estado-del-clusterracgrid-tabulado.html

Hoy vamos a ver una entrada de esas sencillas para hacernos la vida mas fácil.

Cuando ejecutamos el comando para ver el estado de un cluster, nos solemos encontrar con esto :

grid@rac1:/opt/oracle/10.2/CRS/bin$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....SM1.asm application ONLINE ONLINE oradb1
ora....D1.lsnr application ONLINE ONLINE oradb1
ora.oradb1.gsd application ONLINE ONLINE oradb1
ora.oradb1.ons application ONLINE ONLINE oradb1
ora.oradb1.vip application ONLINE ONLINE oradb1
ora....SM2.asm application ONLINE ONLINE oradb2
ora....D2.lsnr application ONLINE ONLINE oradb2
ora.oradb2.gsd application ONLINE ONLINE oradb2
ora.oradb2.ons application ONLINE ONLINE oradb2
ora.oradb2.vip application ONLINE ONLINE oradb2
ora....robd.db application ONLINE ONLINE oradb1
ora....dmin.cs application OFFLINE OFFLINE
ora....bd1.srv application OFFLINE OFFLINE
ora....ckup.cs application OFFLINE OFFLINE
ora....bd2.srv application OFFLINE OFFLINE
ora....atch.cs application OFFLINE OFFLINE
ora....bd2.srv application OFFLINE OFFLINE
ora....oltp.cs application OFFLINE OFFLINE
ora....bd1.srv application OFFLINE OFFLINE
ora....bd2.srv application OFFLINE OFFLINE
ora....d1.inst application ONLINE ONLINE oradb1
ora....d2.inst application ONLINE ONLINE oradb2

Realmente no nos sirve de mucho ya que queda todo apiñado,y no nos permite saber que componente está arrancado y cual eta parado.
Navegando por internet vi en un par de webs (perdón pero no recuerdo el lugar) el siguiente scipt en ksh

!/usr/bin/ksh
#
#  $GRID_HOME debe de estar definido en el entorno 
#
RSC_KEY=$1
QSTAT=-u
AWK=/bin/awk
# Table header:echo ""
$AWK \
'BEGIN {printf "%-45s %-10s %-18s\n", "HA Resource", "Target", "State";
printf "%-45s %-10s %-18s\n", "-----------", "------", "-----";}'
# Table body:
$GRID_HOME/bin/crs_stat $QSTAT | $AWK \
'BEGIN { FS="="; state = 0; }
$1~/NAME/ && $2~/'$RSC_KEY'/ {appname = $2; state=1};
state == 0 {next;}
$1~/TARGET/ && state == 1 {apptarget = $2; state=2;}
$1~/STATE/ && state == 2 {appstate = $2; state=3;}
state == 3 {printf "%-45s %-10s %-18s\n", appname, apptarget, appstate; state=0;}'

Este script nos devuelve una salida limpia al estilo de :

grid@rac1:/opt/oracle/10.2/CRS/bin$ ./crsstat.sh
HA Resource                         Target     State
-----------                         ------     -----
ora.oradb1.ASM1.asm                ONLINE     ONLINE on oradb1
ora.oradb1.LISTENER_oradb1.lsnr    ONLINE     ONLINE on oradb1
ora.oradb1.gsd                     ONLINE     ONLINE on oradb1
ora.oradb1.ons                     ONLINE     ONLINE on oradb1
ora.oradb1.vip                     ONLINE     ONLINE on oradb1
ora.oradb2.ASM2.asm                ONLINE     ONLINE on oradb2
ora.oradb2.LISTENER_oradb2.lsnr    ONLINE     ONLINE on oradb2
ora.oradb2.gsd                     ONLINE     ONLINE on oradb2
ora.oradb2.ons                     ONLINE     ONLINE on oradb2
ora.oradb2.vip                     ONLINE     ONLINE on oradb2
ora.rac.db                         ONLINE     ONLINE on oradb1
ora.rac_admin.cs                   OFFLINE    OFFLINE
ora.rac_admin.rac1.srv             OFFLINE    OFFLINE
ora.rac_backup.cs                  OFFLINE    OFFLINE
ora.rac_backup.rac2.srv            OFFLINE    OFFLINE
ora.rac_batch.cs                   OFFLINE    OFFLINE
ora.rac_batch.rac2.srv             OFFLINE    OFFLINE
ora.rac_oltp.cs                    OFFLINE    OFFLINE
ora.rac_oltp.rac1.srv              OFFLINE    OFFLINE
ora.rac_oltp.rac2.srv              OFFLINE    OFFLINE
ora.rac.rac1.inst                   ONLINE     ONLINE on oradb1
ora.rac.rac2.inst                   ONLINE     ONLINE on oradb2

Nota posteriormente me he encontrado con que era un script documentado por Oracle en la nota 259301.1 :
CRS and 10g/11.1 Real Application Clusters (Doc ID 259301.1)