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

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)

Instalación de RAC I Preparativos

Vamos a retomar la instalación de un RAC en una plataforma virtualizada de pruebas con Virtualbox. En este punto tenemos las máquinas creadas y con el sistema operativo instalado, con lo que vamos a utilizar esta entrada para detallar los pasos necesarios para ajustar esos sistemas operativos para la instalacion del grid

Creacion de usuarios y grupos
Lo primero que hemos de hacer es crear los grupos necesarios para nuestra instalación

/usr/sbin/groupadd -g 501 oinstall
/usr/sbin/groupadd -g 502 dba
/usr/sbin/groupadd -g 505 asmadmin
/usr/sbin/groupadd -g 506 asmdba
/usr/sbin/groupadd -g 507 asmoper

Tras los grupos, creamos los usuarios y los asignamos a los grupos correspondientes

/usr/sbin/useradd -u 501 -g oinstall -G asmadmin,asmdba,asmoper grid
/usr/sbin/useradd -u 502 -g oinstall -G dba,asmdba oracle

Confuguración del fichero hosts

Dado que los equipos van a referenciarse entre ellos constantemente, deberemos de configurar la resolución de nombres entre ellos, la forma mas rápida y sencilla es la de incluir sus nombres en el /etc/hosts de todos los nodos del rac

# 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-conn.pamplona.name  exodar-priv
192.168.2.2  rac1-conn.pamplona.name    rac1-conn
192.168.2.3  rac2-conn.pamplona.name    rac2-conn
192.168.2.4  rac3-conn.pamplona.name    rac3-conn
192.168.2.5  rac4-conn.pamplona.name    rac4-conn
192.168.2.24 plantilla-conn.pamplona.name   plantilla-conn

Consideraciones sobre la configuracion de la red

  • El orden de las interfaces de red en todos los nodos ha de ser el mismo
  • La direccion de SCAN (Single Cliente Access Name) es la direccion a la que vamos a aceeder desde los clientes ( IPs de servicio),Grid Infraestructure iniciará el local listener LISTENER sobre todos los nodos para escuchar sobre la local VIP, y SCAN listener LISTENER_SCAN1 para escuchar sobre las SCAN VIPs. Aunque podríamos seguir entrando a las local VIPS del nodo, Oracle recomienda que se acceda siempre a las direcciones de SCAN.
  • La direccion de SCAN debe de ser un nombre del dominio con almenos una direccion y un máximo de tres direcciones,el nombre de la direccion de scan (ractest en nuestro caso) debe de ser global y único y será utilizado por defecto como nombre del cluster
  • Oracle recomienda no configurar SCAN VIP address en el archivo host ya que si se usa en archivo host para resolver el nombre del SCAN, se puede tener una sola SCAN VIP address. Oracle recomienda configurar el SCAN para utilizar DNS Round Robin resolution a con direcciones.

Servidor de NTP
Debemos de estar seguros que la hora de todos nuestros equipos del RAC es idéntica.
Oracle cuenta con el CTSSD(Cluster Time Syncronization Server Daemon) que se encarga de esto, con lo que podemos parar el servicio del sistema operativo NTPD.
Si por el contrario queremos tener el servicio activo, habremos de configurarlo con la opción -x

Creamos accesos por ssh entre los nodos.
Deberemos permitir conexiones y ejecuciones remotas entre los nodos para el usuario grid.
Para ello haremos en uno de los dos nodos:

