Discos Compartidos en Hercules o Como convivir varias LPARes

La receta de hoy versará sobre Hercules y el uso exclusivo que se hace del almacenamiento en configuraciones normales. Actualmente, cualquier usuario dispone de los discos 3390 emulados y Hercules hace buen uso de ellos, creando un completo sistema mainframe emulado. Esto sería equivalente a tener una única LPAR en un System Z real.
Pero creo que, quien más, quien menos, ha conocido pocas instalaciones reales que dispongan de esa peculiar configuración, ya que por norma general en un System Z conviven varias LPARes, como Explotación, Desarrollo, Sistemas o Test, etc, dentro de la misma máquina física. En la mayoría de los casos, cada LPAR dispone de sus discos residentes de uso exclusivo y luego una serie de discos compartidos entre varias LPARes, y de ese modo, se pueden compartir catálogos, datos, etc. entre ellas. Así pues, si queremos emular hasta ese extremo nuestra instalación bajo Hercules, aquí mostraré una serie de pasos para poder hacerlo.

LPAR = Instancia de Hercules

En primer lugar, hay que dejar muy claro que Hercules viene a emular una sola LPAR, y en el momento que se arranca, los ficheros emulados de disco los reserva para su uso exclusivo. Esto significa que si quisiera lanzar una segunda instancia exacta, no podría hacerlo ya que al apuntar a los mismos discos daría error de reserva, porque el primer Hercules ya los tendría bajo su poder. Eso sin contar con que si ambos Hercules escuchan a los mismos puertos 3270, habría un choque a nivel de comunicaciones.
Por lo tanto, Hercules ideó un sistema para poder compartir discos entre distintas instancias de Hercules, de forma que podemos poner una serie de discos bajo ese paraguas y por otro lado, tener cada Hercules sus discos privados.

SHRDPORT

Para habilitar que los discos sean compartidos entre distintos Hercules que incluso pueden estar en maquinas distintas, hay que codificar una línea adicional en el hercules.cnf de cada equipo susceptible de utilizar este sistema. Un ejemplo sería el siguiente:

SHRDPORT 3990

Esto significa que se habilitará el puerto TCP/UDP 3990 como cliente/servidor para recibir/enviar peticiones de lecturas y escrituras a los discos que configuremos como compartidos. 3390 es el puerto por defecto, en honor al Storage Control IBM 3990 que gestionaba trenes de discos 3390 y 3380.

3990

 

 

 

 

 

 

 

 

 

 

Topología Cliente/Servidor

He hablado de puertos, escuchas, servidores y clientes. Vamos a matizar esto un poco. Creo que todos entendemos que si yo comparto un recurso, me convierto en servidor, y los clientes se conectarán a mi sistema y harán uso de dicho recurso como clientes. Pero yo mismo, como servidor, puedo acceder a mi mismo recurso y comportarme como un cliente. Pues con esto en mente, desde una instancia de Hercules, puedo compartir un disco y a la vez usarlo como cliente, pero ese disco compartido, lo será también para cualquiera que desee conectarse a él.
Con un ejemplo se verá mejor. Supongamos que queremos tener 2 instancias Hercules (PROD y DESA) arrancadas a la vez, cada una apuntando a sus discos, pero queremos que un disco de trabajo (WORK01) sea compartido por las dos instancias.
Pues hay dos formas de encarar este asunto:
a) Creando una instancia Servidora de discos: Podría crear una instancia adicional configurada -y que no necesita IPL- para servir discos, y que luego PROD y DESA se conecten como clientes, o
b) Hacer que una de las dos instancias haga de Servidora y cliente a la vez. Por ejemplo, yo podría configurar PROD para que sirva el disco WORK01 y que DESA pueda acceder a él de forma compartida.

La a) presenta la ventaja de que si dispones de un servidor con solo almacenamiento pero poca potencia de CPU, puedas crear esa instancia servidora y usar la red local para compartir los discos y luego si se disponen de dos servidores físicos aparte para que cada uno de ellos corra con una instancia de Hercules. La b) es mas fácil de implementar si lo que se pretende es hacer correr PROD y DESA en la misma máquina.

Configurando el disco WORK01 como compartido

Sin el servidor levantado, el cliente no se podrá conectar a nada, así que hay que decidir que equipo hará de servidor y cual asumirá el papel de cliente. En nuestro ejemplo, ya que PROD no se para y DESA si para hacer pruebas, vamos a considerar PROD como Servidor (aunque el disco no se verá si lo único que quieres arrancar es DESA, lógicamente).
PROD tiene el disco WORK01 en la dirección 0A9A, con lo que su hercules.cnf tendrá la siguiente pinta:

0A9A 3390 C:\ZOSPROD\WORK01.CCKD

La única modificación que hay que realizar el el hercules.cnf de PROD (nuestra instancia servidora) es añadir la línea SHRDPORT 3990. Con esto, el sistema ya puede empezar a servir TODOS los discos configurados. Por lo tanto, las líneas donde se definen los discos, ni tocar.
Y en la parte cliente (DESA), debemos hacer referencia a ese disco de PROD. Para ello, si hemos copiado los hercules.cnf de PROD y DESA, una vez cambiado los valores oportunos, vamos a nuestro hercules.cnf, y basta con cambiar esta línea:

0A9A 3390 C:\ZOSDESA\WORK01.CCKD

Por esta otra:

0A9A 3390 localhost:3990:0A9A

Con esto, se le dice que la dirección 0A9A sea un disco 3390, y que se conecte a localhost mediante el puerto 3990, al disco cuya dirección del servidor es la 0A9A. Si coinciden las configuraciones y direcciones de disco (deberían, ha copiado el hercules.cnf desde PROD a DESA), y dado que el puerto 3990 es por defecto, la línea todavía se puede simplificar mucho mas:

0A9A 3390 localhost

Qué hemos conseguido con todo esto? Pues que el disco WORK01 que hasta ahora esa propiedad única y exclusiva de PROD, ahora puede ser accedido tanto desde PROD (lógicamente) como desde DESA o cualquier otra LPAR de Hercules que se os ocurra, simplemente cambiando la definición del hercules.cnf por esta de arriba.

Rizando el Rizo

Vayámonos a la situación mas compleja, supongamos que tenemos 3 servidores, uno sirve el almacenamiento y los otros dos serán instancias Hercules que usaran los discos compartidos del primer equipo. Y como están conectados en red, vamos a darles IPs: 192.168.1.100 para el servidor de discos, 192.168.1.101 para PROD y 192.168.1.102 para DESA.
Mientras que en el servidor de discos solo hay que añadir la línea SHRDPORT 3990 al hercules.cnf y lanzarlo, teniendo el disco configurado así:

0A9A 3390 C:\ZOSPROD\WORK01.CCKD

editaremos el hercules.cnf del equipo PROD con las siguientes líneas:

SHRDPORT 3990
0A9A 3390 192.168.1.100

y para DESA, lo mismo:

SHRDPORT 3990
0A9A 3390 192.168.1.100

A partir de este momento, acabamos de crear un HERC-PLEX: Dos (o más) sistemas Hercules compartiendo discos.

About Urtzi Larrieta

Director de Proyectos de entornos Mainframe, AIX y AS/400, llevo mas de 10 años trabajando para el sector servicios y banca, así como proyectos de sistemas, renovación tecnológica, estrategias de backup, y consultoría de sistemas.