Troubleshoot: CRS-2304 GPnP profile signature verification failed.

En el artículo previo les comenté que estoy desarrollando un proyecto de upgrade de Oracle Database Server 11.2 a 19c, y luego de corregir el problema de permisos, todo parecía estar en orden.

El primer paso era tener las bases de datos operando con Oracle 11.2, y fue en ese momento que llamó mi atención un mensaje de error en los archivos alert.log.

LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Initial number of CPU is 2
Number of processor cores in the system is 2
Number of processor sockets in the system is 1
2024-10-06 09:50:16.306:
[USER(21480)]CRS-2304:GPnP profile signature verification failed. get-profile request aborted.
  WARNING: No cluster interconnect has been specified. Depending on
           the communication driver configured Oracle cluster traffic
           may be directed to the public interface of this machine.
           Oracle recommends that RAC clustered databases be configured
           with a private interconnect for enhanced security and
           performance.
Picked latch-free SCN scheme 3
. . .
  pga_aggregate_target     = 128M
  diagnostic_dest          = "/u01/app/oracle"
Cluster communication is configured to use the following interface(s) for this instance
  192.168.0.61
cluster interconnect IPC version:Oracle UDP/IP (generic)
IPC Vendor 1 proto 2

Al iniciar la instancia no se lograba obtener los datos de la red a usar para el interconnect, por lo que Oracle optaba por usar la red pública para dicho fin.

Esto no impedía que la base de datos levantara, pero definitivamente era una situación irregular con la que no me había encontrado en proyectos previos.

El problema

Empecemos por recordar que en todo Cluster Oracle se cuenta con 2 redes: una pública y una privada (interconnect), con usos y propiedades diferenciadas.

En el archivo de alerta se registra el uso de la dirección 192.168.1.61 para fines de interconnect, cuando debiera ser la dirección 169.254.13.3, lo cual es comprobable al consultar v$cluster_interconnects.

SQL> select * from v$cluster_interconnects;

NAME            IP_ADDRESS           IS_PUBLIC SOURCE
--------------- -------------------- --------- ----------------------------------------
eth1            192.168.0.61                   OS dependent software

Primer intento

Buscando en My Oracle Support se encuentra este documento:
3004140.1Oracle Server Processes Terminated By Fatal Error ORA-27504 In 11.2 DB Managed By 19c GI Cluster

En él se nos indica que este problema se presenta cuando una base de datos Oracle RAC 11.2 opera bajo Oracle Grid 19c, ya que bajo esa combinación la instancia Oracle 11.2 no logra validar el profile de GPnP 19c (Grid Plug and Play), siendo necesario aplicar el parche 32967645.

Desafortunadamente se requiere de Upgrade Support (antes Market Driven Support) para descargarlo.

Se menciona también que existe un workaround, que consiste en fijar manualmente las direcciones usando el parámetro cluster_interconnects, para cada instancia.

Si bien suena tentador, no parece ser la solución definitiva, después de todo este problema no se me había presentado antes en proyectos similares.

¿Qué tiene de diferente esta instalación?

Segundo intento

Afortunadamente en My Oracle Support existe este documento:

2985244.1GPNP reports gpnp call get-profile got invalid profile error

Allí se indica que debido a «requerimientos internos del equipo de seguridad», se ha actualizado el algoritmo usado para verificar el profile de GPnP,  desde Oracle 19.16.

Este dato resuelve nuestra interrogante: esta instalación ha nacido directamente con Oracle 19.24, por tanto está sujeta el nuevo algoritmo, y esto impide a las instancias 11.2 poder obtener el dato de la dirección para interconnect.

En la misma nota se presenta un procedimiento a seguir para actualizar manualmente el algoritmo, pues para instalaciones previas a 19.16 está en uso el algoritmo antiguo e inseguro y es recomendado actualizarlo al algoritmo nuevo y seguro.

Pero nuestro caso es distinto, ya tenemos el nuevo algoritmo en uso y deseamos regresar al algoritmo antiguo. ¿Será posible? Probemos.

Por lo indicado en la nota, el nuevo algoritmo es sha512, y revisando una instalación antigua se encuentra que el algoritmo previo es sha1. ¡He allí la discrepancia que nos ha traído hasta acá!

Seguiremos el procedimiento detallado en la nota, pero en lugar de actualizar el algoritmo de validación de sha1 a sha512, actualizaremos de sha512 a sha1.
export GI_HOME=/u01/app/grid/19.0.0/grid_1