mkdir .ssh
chmod 700 .ssh
[grid@rac1 ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/grid/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/grid/.ssh/id_dsa.
Your public key has been saved in /home/grid/.ssh/id_dsa.pub.

Ahora copiaremos

scp id_dsa.pub rac1-vip:/home/grid/.ssh/authorized_keys

y haremos lo mismo con rac1

scp id_dsa.pub rac2-vip:/home/grid/.ssh/authorized_keys

para ver si ha funcionado deberemos de poder hacer libremente ssh desde el usuario grid de rac1 a rac2 y viceversa.

preparamos los parámetros del kernel

Editaremos el fichero /etc/sysctl.cnf y pondremos los siguientes valores para el kernel

# Para Oracle
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 1054504960
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586

para que el kernel adopte estos valores sintener que reiniciar ejecutaremos el comando

sysctl -p

ademas de esto, tendremos que añadir las siguientes líneas en el fichero /etc/security/limits.conf

# Para Oracle
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

comprobamos que en el fichero /etc/pam.d/login este la línea

session required pam_limits.so

Directorios para la instalación
Ahora crearemos los directorios de instalacion.
Habitualmente los elementos de oracle son creados bajo /u01/app /u02 ….
En nuestro caso tratándose de una plataforma de test sobre maquinas virtuales no tenemos un alto número de unidades de disco que montar y donde separar los elementos, con lo que toda nuestra instlacion será llevada a cabo bajo el directorio /oracle aún así y por motivos de compatibilidad, vamos ha hacer un enlace simólico desde /u01 hasta /oracle
así pues, nuestros datos para la instalacion del grid serán
GI_HOME=/oracle/11.2.0/grid
ORACLE_BASE=/oracle/app/grid

Hemos de tener en cuenta que el GI_HOME no debe de estar bajo ningún directorio de oracle_base .
Durante la instalación el GI_HOME será cambiado a root lo que podría causar errores de alguna otra instalación que esté sobre esos discos.

mkdir /oracle
ln -s /oracle /u01
chown -R grid:oinstall /oracle
mkdir -p /oracle/11.2.0/grid
chown -R grid:oinstall /oracle/11.2.0/grid
chmod 775 /oracle/11.2.0/grid

mkdir -p /oracle/app/grid
chown -R grid:oinstall /oracle/app/grid
chmod -R 775 /oracle/app/grid

Configuramos el asmlib

[root@rac2 etc]# /etc/init.d/oracleasm configure -i
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting without typing an
answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: grid
Default group to own the driver interface []: asmadmin
Start Oracle ASM library driver on boot (y/n) [y]:
Scan for Oracle ASM disks on boot (y/n) [y]:
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]

Aseguramos permisos con UDEV
En linux una de las formas que podemos asegurar que los dispositivos de los discos tendrán los permisos deseados es mediante la creacion de una regla de udev.
Así pues, con el comando blkid comprobaremos que discos tenemos en nuestro sistema.

[root@rac1 /]# blkid
/dev/sda1: UUID="b8327abf-baf7-48c5-baac-b39dc98d6b6e" TYPE="swap"
/dev/sda2: UUID="67748b98-ffde-4dbc-9b14-5da7dae13d65" TYPE="ext4"
/dev/sdb1: LABEL="DISK1" TYPE="oracleasm"
/dev/sdc1: LABEL="DISK2" TYPE="oracleasm"
/dev/sdd1: LABEL="DISK3" TYPE="oracleasm"
/dev/sde1: LABEL="DISK4" TYPE="oracleasm"
/dev/sdf1: LABEL="DISK5" TYPE="oracleasm"
/dev/sdg1: LABEL="OCRVOTING" TYPE="oracleasm"

con lo que sabemos que tenemos los discos sdb,sdc,sdd,sde,sdf, y sdg para asegurar los permisos crearemos el fichero /etc/udev/rules.d/99.oracle.rules con el contenido

# Damos permisos grid:asmadmin a los discos de asm

KERNEL=="sd[b-g]1", OWNER="grid",GROUP="asmadmin", MODE="660" NAME="asmdisk_%k"

comprobamos los permisos

root@rac1 /]# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 dic 30 16:56 /dev/sda
brw-rw---- 1 root disk 8, 1 dic 30 16:56 /dev/sda1
brw-rw---- 1 root disk 8, 2 dic 30 16:56 /dev/sda2
brw-rw---- 1 root disk 8, 16 dic 30 16:56 /dev/sdb
brw-rw---- 1 root disk 8, 17 dic 30 16:56 /dev/sdb1
brw-rw---- 1 root disk 8, 32 dic 30 16:56 /dev/sdc
brw-rw---- 1 root disk 8, 33 dic 30 16:56 /dev/sdc1
brw-rw---- 1 root disk 8, 48 dic 30 16:56 /dev/sdd
brw-rw---- 1 root disk 8, 49 dic 30 16:56 /dev/sdd1
brw-rw---- 1 root disk 8, 64 dic 30 16:56 /dev/sde
brw-rw---- 1 root disk 8, 65 dic 30 16:56 /dev/sde1
brw-rw---- 1 root disk 8, 80 dic 30 16:56 /dev/sdf
brw-rw---- 1 root disk 8, 81 dic 30 16:56 /dev/sdf1
brw-rw---- 1 root disk 8, 96 dic 30 16:56 /dev/sdg
brw-rw---- 1 root disk 8, 97 dic 30 16:56 /dev/sdg1

ejecutamos

udevadm control --reload-rules
/sbin/start_udev

Y comprobamos los permisos, tenemos que:

