En este artículo publicado en Toad World, se detalla el procedimiento a seguir para realizar un Rolling Out-of-Place patching para Oracle Grid Infrastucture, que se inicia con la clonación del GI home directory activo y la aplicación sobre él del patch deseado. Estos pasos se repiten en todos y cada uno de los nodos que forman parte del cluster sobre el cual estamos trabajando, pero ¿qué ocurre si tenemos una gran cantidad de nodos? Aun cuando podamos realizar estas tareas en paralelo, se sigue requiriendo de tiempo y esfuerzo para repetir una y otra vez el procedimiento.

En el presente artículo analizaremos la forma de aplicar un patch a Oracle Grid Infrastructure (en adelante GI), ya sea éste de la versión 11.2 o 12.1, pero ya no solo haciendo énfasis en minimizar la suspensión del servicio, sino también en minimizar el esfuerzo en aplicarlo.

En primer lugar tomemos en cuenta las siguientes suposiciones iniciales:

  • GI home directory original: /u01/app/grid/12.1.0/grid_1
  • GI home directory clonado: /u01/app/grid/12.1.0/grid_2
  • La versión en uso de GI es la 12.1.0.1.0, y se desea aplicar el PSU 12.1.0.1.4
  • Se ha descargado e instalado correctamente la versión más reciente de OPatch
  • Se ha clonado el GI home directory activo y aplicado el patch deseado sobre él, en uno de los nodos del cluster (node1), restando hacerlo sobre los demás nodos.

Creación de Golden Image

1. En el primer nodo del cluster (node1) se ejecutan los pasos del 1 al 4 que se detallan en el artículo Rolling Out-of-Place patching para Oracle Grid Infrastucture, luego de lo cual contaremos con un GI home directory clonado y con el patch debidamente aplicado, listo para reemplazar al anterior y aún activo (switch de GI home directories).

 2. En lugar de repetir los pasos del 1 al 4 en todos y cada uno de los nodos, usaremos el GI home directory clonado que ya tenemos, para en base a él obtener un Golden Image, para lo cual empezamos por deshacernos de todos los archivos innecesarios y específicos al primer nodo (node1). 

[root@node1 ~]# export GRID_HOME=/u01/app/grid/12.1.0/grid_2

 

[root@node1 ~]# cd ${GRID_HOME}

[root@node1 grid_2]# find . -name *${THIS_NODE}* -exec rm -rf {} \;

[root@node1 grid_2]# rm -rf root.sh*

[root@node1 grid_2]# rm -rf cdata/*

[root@node1 grid_2]# rm -rf crf/*

[root@node1 grid_2]# rm -rf crs/init/*

[root@node1 grid_2]# rm -rf crs/install/s_crsconfig_${THIS_NODE}_env.txt

[root@node1 grid_2]# rm -rf crs/install/crsconfig_addparams

[root@node1 grid_2]# rm -rf inventory/backup/*

[root@node1 grid_2]# rm -rf log/diag/*

[root@node1 grid_2]# rm -rf network/admin/*.ora

[root@node1 grid_2]# rm -rf rdbms/audit/*

[root@node1 grid_2]# rm -rf rdbms/log/*

[root@node1 grid_2]# find . -name '*.ouibak' -exec rm {} \;

[root@node1 grid_2]# find . -name '*.ouibak.1' -exec rm {} \;

[root@node1 grid_2]# find cfgtoollogs -type f -exec rm -f {} \;

[root@node1 grid_2]# find gpnp -type f -exec rm -f {} \;

 3. Procederemos ahora a generar una copia del GI home directory clonado, que vendrá a ser nuestro Golden Image. En este caso crearemos un tarball comprimido. 

[root@node1 ~]# export GRID_HOME=/u01/app/grid/12.1.0/grid_2

[root@node1 ~]# cd ${GRID_HOME}

 

[root@node1 grid_2]# tar -zcpf /stage/gridHome121014.tgz .

Clonación del Golden Image

En lugar de copiar el GI home directory activo de cada nodo restante del cluster y aplicarle el patch deseado, usaremos el Golden Image obtenido en base a lo ya trabajado en el primer nodo del cluster (node1); de esta forma ahorraremos tiempo y esfuerzo.

4. Transferir y descomprimir el Golden Image en el siguiente nodo en la lista, teniendo especial cuidado en copiar el archivo "crsconfig_params" del GI home directory activo del nodo sobre el que estamos trabajando. 