-- obtener secuencia actual del profile
[oracle@node1 ~]$ gpnptool getpval -prf_sq \
-p=${GI_HOME}/gpnp/node1/profiles/peer/profile.xml

5

-- incrementar la secuencia en 5
[oracle@node1 ~]$ gpnptool edit -prf_sq=10 \
-p=${GI_HOME}/gpnp/node1/profiles/peer/profile.xml \
-o=/tmp/profile_sqenum.xml

-- firmar el profile con el algoritmo antiguo (sha1)
[oracle@node1 ~]$ gpnptool sign -a=sha1 \
-p=/tmp/profile_sqenum.xml -o=/tmp/profile_signed.xml

Warning: sha1 algorithm is deprecated.

-- publicar el profile en todos los nodos
[oracle@node1 ~]$ gpnptool put -p=/tmp/profile_signed.xml

Si bien al firmar el profile se nos da la advertencia de que se está usando un algoritmo obsoleto, sí completa el pedido.

Procedemos a reiniciar la instancia 11.2 y comprobamos que ya no hay mensajes de error en el archivo alert.log.

LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Initial number of CPU is 2
Number of processor cores in the system is 2
Number of processor sockets in the system is 1
Private Interface 'eth2:1' configured from GPnP for use as a private interconnect.
  [name='eth2:1', type=1, ip=169.254.13.3, mac=08-00-27-25-2a-76, net=169.254.0.0/19, mask=255.255.224.0, use=haip:cluster_interconnect/62]
Public Interface 'eth1' configured from GPnP for use as a public interface.
  [name='eth1', type=1, ip=192.168.0.61, mac=08-00-27-7f-71-2e, net=192.168.0.0/24, mask=255.255.255.0, use=public/1]
Public Interface 'eth1:1' configured from GPnP for use as a public interface.
  [name='eth1:1', type=1, ip=192.168.0.66, mac=08-00-27-7f-71-2e, net=192.168.0.0/24, mask=255.255.255.0, use=public/1]
Public Interface 'eth1:2' configured from GPnP for use as a public interface.
  [name='eth1:2', type=1, ip=192.168.0.65, mac=08-00-27-7f-71-2e, net=192.168.0.0/24, mask=255.255.255.0, use=public/1]
Public Interface 'eth1:3' configured from GPnP for use as a public interface.
  [name='eth1:3', type=1, ip=192.168.0.67, mac=08-00-27-7f-71-2e, net=192.168.0.0/24, mask=255.255.255.0, use=public/1]
Public Interface 'eth1:4' configured from GPnP for use as a public interface.
  [name='eth1:4', type=1, ip=192.168.0.63, mac=08-00-27-7f-71-2e, net=192.168.0.0/24, mask=255.255.255.0, use=public/1]
Public Interface 'eth1:5' configured from GPnP for use as a public interface.
  [name='eth1:5', type=1, ip=192.168.0.64, mac=08-00-27-7f-71-2e, net=192.168.0.0/24, mask=255.255.255.0, use=public/1]
Picked latch-free SCN scheme 3
. . .
  db_unique_name           = "db112"
  open_cursors             = 300
  pga_aggregate_target     = 128M
  diagnostic_dest          = "/u01/app/oracle"
Cluster communication is configured to use the following interface(s) for this instance
  169.254.13.3
cluster interconnect IPC version:Oracle UDP/IP (generic)
IPC Vendor 1 proto 2

Se observa que las direcciones de la red pública y de la red privada son reconocidas correctamente, y lo verificamos también en v$cluster_interconnects.

SQL> select * from v$cluster_interconnects;

NAME            IP_ADDRESS           IS_PUBLIC SOURCE
--------------- -------------------- --------- ------------------------------
eth2:1          169.254.13.3         NO

El caso está finalmente resuelto, afortunadamente se encontró una solución que nos evitó tener que pagar soporte adicional para descargar parches, ni fijar parámetros de instancia!

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o ¡contáctame ahora mismo!

Una respuesta

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.

Posts Relacionados

Aprenda a identificar la fila involucrada en la ocurrencia del evento de espera "enq: TX - row lock contention"
Aprenda a corregir los permisos dañados de un Oracle Home, ya sea de Oracle Grid o de Oracle Database Server
Aprenda a mejorar la seguridad de sus aplicaciones usando Oracle Wallet / Secure External Password Store.

¿Necesitas Ayuda?

Completa estos datos y estaré en contacto a la brevedad.