[root@rac1 rules.d]# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 dic 30 15:01 /dev/sda
brw-rw---- 1 root disk 8, 1 dic 30 15:01 /dev/sda1
brw-rw---- 1 root disk 8, 2 dic 30 15:01 /dev/sda2
brw-rw---- 1 root disk 8, 16 dic 30 15:01 /dev/sdb
brw-rw---- 1 grid asmadmin 8, 17 dic 30 15:01 /dev/sdb1
brw-rw---- 1 root disk 8, 32 dic 30 15:01 /dev/sdc
brw-rw---- 1 grid asmadmin 8, 33 dic 30 15:01 /dev/sdc1
brw-rw---- 1 root disk 8, 48 dic 30 15:01 /dev/sdd
brw-rw---- 1 grid asmadmin 8, 49 dic 30 15:01 /dev/sdd1
brw-rw---- 1 root disk 8, 64 dic 30 15:01 /dev/sde
brw-rw---- 1 grid asmadmin 8, 65 dic 30 15:01 /dev/sde1
brw-rw---- 1 root disk 8, 80 dic 30 15:01 /dev/sdf
brw-rw---- 1 grid asmadmin 8, 81 dic 30 15:01 /dev/sdf1
brw-rw---- 1 root disk 8, 96 dic 30 15:01 /dev/sdg
brw-rw---- 1 grid asmadmin 8, 97 dic 30 15:01 /dev/sdg1

Comprobacion de prerequisitos

Ahora podremos comprobar que esta todo correcto con el comando


./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -r 11gR2 

El siguiente paso será la instalación del Grid Infraestructure

Creación de una plataforma de pruebas RAC con VirtualBox

Hoy vamos a crear otro entorno de pruebas para jugar con el RAC, esta vez lo haremos con la herramienta de virtualización de Oracle VirtualBox ,en nuestro caso bajo un OSX 10.8

Los pasos que seguiremos son:

Creación de máquina virtual y sistema operativo

Para empezar, al igual que hicimos  con el KVM instalaremos un servidor linux normal y corriente  al que llamaremos Plantilla.Las características de la máquina serán:

  • 4 Gb de RAM
  • 4 Mb de targeta gráfica
  • 1 Imagen de DVD montada con los fuentes de Oracle
  • 4 Gb de SWAP
  • 16Gb de disco duro
  • Eliminamos el Audio y los USB

El sistema operativo que vamos a instalar es la última distribución de Oracle Linux (en nuestro caso 6.3), haremos la instalación mínima por defecto.
Actualizacion tenemos una entrada «futura» en la que se indica como hacer esta instalación de manera rápida Instalación Básica de Linux para un Oracle 11

Creación de la infraestructura de red

Lo primero que vamos ha hacer es crear las 2 redes privadas que tendrán nuestros equipos.
En este ejemplo los equipos van a tener 3 interfaces de red:

  • Eth0: Ip virtual de la red 192.168.1.X que hara la funcion de virtual
  • Eth1: Ip virtual de la red 192.168.2.X que hara la funcion de privada
  • Eth2: Ip de host asignada por el VirtualBox (10.0.4.X ) y que tendrá salida a internet

Desde las preferencias de nuestro virtualbox y crearemos 2 redes solo anfitrion de la siguiente forma:
Imagen de pantalla adaptador

Imagen de pantalla dhcp

Una vez repetida esta acción con las 3 redes, tendremos un apartado de configuración de red del VirtualBox similar a este:
red

Lo siguiente que tenemos que hacer es añadir 3 interfaces de red a nuestro equipo virtual asignando a cada nueva interfaz de red a una de estas 3 redes solo host que hemos creado.
En la pestaña de red tendremos nuestro Adaptador 1 creado automáticamente por la instalación de la forma

Nosotros tendremos que añadir el resto de adaptadores para que queden

donde debería de haber una correspondencia entre

  • Adaptador2 ->vboxnet1
  • Adaptador3 ->vboxnet2

Creación de arquitectura de discos

Nuestro siguiente punto va a ser crear nuestros discos compartidos, para ello abriremos una ventana de terminal en el equipo en el que estemos instalando el VirtualBox y nos iremos a el directorio donde esten instalados las máquinas (en caso del OSX es en /Users/$usuario/VirtualBox VMs ) y ejecutaremos los siguientes comandos

mkdir discos
cd discos 
VBoxManage createhd --filename asm1.vdi --size 5120 --format VDI --variant Fixed
VBoxManage createhd --filename asm2.vdi --size 5120 --format VDI --variant Fixed 
VBoxManage createhd --filename asm3.vdi --size 5210 --format VDI --variant Fixed 
VBoxManage createhd --filename asm4.vdi --size 1024 --format VDI --variant Fixed 
VBoxManage createhd --filename asm5.vdi --size 1024 --format VDI --variant Fixed

Los ponemos como compartidos

VBoxManage modifyhd asm1.vdi --type shareable
VBoxManage modifyhd asm2.vdi --type shareable
VBoxManage modifyhd asm3.vdi --type shareable
VBoxManage modifyhd asm4.vdi --type shareable
VBoxManage modifyhd asm5.vdi --type shareable

