Como agregar un nodo a un Cluster de Oracle Database, en modo silencioso.

Raúl Antonio Molina Alvarenga

23 de Abril de 2023

#OracleTipsSV

#OracleACEAssociate

Es de lo más común  en proyectos de Alta Disponibilidad de Oracle Database, que los Clusters  nazcan con la cantidad requerida de Nodos de computo que albergaran a las instancias de Base de Datos, es lo de más común; pero eso no significa, que ante la necesidad, no podamos agregar o remover un nodo de un cluster activo.

Hay una master Note de MOS que nos hace un resumen de dicho procedimiento para todas las versiones actuales y anteriores de Software Oracle, y es que aunque en las ultimas versiones el procedimental sea de lo mas parecido, debemos ser conscientes que la infraestructura interna del software las cosas si han cambiado bastante.

El DOCID:

How to Add Node/Instance or Remove Node/Instance with Oracle Clusterware and RAC (Doc ID 1332451.1)

Nos enfocaremos en la guia Oficial de 11.2:

https://docs.oracle.com/cd/E14795_01/doc/rac.112/e10717/adddelclusterware.htm#CHDFIAIE

Nuestro ambiente:

NOTA:Omito temas de configuraciones, así como salidas de comandos, en esencia la guía, muestra la sintaxis valida de los comandos para agregar un nodo.

Nodos: sa-nodo01, sa-nodo02

Nuestros pasos:

Debemos validar que la equivalencia de usuarios( oracle y grid si es que así lo hemos aplicado el role separation), esta correctamente configurado

./sshUserSetup.sh -user grid -hosts “sa-nodo01 sa-nodo02” -advanced -noPromptPassphrase

./sshUserSetup.sh -user oracle -hosts "sa-nodo01 sa-nodo02" -advanced -noPromptPassphrase

Debemos validar que contamos con todos los discos de preferencia con los mismos nombres de dispositivos:

ASMCMD [+] > lsdsk -G dggrid

/dev/rdsk/c1d12s0

/dev/rdsk/c1d13s0

/dev/rdsk/c1d14s0

ASMCMD [+] > lsdsk -G dgnada

/dev/rdsk/c1d10s0

/dev/rdsk/c1d11s0

/dev/rdsk/c1d4s0

/dev/rdsk/c1d5s0

/dev/rdsk/c1d6s0

/dev/rdsk/c1d7s0

/dev/rdsk/c1d8s0

/dev/rdsk/c1d9s0

ASMCMD [+] > lsdsk -G dgarch

/dev/rdsk/c1d18s0

/dev/rdsk/c1d19s0

/dev/rdsk/c1d20s0

mid

ASMCMD [+] > lsdsk -G dgarch

/dev/rdsk/c1d23s0

/dev/rdsk/c1d24s0

/dev/rdsk/c1d25s0 —> 

ASMCMD [+] > lsdsk -G dggrid

/dev/rdsk/c1d10s0

/dev/rdsk/c1d11s0

/dev/rdsk/c1d9s0

ASMCMD [+] > lsdsk -G dgnada

/dev/rdsk/c1d12s0

/dev/rdsk/c1d13s0

/dev/rdsk/c1d14s0

/dev/rdsk/c1d15s0

/dev/rdsk/c1d16s0

/dev/rdsk/c1d18s0

/dev/rdsk/c1d19s0

/dev/rdsk/c1d20s0

/dev/rdsk/c1d21s0

/dev/rdsk/c1d22s0

meta

ASMCMD [+] > lsdsk -G dgnada

/dev/rdsk/c1d10s0

/dev/rdsk/c1d11s0

/dev/rdsk/c1d7s0

/dev/rdsk/c1d8s0

/dev/rdsk/c1d9s0

ASMCMD [+] > lsdsk -G dggrid

/dev/rdsk/c1d4s0

/dev/rdsk/c1d5s0

/dev/rdsk/c1d6s0

ASMCMD [+] > lsdsk -G dgarch

/dev/rdsk/c1d12s0

/dev/rdsk/c1d13s0

/dev/rdsk/c1d14s0

ASMCMD [+] >

chmod 660 /dev/rdsk/c1d10s0

chmod 660 /dev/rdsk/c1d11s0

chmod 660 /dev/rdsk/c1d7s0

chmod 660 /dev/rdsk/c1d8s0

chmod 660 /dev/rdsk/c1d9s0

chmod 660 /dev/rdsk/c1d4s0

chmod 660 /dev/rdsk/c1d5s0

chmod 660 /dev/rdsk/c1d6s0

chmod 660 /dev/rdsk/c1d12s0

chmod 660 /dev/rdsk/c1d13s0

chmod 660 /dev/rdsk/c1d14s0

chown grid:asmadmin /dev/rdsk/c1d10s0

chown grid:asmadmin /dev/rdsk/c1d11s0

chown grid:asmadmin /dev/rdsk/c1d7s0

chown grid:asmadmin /dev/rdsk/c1d8s0

chown grid:asmadmin /dev/rdsk/c1d9s0