[root@node2 ~]# export GRID_HOME=/u01/app/grid/12.1.0/grid_2

[root@node2 ~]# export GRID_HOME_OLD=/u01/app/grid/12.1.0/grid_1

[root@node2 ~]# export THIS_NODE=`hostname -s`

 

[root@node2 ~]# mkdir ${GRID_HOME}

[root@node2 ~]# chown -R oracle:oinstall ${GRID_HOME}

[root@node2 ~]# chmod -R 775 ${GRID_HOME}

 

[root@node2 ~]# cd ${GRID_HOME}

[root@node2 grid_2]# tar -zxpf /stage/gridHome121014.tgz .

[root@node2 grid_2]# /bin/cp -rfp ${GRID_HOME_OLD}/crs/install/crsconfig_params ${GRID_HOME}/crs/install/.

5. Desbloquear el GI home directory clonado, tomando en cuenta que los comandos son algo distintos dependiendo de la versión de GI, pero con el mismo resultado: modificar los archivos de propiedad de "root" para que lo sean de "oracle". 

GI 12.1

[root@node2 ~]# export GRID_HOME=/u01/app/grid/12.1.0/grid_2

 

[root@node2 ~]# /usr/bin/perl ${GRID_HOME}/crs/install/rootcrs.pl -prepatch -dstcrshome ${GRID_HOME}

Using configuration parameter file: /u01/app/grid/12.1.0/grid_2/crs/install/crsconfig_params

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2/crfmond' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/crf/admin/run/crfmond' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2/agent' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2/crsd' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/crf/admin' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2/agent/crsd' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2/ctssd' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2/gnsd' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2/crflogd' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2/agent/ohasd' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/auth/ohasd/node2' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/auth/evm/node2' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/auth/crs/node2' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2/ohasd' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/crf/db/node2' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/log/node2' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/crf/db' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/crf/admin/run/crflogd' does not exist

 

2014/07/22 03:22:48 CLSRSC-46: Error: '/u01/app/grid/12.1.0/grid_2/auth/css/node2' does not exist

 

2014/07/22 03:22:49 CLSRSC-347: Successfully unlock /u01/app/grid/12.1.0/grid_2

 GI 11.2

[root@node2 ~]# export GRID_HOME=/u01/app/grid/11.2.0/grid_2

 

[root@node2 ~]# /usr/bin/perl ${GRID_HOME}/OPatch/crs/patch112.pl -unlock -desthome ${GRID_HOME}

Prototype mismatch: sub main::trim: none vs ($) at /u01/app/grid/11.2.0/grid_2/OPatch/crs/patch112.pl line 401.

opatch auto log file location is /u01/app/grid/11.2.0/grid_2/crs/install/../../cfgtoollogs/opatchauto2014-07-22_06-45-14.log

Detected Oracle Clusterware install

Using configuration parameter file: /u01/app/grid/11.2.0/grid_2/crs/install/crsconfig_params

Successfully unlock /u01/app/grid/11.2.0/grid_2

 6. Clonar la instalación con el utilitario clone.pl

[oracle@node2 ~]$ export GRID_HOME=/u01/app/grid/12.1.0/grid_2

[oracle@node2 ~]$ export THIS_NODE=`hostname -s`

 

[oracle@node2 ~]$ /usr/bin/perl ${GRID_HOME}/clone/bin/clone.pl \

ORACLE_BASE=/u01/app/oracle \

ORACLE_HOME=$GRID_HOME \

ORACLE_HOME_NAME=OraGI12Home2 \

INVENTORY_LOCATION=/u01/app/oraInventory \

"CLUSTER_NODES={node1,node2,node3,node4,node5,node6,node7,node8}" \

LOCAL_NODE=${THIS_NODE} \

SHOW_ROOTSH_CONFIRMATION=false \

CRS=true

./runInstaller -clone -waitForCompletion  "ORACLE_BASE=/u01/app/oracle" "ORACLE_HOME=/u01/app/grid/12.1.0/grid_2" "ORACLE_HOME_NAME=OraGI12Home2" "INVENTORY_LOCATION=/u01/app/oraInventory" "CLUSTER_NODES={node1,node2,node3,node4,node5,node6,node7,node8}" "LOCAL_NODE=node2" "SHOW_ROOTSH_CONFIRMATION=false" "CRS=true" -silent -paramFile /u01/app/grid/12.1.0/grid_2/clone/clone_oraparam.ini