Con esto tenemos creados los discos que usaremos en el RAC, ahora tenemos que añadirlos a nuestra maquina virtual,para ello iremos a la pestaña Almacenamiento de nuestra máquina y crearemos un nuevo interfaz del tipo SCSI, a este almacenamiento le añadiremos los 5 discos quedando de la manera:

Configuraciones del servidor
Llegados a este punto, tenemos todo el hardware listo para nuestra máquina virtual y el siguiente paso será configurarlo dentro del servidor.
Arrancaremos la máquina

Primero añadiremos en los ficheros de configuracion los requisitos de Oracle, en el fichero /etc/sysctl.conf

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 1054504960
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586

Al fichero /etc/security/limits.conf

oracle               soft    nproc   2047
oracle               hard    nproc   16384
oracle               soft    nofile  1024
oracle               hard    nofile  65536

Y crearemos el usuario Oracle con:

groupadd -g 1000 oinstall
groupadd -g 1200 dba
useradd -u 1100 -g oinstall -G dba oracle
passwd oracle

En lo referente a las interfaces de red, añadiremos al fichero /etc/hosts las líneas:


# HOST eth0 
# Direcciones para nuestros equipos (en una red normal seria publicas o de host)
192.168.1.1  exodar-priv.pamplona.name    exodar-priv  exodar
192.168.1.2  rac1-priv.pamplona.name    rac1-priv  rac1
192.168.1.3  rac2-priv.pamplona.name    rac2-priv  rac2
192.168.1.4  rac3-priv.pamplona.name    rac3-priv  rac3
192.168.1.5  rac4-priv.pamplona.name    rac4-priv  rac4
192.168.1.24 plantilla-priv.pamplona.name       plantilla-priv

#Virtual  Eth0 que cogeran los local listeners
192.168.1.12  rac1-vip.pamplona.name     rac1-vip
192.168.1.13  rac2-vip.pamplona.name     rac2-vip
192.168.1.14  rac3-vip.pamplona.name     rac3-vip
192.168.1.15  rac4-vip.pamplona.name     rac4-vip
#ETH0 que usara el RAC, ScaN  comentadas ya que estan configuradas en round robin de dns
#192.168.2.20   ractest.pamplona.name   ractest
#192.168.2.21   ractest.pamplona.name   ractest
#192.168.2.22   ractest.pamplona.name   ractest

#interconexcion  Eth1
192.168.2.1  exodar-conn.pamplona.name     exodar-conn
192.168.2.2  rac1-conn.pamplona.name     rac1-conn
192.168.2.3  rac2-conn.pamplona.name     rac2-conn
192.168.2.4  rac3-conn.pamplona.name     rac3-conn
192.168.2.5  rac4-conn.pamplona.name     rac4-conn


y configuraremos las interfaces de red modificando los ficheros

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
IPADDR=192.168.1.24
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
IPV6INIT=no
NAME=eth0

/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
BOOTPROTO=none
IPADDR=192.168.2.24
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
IPV6INIT=no
NAME=eth1

/etc/sysconfig/network-scripts/ifcfg-eth2

DEVICE=eth2
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
IPV6INIT=no
NAME=eth2

Después crearemos nuestros discos de ASM, para ello, primero habremos de particionar los discos /dev/sdb,/dev/sdc,/dev/sdd,/dev/sde y /dev/sdf . EL proceso será el mismo para los 5

# fdisk /dev/sdb
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-16065, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-16065, default 16065):
Using default value 16065

Command (m for help): p
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa03e3f05
 Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         652     5237158+  83  LinuxLinux

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#

Tras haber particionado los 5 discos crearemos discos ASM sobre ellos con el comando

# /usr/sbin/oracleasm createdisk DISK1 /dev/sdb1
Writing disk header: done
Instantiating disk: done
# /usr/sbin/oracleasm createdisk DISK2 /dev/sdc1
Writing disk header: done
Instantiating disk: done
# /usr/sbin/oracleasm createdisk DISK3 /dev/sdd1
Writing disk header: done
Instantiating disk: done
# /usr/sbin/oracleasm createdisk DISK4 /dev/sde1
Writing disk header: done
Instantiating disk: done
# /usr/sbin/oracleasm createdisk DISK5 /dev/sdf1
Writing disk header: done
Instantiating disk: done
# 

Podremos comprobar que los discos estan creados con la orden


[root@pruebas ~]# oracleasm listdisks
DISK1
DISK2
DISK3
DISK4
DISK5

Y con eso ya tenemos un servidor que nos puede servir de plantilla para nuestras futuras pruebas del RAC.
En la siguiente entrada duplicaremos los servidores e instalaremos nuestro Oracle RAC 11g