Con este espacio pretendo crear un rincón de información relacionda con las bases de datos Oracle, sus funcionalidades, características, noticias.... etc. Interaré hacer pequeños artículos con ejemplos demostrativos para que resulte más fácil leerlos. No dudéis en mandar vuestros comentarios, críticas, aclaraciones... etc.

Información del Autor

Llevo más de diez años trabajando como DBA Oracle en diferentes compañías y desde el 2004 lo hago de forma freelance a través de una sociedad creada por mí, Infor Consult Soluciones (http://www.inforconsult.es). Si tienes cualquier duda, comentario o propuesta que hacerme, no lo dudes.

viernes, 15 de julio de 2011

Single Cliente Access Name (SCAN)

En Oracle11g Release 2 se ha creado un nuevo esquema de conexión SQL*Net para la arquitectura Real Application Cluster (RAC), donde los clientes no conectan a los listener locales de los nodos del cluster directamente; ahora se usan unas direcciones IPs, llamadas direcciones SCAN (normalmente son tres), que son asociadas con un mismo nombre de dominio o nombre del cluster, también llamado nombre SCAN, de forma que cuando un cliente interroga al DNS por ese dominio, éste responde con una IP distinta cada vez (de entre las tres configuradas) y de forma cíclica.

Durante la instalación del RAC se crean los tres listener que escuchan por las tres IPs SCAN y es Oracle Clusterware el que reparte estos listener por los nodos del cluster según sus algoritmos de reparto de recursos en función de la carga de los nodos. Los clientes conectan al cluster usando el nombre SCAN que el DNS resolverá por una de tres IPs, lo que hará que los clientes conecten al listener SCAN que escucha por dicha IP. Los listener SCAN conocen los servicios ofrecidos por el cluster (a través del parámetro REMOTE_LISTENER de cada instancia), qué instancias ofrecen dichos servicios y con qué nivel de saturación, de forma que el listener SCAN redirecciona la petición al listener local del nodo que atiende el servicio solicitado por el cliente con la menor carga de trabajo.

De esta forma si añadimos o eliminamos nodos del cluster los clientes no se ven afectados porque seguirán conectando al nombre SCAN y cuyo listener SCAN redireccionará al listener del nodo adecuado. Además, dado que Oracle Clusteware mueve los listener SCAN entre los nodos, si quitamos un nodo en el que está corriendo un listener SCAN éste será movido a otro nodo y el cliente no se enterará de la operación resultando transparente para él.

Las instancias del cluster saben siempre en qué nodos están corriendo los listener SCAN por medio del parámetro REMOTE_LISTENER, cuyo valor es dirección_scan:puerto_scan. Las instancias del cluster resuelven la dirección_scan por las tres IPs, y la correspondencia entre la IP SCAN y el nodo en donde reside dicha IP (recuérdese que Oracle Clusterware mueve los listener SCAN entre los nodos) se hace a través del protocolo TCP/IP ARP. Por tanto, cuando Oracle Clusteware mueve los listener SCAN de un nodo a otro, ni en los clientes ni en las instancias se debe modificar nada porque el cambio se hace por debajo del nivel de applicación.

Para gestionar los listener SCAN se debe usar la herramienta del clusterware srvctl:

Saber el estado de las IPs SCAN:
c:\> srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node
Saber el estado de los listener SCAN:
c:\> srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node
Parar los listener SCAN:
c:\> srvctl stop scan_listener [-f force] --> para todos los listener SCAN
c:\> srvctl stop scan_listener -i 2 --> para el listener 2
Arrancar todos los listener SCAN:
c:\> srvctl start scan_listener --> arranca los listener SCAN en los nodos que el clusterware considere.
c:\> srvctl start scan_listener -n nombre_del_nodo --> arranca los listener SCAN en el nodo indicado
c:\> srvctl start scan_listener -i 2 [-n nombre_del_nodo] --> arranca el listener 2 [en el nodo indicado]
Finalmente, sólo añadir que la redirección que hacen los listener SCAN hacia los listener locales de los nodos se hace a través de la dirección IP virtual o VIP, es decir, los listener locales de los nodos escuchan tanto por la IP pública como por la VIP. Esto permite poder seguir usando conexiones clientes como hasta ahora, es decir, usando en el descriptor de conexión la IP virtual del nodo al que queremos conectarnos sin preocuparnos por SCAN para nada. Esto es especialmente valioso si tenemos en cuenta que para que un cliente pueda usar SCAN debe tener versión Oracle11g Release 2 o superior, de forma que tras una migración de nuestro servidor a Oracle11g nuestros clientes pueden permanecer inalterados, aunque no es lo recomendable.

Juan Lorenzo Arellano
Infor Consult Soluciones.
www.inforconsult.es