Starting Oracle Universal Installer...

 

Checking Temp space: must be greater than 500 MB.   Actual 5938 MB    Passed

Checking swap space: must be greater than 500 MB.   Actual 1020 MB    Passed

Preparing to launch Oracle Universal Installer from /tmp/OraInstall2014-07-22_02-44-42AM. Please wait ...You can find the log of this install session at:

 /u01/app/oraInventory/logs/cloneActions2014-07-22_02-44-42AM.log

..................................................   5% Done.

..................................................   10% Done.

..................................................   15% Done.

..................................................   20% Done.

..................................................   25% Done.

..................................................   30% Done.

..................................................   35% Done.

..................................................   40% Done.

..................................................   45% Done.

..................................................   50% Done.

..................................................   55% Done.

..................................................   60% Done.

..................................................   65% Done.

..................................................   70% Done.

..................................................   75% Done.

..................................................   80% Done.

..................................................   85% Done.

..................................................   90% Done.

..................................................   95% Done.

 

Copy files in progress.

 

Copy files successful.

 

Link binaries in progress.

 

Link binaries successful.

 

Setup files in progress.

 

Setup files successful.

 

Setup Inventory in progress.

 

Setup Inventory successful.

 

Finish Setup successful.

The cloning of OraGI12Home2 was successful.

Please check '/u01/app/oraInventory/logs/cloneActions2014-07-22_02-44-42AM.log' for more details.

 

As a root user, execute the following script(s):

        1. /u01/app/grid/12.1.0/grid_2/root.sh

 

Execute /u01/app/grid/12.1.0/grid_2/root.sh on the following nodes:

[node2]

 

..................................................   100% Done.

 Aun cuando al final de la clonación se nos indica ejecutar el script "root.sh", debemos ignorarlo.

 7. Copiar archivos de configuración del cluster, propios del nodo sobre el que se está trabajando.

Observación: se debe ejecutar también en el primer nodo (node1), esto debido a que los archivos en mención fueron eliminados como parte del paso previo a la generación del Golden Image.

[root@node2 ~]# export GRID_HOME=/u01/app/grid/12.1.0/grid_2

[root@node2 ~]# export GRID_HOME_OLD=/u01/app/grid/12.1.0/grid_1

[root@node2 ~]# export THIS_NODE=`hostname -s`

 

[root@node2 ~]# /bin/cp -rfp ${GRID_HOME_OLD}/cdata/${THIS_NODE}.olr ${GRID_HOME}/cdata/.

[root@node2 ~]# /bin/cp -rfp ${GRID_HOME_OLD}/crs/install/s_crsconfig_${THIS_NODE}_env.txt ${GRID_HOME}/crs/install/.

[root@node2 ~]# /bin/cp -Rfp ${GRID_HOME_OLD}/gpnp/* ${GRID_HOME}/gpnp/.

 8. Repetir los pasos del 4 al 7 para todos y cada uno de los nodos restantes del cluster. Se pueden ejecutar en varios/todos los nodos en paralelo, por cuanto se trabaja sobre el GI home directory clonado y por consiguiente no afecta la disponibilidad de los servicios.

Switch de GI home directories

9. Luego que todos los nodos del cluster tienen el GI home directory clonado y con el patch debidamente aplicado, se procede a realizar el switch de GI home directories, un nodo a la vez, empezando por el primer nodo (node1), tal y como se señala en el paso 6 del artículo Rolling Out-of-Place patching para Oracle Grid Infrastucture.

 

¡Felicitaciones!, si llegaste a este punto entonces ya tienes un Cluster operando con el patch que planificaste aplicar, con el mínimo esfuerzo, y solo tuviste que suspender el servicio por muy pocos minutos.

Conclusiones

 

El proceso de patching de Oracle Grid Infrastrucure puede ser enormemente simplificado mediante el uso de un Golden Image, ya que el proceso de creación de un GI home directory clonado, así como la aplicación del patch deseado, se ejecuta una sola vez y se puede reutilizar cuantas veces sea necesario.

Debemos tener en cuenta que un Golden Image puede ser empleado no solo para simplificar el procedimiento de aplicación de un patch, sino también para upgrades, así como para extender un cluster a más nodos, e incluso para crear nuevos clusters, ahorrando mucho tiempo y esfuerzo, por lo que es altamente recomendado estar familiarizados con su creación y uso.