chown grid:asmadmin /dev/rdsk/c1d4s0

chown grid:asmadmin /dev/rdsk/c1d5s0

chown grid:asmadmin /dev/rdsk/c1d6s0

chown grid:asmadmin /dev/rdsk/c1d12s0

chown grid:asmadmin /dev/rdsk/c1d13s0

chown grid:asmadmin /dev/rdsk/c1d14s0

También debemos entender y  contemplar que la infraestructura de red este en correcto funcionamiento, podemos usar la siguiente DOCID de MOS:

How to Validate Network and Name Resolution Setup for the Clusterware and RAC (Doc ID 1054902.1)

Si cuando se instalo el o los nodos originales se ignoro alguna revision, y no sabemos dicho resultado, podemos de antemano, obviar dichas validaciones estableciendo esta variable de ambiente en Y:

export IGNORE_PREADDNODE_CHECKS=Y

Una vez todo esta revisado y validado procedemos a desplegar 
el nodo nuevo agregandolo a la capa de GI
cd $ORACLE_HOME/oui/bin

./addNode.sh -silent "CLUSTER_NEW_NODES={sa-nodo02}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={sa-nodo02-vip}"

Ahora, debemos agregar la capa de software del RDBMS, usualmente con el usuario oracle.

##oracle

cd $ORACLE_HOME/oui/bin

./addNode.sh -silent "CLUSTER_NEW_NODES={sa-nodo02}"

Ahora debemos agregar la siguiente instancia que se ejecutara en el nodo recién agregado, vamos a extender la BD o las BDs en 1 instancia adicional:

dbca -silent -addInstance -nodeList sa-nodo02 -gdbName osmdata -instanceName osmdata2 -sysDBAUserName sys -sysDBAPassword oracle11g

dbca -silent -addInstance -nodeList sa-nodo02 -gdbName ocpdb -instanceName ocpdb2 -sysDBAUserName sys -sysDBAPassword oracle11g

dbca -silent -addInstance -nodeList sa-nodo02 -gdbName cepdb -instanceName cepdb2 -sysDBAUserName sys -sysDBAPassword oracle11g

dbca -silent -addInstance -nodeList sa-nodo02 -gdbName osmdata -instanceName osmdata2 -sysDBAUserName sys -sysDBAPassword oracle11g

dbca -silent -addInstance -nodeList sa-nodo02 -gdbName load -instanceName load2 -sysDBAUserName sys -sysDBAPassword oracle11g

El resultado final, un cluster con 2 nodos:

grid@sa-nodo02:~$ crs_stat -t

Name           Type           Target    State     Host        

------------------------------------------------------------

ora.DGARCH.dg  ora....up.type ONLINE    ONLINE    sa-nodo01

ora.DGGRID.dg  ora....up.type ONLINE    ONLINE    sa-nodo01

ora.DGnada.dg  ora....up.type ONLINE    ONLINE    sa-nodo01

ora....ER.lsnr ora....er.type ONLINE    ONLINE    sa-nodo01

ora....N1.lsnr ora....er.type ONLINE    ONLINE    sa-nodo02

ora....N2.lsnr ora....er.type ONLINE    ONLINE    sa-nodo01

ora....N3.lsnr ora....er.type ONLINE    ONLINE    sa-nodo01

ora.asm        ora.asm.type   ONLINE    ONLINE    sa-nodo01

ora.cepdb.db   ora....se.type ONLINE    ONLINE    sa-nodo01

ora.cvu        ora.cvu.type   ONLINE    ONLINE    sa-nodo02

ora.esbdata.db ora....se.type ONLINE    ONLINE    sa-nodo01

ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               

ora....network ora....rk.type ONLINE    ONLINE    sa-nodo01

ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    sa-nodo02

ora.ocpdb.db   ora....se.type ONLINE    ONLINE    sa-nodo01

ora.ons        ora.ons.type   ONLINE    ONLINE    sa-nodo01

ora.osmdata.db ora....se.type ONLINE    ONLINE    sa-nodo01

ora....ry.acfs ora....fs.type ONLINE    ONLINE    sa-nodo01

ora....SM1.asm application    ONLINE    ONLINE    sa-nodo01

ora....01.lsnr application    ONLINE    ONLINE    sa-nodo01

ora....b01.gsd application    OFFLINE   OFFLINE               

ora....b01.ons application    ONLINE    ONLINE    sa-nodo01

ora....b01.vip ora....t1.type ONLINE    ONLINE    sa-nodo01

ora....SM2.asm application    ONLINE    ONLINE    sa-nodo02

ora....02.lsnr application    ONLINE    ONLINE    sa-nodo02

ora....b02.gsd application    OFFLINE   OFFLINE               

ora....b02.ons application    ONLINE    ONLINE    sa-nodo02

ora....b02.vip ora....t1.type ONLINE    ONLINE    sa-nodo02

ora.scan1.vip  ora....ip.type ONLINE    ONLINE    sa-nodo02

ora.scan2.vip  ora....ip.type ONLINE    ONLINE    sa-nodo01

ora.scan3.vip  ora....ip.type ONLINE    ONLINE    sa-nodo01

