Por Francisco Riccio
Publicado en septiembre 2012
Grid Naming Service (GNS) es una configuración que nos da la flexibilidad de colocar dinámicamente más nodos en el cluster de una manera simple. GNS es uno de los pilares de Plug & Play, el cual es una posibilidad que nos da Oracle de agregar o eliminar un servidor al cluster con el mínimo esfuerzo. La información que es requerida por Plug & Play y por supuesto por GNS es almacenada en el archivo profile.xml que se encuentra en las siguientes ubicaciones de cada servidor que conforma el cluster:
$ORACLE_HOME_GRID/gpnp//profile/peer/profile.xml $ORACLE_HOME_GRID /gpnp/profile/peer/profile.xml (backup global)
Este archivo lleva información sobre la configuración del cluster, tales como: datos sobre la interconnect, IP VIP, Storage del ASM, etc. Profile.xml es actualizado ni bien existe un cambio en la configuración y es replicado en el profile de cada servidor. El responsable de realizar está replicación es el proceso background: gpnpd.
Al colocar un nuevo equipo en el cluster teníamos que preocuparnos por las IP VIP y adicionalmente el IP SCAN si recién iniciábamos una instalación nueva de Infraestructura Grid. GNS ahora se encarga de asignar dinámicamente IPs a nuestras VIPs y a nuestro SCAN, estas IPs son obtenidas de un pool de IPs reservadas. Para realizar esta labor, GNS solicita como parte de su implementación un servicio DNS y un servicio DHCP.
El servicio de GNS solo inicia en uno de los servidores del cluster y atiende por el puerto 53 protocolo tcp. Este servicio está registrado como un recurso en el OCR, por lo cual, ante la caída del servidor que lleva el servicio GNS automáticamente Clusterware migra el servicio a uno de los nodos sobrevivientes. GNS tiene asignado una IP virtual estática la cual se iniciará como parte del servicio.
Iniciado el proceso GNS con su IP virtual estática, el proceso background orarootagent solicita al servidor DHCP los IPs necesarios para asignarlo a cada servidor que conforma el cluster. Estos IPs sirven para asignarlos a los IPs virtuales y a los IP SCAN cuya información es registrada en el servicio GNS.
El proceso background: mdns que se encuentra en cada servidor tiene registrado de manera interna el hostname de cada equipo con su IP dinámica, él tiene la responsabilidad de realizar la resolución de nombres solicitados por el servidor DNS. La comunicación sobre el requerimiento de resolución de nombres entre el servidor DNS y el proceso background mdns se realiza mediante el background gnsd.
En la figura 1 se presenta de forma más detallada la comunicación que ocurre en una configuración GNS.
Una aplicación envía su cadena de conexión utilizando SCAN name (ejemplo: pcrac-scan.gns.oracle.com) para conectarse a una de las instancias del cluster. El servidor DNS delegará al servicio GNS la resolución del SCAN name con la finalidad que el cliente obtenga una IP SCAN. Con la IP que obtiene, la aplicación es re direccionada al Listener SCAN correspondiente y luego él lo direccionará al Listener de Base de Datos con menos carga. Para obtener la IP de un SCAN name, el servicio GNS se apoya en los procesos background: mDNS que se ejecutan en cada servidor y en el proceso gnsd.
La implementación realizada para nuestro ejemplo está basado sobre una plataforma Oracle Linux versión 5.7 de 32 bits en todos los servidores. La Infraestructura Grid a instalar será una versión 11.2.0.3.
La red pública en esta implementación es la IP: 172.68.1.X
El servidor DNS y DHCP tiene la siguiente IP: 172.68.1.5
Los servidores que conforman el cluster tienen las siguientes IPs:
A continuación se detalla los archivos de configuración que permiten la habilitación del servicio DNS.
/var/named/chroot/etc/named.conf
options { listen-on port 53 { 127.0.0.1; 172.68.1.5; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; }; zone "localdomain." IN { type master; file "localdomain.zone"; allow-update { none; }; }; zone "oracle.com" IN { type master; file "oracle.com.zone"; allow-update { none; }; }; zone "1.68.172.in-addr.arpa." IN { type master; file "1.68.178.in-addr.arpa"; allow-update { none; }; }; include "/etc/rndc.key";
Hasta aquí hemos creado una zona al dominio llamado oracle.com con su zona inversa.
Procedemos a crear la especificación de ambas zonas:
/var/named/chroot/var/named/oracle.com.zone
$TTL 86400
@ IN SOA pcdns root.pcdns.oracle.com (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS pcdns.oracle.com
pcdns IN A 172.68.1.5
pcgns1 IN A 172.68.1.30
pcgns2 IN A 172.68.1.40
gns-srv IN A 172.68.1.235
$ORIGIN gns.oracle.com.
@ IN NS gns-srv.oracle.com.
Es importante registrar en el dominio "oracle.com" un hostname que resuelva por la IP virtual estática de GNS, en nuestro ejemplo es: gns-srv.oracle.com (172.68.1.235). Es recomendable que la resolución de IPs públicas mediante los hostname de los servidores del cluster también se registren.
Al final de la especificación de la zona debemos crear un sub-dominio, en mi caso llamado gns.oracle.com. Este sub-dominio realizará la resolución de nombres al interno del cluster.
La zona inversa tiene la siguiente configuración:
vi /var/named/chroot/var/named/1.68.178.in-addr.arpa
$ORIGIN 1.68.172.in-addr.arpa. $TTL 1H @ IN SOA pcdns.oracle.com. root.oracle.com. ( 2 3H 1H 1W 1H ) @ IN NS pcdns.oracle.com. 5 IN PTR pcdns.oracle.com. 30 IN PTR pcgns1.oracle.com. 40 IN PTR pcgns2.oracle.com. 235 IN PTR gns-srv.oracle.com.
Nota:
• El servidor DNS debe tener instalado el rpm: caching-nameserver.
• El archivo resolv.conf y host de cada servidor que forma el cluster deben tener el siguiente contenido acorde a nuestro ejemplo:
/etc/resolv.conf search gns.riccio.com nameserver 172.68.1.5 /etc/hosts 127.0.0.1 localhost.localdomain localhost 182.68.1.30 pcgns1-priv.oracle.com pcgns1-priv 182.68.1.40 pcgns2-priv.oracle.com pcgns2-priv
A continuación se detalla los archivos de configuración que permiten la habilitación del servicio DHCP.
/etc/sysconfig/dhcpd
ddns-update-style interim; ignore client-updates; subnet 172.68.1.0 netmask 255.255.255.0 { range 172.68.1.220 172.68.1.234; default-lease-time 86400; option routers 172.68.1.1; option ip-forwarding off; option broadcast-address 172.68.1.255; option subnet-mask 255.255.255.0; option time-offset -28800; option domain-name "gns.oracle.com"; option domain-name-servers 172.68.1.5; }
En esta configuración, el servidor DHCP puede asignar IPs en el siguiente rango: 172.68.1.220/234. Estas IPs serán asignadas para los IP VIP y SCAN.
/etc/sysconfig/dhcpd
# Command line options here DHCPDARGS="eth0"
En este archivo estamos definiendo que mediante la tarjeta eth0 será la que escuchará las peticiones de asignación de IP.
Para instalar Infraestructura Grid con GNS debemos escoger la opción avanzada.
Figura 2
Figura 3
En la figura 3 podemos apreciar lo siguiente:
En la siguiente pantalla de la instalación podemos apreciar que los servidores tienen asignación automática para sus IPs virtuales.
Figura 4
Al acabar la instalación de la Infraestructura Grid podemos realizar algunas pruebas de validación, las cuales se detallan:
Cada SCAN VIP tiene una IP que está en el rango de asignaciones del servicio DHCP.
Asimismo la tarjeta de red eth0 tiene asignada nuevas IPs las cuales son la IP VIP & SCAN.
Debemos validar además que el SCAN name está resolviendo en 3 IPs, donde los IP's han sido obtenidos del servidor DHCP.
Para agregar un nodo al cluster en configuración GNS debemos realizar los siguientes pasos:
1) El nuevo servidor debe cumplir con todos los pre-requisitos que solicita Infraestructura Grid para su instalación, además de contar el archivo /etc/hosts y /etc/resolv.conf debidamente configurado.
2) En uno de los servidores que forman el cluster lanzamos el utilitario addNode.sh.
Este utilitario se encuentra en el directorio ORACLE_HOME_GRID/oui/bin y espera de parámetro el hostname del equipo a agregar al cluster como se ve a continuación en el siguiente ejemplo:
Al finalizar la instalación, debemos visualizar un resultado como el siguiente:
Como último paso debemos ejecutar el script $ORACLE_HOME_GRID /root.sh en el nuevo servidor agregado al cluster.
Al finalizar la ejecución del script, podemos validar que los recursos del cluster están distribuidos entre los 2 servidores.
Como requisito para realizar está migración debemos tener previamente registrado en el servidor DNS la IP Virtual estática del servicio GNS y el sub-dominio creado. Asimismo debemos retirar el registro de las 3 IPs del SCAN name en el servidor DNS.
Los pasos que se indican a continuación se deben ejecutar solo en uno de los servidores del cluster.
1) Agregamos el servicio de GNS al cluster indicándole su IP virtual fija y su sub-dominio.
2) Modificación de red estática a dinámica.
3) Recreamos el SCAN obteniéndolo del servicio GNS.
Aquí ya podemos apreciar que nuestros IP SCAN están obteniendo sus IPs del servicio DHCP.
Luego actualizamos los SCAN Listener con las nuevas IPs.
4) Recreamos nodeapps con las direcciones DHCP.
Bajamos los servicios de nodeapps.
Procedemos a recrearlos.
En uno de los servidores del cluster debemos solicitar la resolución del SCAN name y debe devolvernos 3 IPs.
Asimismo debemos hacer la misma prueba en cada nodo que conforma el cluster ya sea utilizando el utilitario nslookup o dig.
Podemos apreciar que mediante GNS muchas labores de configuración y administración es reducida permitiendo que se puedan conectar servidores a una solución de cluster de forma simple y rápida.
Asimismo podemos migrar nuestras instalaciones previas a esta configuración si estamos en un ambiente donde el aumento de servidores en el cluster es necesaria en corto tiempo como es el caso del rubro de las empresas de telecomunicaciones o empresas que proveen servicios de hosting en la nube.
Publicado por Ing. Francisco Riccio. Es un IT Specialist en IBM Perú e instructor de cursos oficiales de certificación Oracle. Está reconocido por Oracle como un Oracle ACE y certificado en productos de Oracle Application & Base de Datos.