ps -fea | grep pmon

    grid 21207     1   0 21:47:06 ?           0:01 asm_pmon_+ASM2

  oracle  5566     1   0 22:25:00 ?           0:00 ora_pmon_osmdata2

  oracle  7364     1   0 22:29:42 ?           0:00 ora_pmon_ocpdb2

  oracle  9184     1   0 22:34:28 ?           0:00 ora_pmon_cepdb2

  oracle  9886     1   0 22:35:42 ?           0:00 ora_pmon_esbdata2

    grid 10189  9429   0 22:36:31 pts/1       0:00 grep pmon

grid@sa-nodo02:~$ crs_stat -t

Name           Type           Target    State     Host        

------------------------------------------------------------

ora.DGARCH.dg  ora....up.type ONLINE    ONLINE    sa-nodo01

ora.DGGRID.dg  ora....up.type ONLINE    ONLINE    sa-nodo01

ora.DGnada.dg  ora....up.type ONLINE    ONLINE    sa-nodo01

ora....ER.lsnr ora....er.type ONLINE    ONLINE    sa-nodo01

ora....N1.lsnr ora....er.type ONLINE    ONLINE    sa-nodo02

ora....N2.lsnr ora....er.type ONLINE    ONLINE    sa-nodo01

ora....N3.lsnr ora....er.type ONLINE    ONLINE    sa-nodo01

ora.asm        ora.asm.type   ONLINE    ONLINE    sa-nodo01

ora.cepdb.db   ora....se.type ONLINE    ONLINE    sa-nodo01

ora.cvu        ora.cvu.type   ONLINE    ONLINE    sa-nodo02

ora.esbdata.db ora....se.type ONLINE    ONLINE    sa-nodo01

ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               

ora....network ora....rk.type ONLINE    ONLINE    sa-nodo01

ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    sa-nodo02

ora.ocpdb.db   ora....se.type ONLINE    ONLINE    sa-nodo01

ora.ons        ora.ons.type   ONLINE    ONLINE    sa-nodo01

ora.osmdata.db ora....se.type ONLINE    ONLINE    sa-nodo01

ora....ry.acfs ora....fs.type ONLINE    ONLINE    sa-nodo01

ora....SM1.asm application    ONLINE    ONLINE    sa-nodo01

ora....01.lsnr application    ONLINE    ONLINE    sa-nodo01

ora....b01.gsd application    OFFLINE   OFFLINE               

ora....b01.ons application    ONLINE    ONLINE    sa-nodo01

ora....b01.vip ora....t1.type ONLINE    ONLINE    sa-nodo01

ora....SM2.asm application    ONLINE    ONLINE    sa-nodo02

ora....02.lsnr application    ONLINE    ONLINE    sa-nodo02

ora....b02.gsd application    OFFLINE   OFFLINE               

ora....b02.ons application    ONLINE    ONLINE    sa-nodo02

ora....b02.vip ora....t1.type ONLINE    ONLINE    sa-nodo02

ora.scan1.vip  ora....ip.type ONLINE    ONLINE    sa-nodo02

ora.scan2.vip  ora....ip.type ONLINE    ONLINE    sa-nodo01

ora.scan3.vip  ora....ip.type ONLINE    ONLINE    sa-nodo01

Espero les sea de utilidad.

Saludos!!

De la guia:

Adding a Cluster Node on Linux and UNIX Systems

This procedure describes how to add a node to your cluster. This procedure assumes that:

  • There is an existing cluster with a node named node1
  • You are adding a node named node2
  • You have successfully installed Oracle Clusterware on node1 in a nonshared home, where Grid_home represents the successfully installed home

To add a node:

  1. Ensure that you have successfully installed Oracle Clusterware on at least one node in your cluster environment. To perform the following procedure, Grid_home must identify your successfully installed Oracle Clusterware home.

    See Also:

    Oracle Grid Infrastructure Installation Guide for Oracle Clusterware installation instructions

  2. Verify the integrity of the cluster and node2:
    $ cluvfy stage -pre nodeadd -n node2 [-fixup [-fixupdir fixup_dir]] [-verbose]
    

    You can specify the -fixup option and a directory into which CVU prints instructions to fix the cluster or node if the verification fails.

  3. Navigate to the Grid_home/oui/bin directory on node1 and run the addNode.sh script using the following syntax, where node2 is the name of the node that you are adding and node2-vip is the VIP name for the node:If you are using Grid Naming Service (GNS):
    $ ./addNode.sh -silent "CLUSTER_NEW_NODES={node2,node3}"
    

    If you are not using GNS:

    $ ./addNode.sh -silent "CLUSTER_NEW_NODES={node2,node3}""CLUSTER_NEW_VIRTUAL_HOSTNAMES={node2-vip,node3-vip}" 
    

    Alternatively, you can specify the entries shown in Example 4-1 in a response file, where file_name is the name of the file, and run the addNode.sh script, as follows:

    $ addNode.sh -silent -responseFile file_name
    

    When prompted, run root.sh before the addNode.sh script completes.