Skip to Content
IBM Z Workload Schedulerv9.5Instalación

IBM Z Workload Scheduler 9.5 - Instalación

En este post haremos la instalación de IBM Z Workload Scheduler 9.5. Este producto es el planificador de IBM, también conocido como TWS u OPC. En otras ocasiones, ya hemos instalado otras versiones de este producto, por lo tanto, este post será similar.

Empezaremos localizando las librerías que utilizaremos. En mi caso, empiezan por TWS950.

Emuframe image

Crearé un ALIAS relacionado con mi catálogo CATALOG.APL.

$01ALIAS
//$01ALIAS JOB CLASS=A,MSGCLASS=Q,MSGLEVEL=(1,1),NOTIFY=&SYSUID //* DEFINIMOS UN ALIAS //PASO001 EXEC PGM=IDCAMS,REGION=1024K //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE ALIAS (NAME(OPC) - RELATE(CATALOG.APL)) - CATALOG(CATALOG.Z25A.MASTER) /*

Emuframe image

Emuframe image

Ahora crearemos dos librerías que contendrán todos los recursos que usaremos durante la instalación. Yo las llamaré:

  • OPC.V950.SAMPJCL
  • OPC.V950.SKELS

Emuframe image

Emuframe image

Configurar librerías en TSO

La instalación se realiza mediante la utilidad REXX “EQQJOBS”.

Primero debemos añadir las siguientes librerías a nuestra sesión de TSO:

  • Librería SEQQCLIB a SYSPROC
  • Librería SEQQPNL0 a ISPPLIB
  • Librerías SEQQSKL0 y SEQQSAMP a ISPSLIB

Para saber el procedimiento de logon de TSO que usamos, lo podemos ver cuando entramos al TSO. En mi caso, es ISPFPROC.

Emuframe image

Este procedimiento se encuentra almacenado en una de las PROCLIB del sistema. Para saberlo, podemos mirar en la opción PROC de SDSF. También podemos usar el comando del sistema $D PROCLIB.

Emuframe image

Añadimos las librerías.

TWS950.SEQQCLIB

Emuframe image

TWS950.SEQQPNL0

Emuframe image

También añadiremos la librería OPC.V950.SKELS que creamos anteriormente:

  • OPC.V950.SKELS
  • TWS950.SEQQSKL0
  • TWS950.SEQQSAMP

Hay que poner la librería “SKELS” que creamos anteriormente por delante en la concatenación.

Emuframe image

Ejecutar EQQJOBS

Salimos de la sesión de TSO y volvemos a entrar.

Con el comando TSO EQQJOBS entraremos a los paneles de instalación de TWS.

Emuframe image

Desde el panel principal de instalación de TWS, entraremos en la opción 1 - Create sample job JCL.

Emuframe image

Añadimos una ficha job:

//TWS95INS JOB 'TWS INSTALL',CLASS=A,MSGCLASS=Q, // MSGLEVEL=(1,1),NOTIFY=&SYSUID

Ajustamos los nombres de las librerías según nuestros requerimientos.

Emuframe image

Ajustamos las librerías y el nombre de los discos.

Emuframe image

Dejamos las opciones a N (por defecto). Si acaso alguna vez me apetece configurarlo, lo haré en el futuro.

Emuframe image

Dejamos la opción a N.

Emuframe image

En mi caso, activaré la opción “MLOG SWITCH”. Esta opción sirve para cambiar de fichero MLOG cuando se alcance un número determinado de registros.

Emuframe image

La opción “CDP LOG INTEGRATION ENABLEMENT” la voy a activar para probarla. Sirve para integrar los logs de TWS con la utilidad “IBM Common Data Provider for z Systems”.

Me parece algo que podría ser interesante para una entrada.

Usaré la ruta /var/TWS950/logs. Lo modificaré más adelante, si fuese necesario.

Emuframe image

Esperamos hasta que se creen todos los miembros.

Emuframe image

Una vez finalice el proceso, entramos en la opción 2 - Generate batch-job skeletons.

Emuframe image

Adaptamos la configuración a nuestra instalación.

Emuframe image

Emuframe image

Activaré la opción “FORMATTED REPORT OF TRACKLOG EVENTS”.

Emuframe image

Esperaremos a que termine el proceso.

Emuframe image

La opción 3 no la voy a procesar porque no uso Data Store. Ahora entraré en la opción 4 - Generate WAPL samples.

Emuframe image

Ajustaré los parámetros a mi sistema. Como nombre de subsistema, utilizaré “OPCC”.

Emuframe image

Esperamos a que termine.

Emuframe image

Ya tenemos ambas librerías con el contenido correspondiente. Emuframe image

Compilar EXITS de SMF y JES2

Empezamos compilando las “EXITS” de SMF y de JES2. Son registros que se generan según los tipos de evento que van ocurriendo (inicio del job, paso terminado, fin del job…) y sirven para que el planificador sepa en qué estado se encuentran los jobs.

En esta tabla sacada de la web de IBM, se puede ver las exits que existen y el tipo de evento que controlan. Si tuviésemos algún error en el estado de los jobs, habría que revisar estas exits.

Emuframe image

Antes de empezar hay que crear una librería “intermedia” donde se guardarán los módulos ensamblados. Se llamará OPC.V950.OBJ.

Emuframe image

Ahora buscamos el job EQQJES2 de la librería de ejemplos (en mi caso, OPC.V950.SAMPJCL) y lo copiaré a una librería diferente donde voy guardando los jobs que voy ejecutando para tenerlo de referencia en el futuro. Este job sirve para crear la EXIT7 de JES2. Ajustamos el job y lo ejecutamos.

En mi caso, la librería de JES2 es la MVS.MVST.SMPMTS.

La librería donde se guardará el módulo final (DD SYSLMOD) será USER.Z25A.LPALIB.

En los sistemas ADCD, es mejor guardar las cosas en las librerías “USER.**” porque al cambiar de versión resulta más fácil disponer de todos los cambios porque solo habría que poner el disco A5CFG1 (en el caso de mi versión).

Emuframe image

Emuframe image Terminará correctamente.

Emuframe image

Ahora editaremos el job EQQJES21 para crear la exit EXIT51. Los cambios serán los mismos que en el job anterior.

Emuframe image

Emuframe image

Terminará bien. Emuframe image

Ahora queda por compilar las tres exits de SMF: IEFACTRT, IEFUJI, IEFU83. El manual de IBM indica utilizar el job EQQSMF para hacer esto instalándolo como USERMOD, pero yo voy a utilizar otro método.

Usando el job EQQJES2 como base, simplemente tendremos que hacer los cambios mostrados en la imagen para compilar los ejemplos EQQACTR1, EQQUJI1, EQQU831.

Para la exit IEFACTRT haremos los siguientes cambios y ejecutaremos el job.

Emuframe image

Para la exit IEFUJI haremos los siguientes cambios y ejecutaremos el job.

Emuframe image

Para la exit IEFU83 haremos los siguientes cambios y ejecutaremos el job.

Emuframe image

Ya tendremos todos los módulos compilados.

Emuframe image

Configurar JES2 y PARMLIB

Ahora añadiremos las exits al fichero de parámetros de JES2. Para saber el fichero de parámetros, en mi caso, solo tengo que mirar el arranque de la tarea.

Además, como yo usaré las librerías USER.** para hacer los cambios, también es necesario copiar la STC de JES2 a la librería USER.Z25A.PROCLIB para indicar que busque en la librería USER.Z25A.PARMLIB.

Emuframe image

Editamos el miembro de parámetros. Debemos tener mucho cuidado al hacerlo porque si nos equivocamos, la tarea no arrancará.

LOAD(OPCAXIT7) /* Load IBM Z Workload Scheduler exit mod */ EXIT(7) ROUTINES=OPCAENT7,STATUS=ENABLED /* Define EXIT7 entry point */ LOAD(TWSXIT51) /* Load IBM Workload Scheduler for z/OS exit mod */ EXIT(51) ROUTINES=TWSENT51,STATUS=ENABLED /* Define EXIT51 entry */

Emuframe image

Ahora tenemos que definir los subsistemas (Controller y Tracker) en el miembro IEFSSNxx de la PARMLIB. En esta versión, el parámetro suffix será “N”. Para establecer el parámetro maxecsa debemos calcularlo según nuestra instalación.

SUBSYS SUBNAME(subsystem name) INITRTN(module name) INITPARM ('maxecsa,suffix')

En mi caso sería:

SUBSYS SUBNAME(OPCC) INITRTN(EQQINITN) INITPARM ('0,N') SUBSYS SUBNAME(OPCT) INITRTN(EQQINITN) INITPARM ('100,N')

Emuframe image

El siguiente paso es añadir la librería de módulos TWS950.SEQQLMD0 al listado de librerías APF.

Emuframe image

Ahora tenemos que añadir los registros SMF que se capturan. Lo añadiremos al miembro SMFPRMxx.

Lo importante es que se capturen los registros SMF de los siguientes tipos (6, 14, 15, 18…):

/*SYS and SUBSYS keywords*/ SYS(TYPE(6,14,15,18,26,30,60,62,64,90),EXITS(IEFU83,IEFACTRT,IEFUJI)) SUBSYS(STC,EXITS(IEFUJI,IEFACTRT,IEFU83)) SUBSYS(JESn,EXITS(IEFUJI,IEFACTRT,IEFU83))

Como, en mi caso, viene esta configuración, tengo que cambiarla para incluir los registros indicados arriba:

SYS(NOTYPE(14:19,62:69,99),EXITS(IEFU83,IEFU84,IEFACTRT, IEFUSI,IEFUJI,IEFU29),NOINTERVAL,NODETAIL)

Quedaría de la siguiente forma:

SYS(NOTYPE(16,17,19,63,65:69,99),EXITS( IEFU83,IEFU84,IEFACTRT,IEFUSI,IEFUJI,IEFU29),NOINTERVAL,NODETAIL) SUBSYS(STC,EXITS(IEFU29,IEFU83,IEFU84,IEFUJP,IEFUSO,IEFUJI,IEFACTRT)) SUBSYS(JES2,EXITS(IEFU83,IEFUJI,IEFACTRT))

Emuframe image

En el miembro PROGxx y antes de la definición de la LINKLST añadiremos la definición de las EXITS para que hagan uso de los módulos creados anteriormente.

EXIT ADD EXITNAME(SYS.IEFU83) MODNAME(TWSU83) EXIT ADD EXITNAME(SYS.IEFACTRT) MODNAME(TWSACTRT) EXIT ADD EXITNAME(SYS.IEFUJI) MODNAME(TWSUJI) EXIT ADD EXITNAME(SYSSTC.IEFU83) MODNAME(TWSU83) EXIT ADD EXITNAME(SYSSTC.IEFACTRT) MODNAME(TWSACTRT) EXIT ADD EXITNAME(SYSSTC.IEFUJI) MODNAME(TWSUJI) EXIT ADD EXITNAME(SYSJES2.IEFU83) MODNAME(TWSU83) EXIT ADD EXITNAME(SYSJES2.IEFACTRT) MODNAME(TWSACTRT) EXIT ADD EXITNAME(SYSJES2.IEFUJI) MODNAME(TWSUJI)

Emuframe image

Aprovechamos para añadir la librería de módulos a LNKLST también.

LNKLST ADD NAME(LNKLST00) DSN(TWS950.SEQQLMD0) VOLUME(&SYSP4)

Emuframe image

Configurar TSO

El siguiente paso es añadir el módulo EQQMINON y unos comandos a TSO. Para ello tenemos que editar el miembro IKJTSOxx.

Para saber qué fichero de parámetros estamos usando podemos utilizar el comando: D IKJTSO

Emuframe image

Añadimos EQQMINON en AUTHTSF NAMES.

Emuframe image

Añadimos los siguientes comandos en AUTHCMD:

BACKUP BULKDISC JSUACT OPINFO OPSTAT SRSTAT WSSTAT

Emuframe image

En el miembro SCHEDxx añadimos el siguiente parámetro:

PPT PGMNAME(EQQMAJOR) NOSWAP

Emuframe image

Siguiendo el manual de IBM, ahora tendríamos que configurar la seguridad (con RACF, en mi caso). Aún no lo voy a hacer, lo dejaré para una entrada futura si es necesario.

Crear datasets de configuración

Vamos a ejecutar una serie de jobs que sirven para crear los data sets de configuración que usará el producto.

Empezamos por el job EQQPCS01.

Este job crea varios dataset VSAM y NO-VSAM. Debemos revisar el job y ajustar el espacio de esos dataset para que no nos quedemos sin espacio. De forma opcional, si no usamos SMS, podemos añadir VOL=SER=xxxxxx para indicar el disco en los ficheros NO-VSAM.

Emuframe image

Tendremos todos los data sets creados.

Emuframe image

Seguiremos con el job EQQPCS02. Este job también crea data sets. Debemos revisar el espacio para ajustarlo a lo que necesitemos. Lo ejecutamos y comprobamos que termine correctamente.

Emuframe image

El job EQQPCS12 sirve para crear el GDG necesario para la función de intercambio de MLOG.

Terminará correctamente.

Emuframe image

Crear STCs de Controller y Tracker

El siguiente paso es crear las STC de Controller y Tracker y los ficheros de configuración.

Volvemos a la librería OPC.V950.SAMPJCL y copiamos los miembros EQQCONO y EQQTRA a la PROCLIB del sistema. El miembro EQQCONO será el Controller, con el nombre OPCC. El miembro EQQTRA será el Tracker, con el nombre OPCT.

Emuframe image

Emuframe image

Ahora editamos el miembro OPCC que acabamos de copiar a la PROCLIB.

Pondremos el nombre de la tarea en la cabecera (OPCC) y el fichero de parámetros que creamos en pasos anteriores (OPCCPARM).

Emuframe image

Bajamos un poco y editamos la DD EQQPRLIB para poner la librería correcta.

Emuframe image

Ahora editamos el miembro OPCT. Pondremos el nombre de la tarea en la cabecera (OPCT) y el fichero de parámetros que creamos en pasos anteriores (OPCTPARM).

Además, en las DD EQQMLOG, EQQMLOG2 y EQQEVDS, tenemos que poner dos nuevos ficheros que crearemos más adelante. Esto es debido a que no pueden ser compartidos con el Controller.

//EQQMLOG DD DISP=SHR,DSN=OPC.V950.MLOGT //EQQMLOG2 DD DISP=SHR,DSN=OPC.V950.MLOGT2 //EQQEVDS DD DISP=SHR,DSN=OPC.V950.OPCT.EV

Emuframe image

Crear ficheros de parámetros

Para poder crear los ficheros de parámetros, copiamos los miembros EQQCONOP y EQQTRAP de la SAMPJCL a la librería de parámetros de OPC (en mi caso, OPC.V950.PARM).

Emuframe image

Emuframe image

Ahora entramos en el miembro EQQCONOP y vamos a crear nuevos miembros con las partes correspondientes del JCL. Usaremos el comando de bloque CC – CC, para copiar las partes que queremos, y el comando CREATE.

Vamos a crear el miembro CONOP. Para ello marcamos con “CC” en la línea que se muestra en la imagen.

Emuframe image

Ahora vamos a la línea que se muestra en la imagen y ponemos “CC” otra vez, para cerrar el bloque que queremos copiar, y en la barra de comandos ponemos “CREATE CONOP”.

Emuframe image

Hacemos lo mismo para crear el miembro STDAR.

Emuframe image

Por último, crearemos el miembro CONOB de la misma forma.

Emuframe image

Ahora haremos lo mismo con el miembro EQQTRAP.

Emuframe image

Emuframe image

Haremos lo mismo para crear los miembros STDEWTR y STDJCC.

Emuframe image

Emuframe image

Renombramos el miembro CONOB a BATCHOPT.

Emuframe image

Renombramos el miembro CONOP a OPCCPARM.

Emuframe image

Renombramos el miembro TRAP a OPCTPARM.

Emuframe image

Entramos a editar el miembro OPCCPARM.

Ponemos NCFOPCC en el parámetro NCFAPPL, que será el nombre de nuestra LU del controller.

¡IMPORTANTE! Hay que poner RECOVERY NO, sino se producirá un abend al arrancar el controller más adelante.

Emuframe image

Seguimos bajando y ponemos NCFOPCT en el parámetro SNA, para que se comunique con el tracker.

Emuframe image

Ahora editamos el miembro OPCTPARM. Ponemos NCFOPCT en el parámetro NCFAPPL, que será el nombre de nuestra LU del tracker.

En el parámetro SNAHOST ponemos NCFOPCC, para que se comunique con el controller.

Emuframe image

Configurar VTAM

Ahora vamos a crear los nodos de VTAM.

La comunicación entre Controller y Tracker la haremos por VTAM. Debemos crearlos en la librería **.VTAMLST correspondiente a nuestro sistema. Para ello, comprobaremos la tarea VTAM en la PROCLIB.

Controller: He creado un miembro llamado AOPCC con los datos de la imagen. El nombre de la aplicación y el ACBNAME debe ser el mismo. En mi caso, el nombre que puse en el fichero de parámetros del controller (OPCCPARM) fue NCFOPCC.

Fijaos en la imagen para codificarlo correctamente.

VBUILD TYPE=APPL NCFOPCC APPL VPACING=10, C ACBNAME=NCFOPCC

Emuframe image

Tracker: He creado un miembro llamado AOPCT con los datos de la imagen. El nombre de la aplicación y el ACBNAME debe ser el mismo. En mi caso, el nombre que puse en el fichero de parámetros del tracker (OPCTPARM) fue NCFOPCT.

Fijaos en la imagen para codificarlo correctamente. Si diese algún error del tipo “syntax error” en la línea MODETAB, aseguraos que los espacios están puestos correctamente.

VBUILD TYPE=APPL NCFOPCT APPL ACBNAME=NCFOPCT, C MODETAB=EQQLMTAB, C DLOGMOD=NCFSPARM

Emuframe image

Vamos a añadir ambos miembros a la inicialización de VTAM para que arranquen los nodos automáticamente después de un IPL. En mi caso, es el miembro ATCCON00 de la VTAMLST.

Emuframe image

Ahora debemos crear la modetab EQQLMTAB en la librería VTAMLIB de nuestro sistema. Para ello, editamos y submitimos el job EQQLMTAB de la librería **.SEQQSKL0.

Añadimos la cabecera del job. También comprobaremos que la librería VTAMLIB de la DD SYSLMOD sea la correcta. Comprobamos que el job termina correctamente.

Emuframe image

Emuframe image

Crear tabla de mensajes JCC

Ahora vamos a crear el miembro EQQGJCCT, que es la tabla de mensajes del JOB COMPLETION CHECKER. Para ello, entramos a la librería **.SEQQSAMP y editamos el miembro EQQJCCTB. Añadimos una cabecera al job y ajustamos las librerías para adaptarlas a nuestro sistema.

Además, debemos sustituir la primera línea de la SYSIN por la siguiente:

EQQJCCT S=1,T=SKIPSTA,M='IDCAMS SYSTEM SERVICES'

Ejecutamos el job y comprobamos que termina correctamente.

Emuframe image

Acceder a OPC desde ISPF

Vamos a cambiar el panel de ISPF para añadir una opción para acceder a OPC. Para saber el nombre del panel a editar, pondremos el comando PANELID.

Añadimos una nueva opción en el panel deseado.

Emuframe image

Añadimos la siguiente línea dentro de las opciones:

O,'PANEL(EQQOPCAP) NEWAPPL(EQQA)'

Emuframe image

Por último, añadiremos las últimas librerías al procedimiento de logon de TSO.

Añadimos las siguientes líneas en la DD ISPPLIB:

// DD DISP=SHR,DSN=TWS950.SEQQGENU // DD DISP=SHR,DSN=TWS950.SEQQPENU

Emuframe image

En la DD ISPMLIB:

// DD DISP=SHR,DSN=TWS950.SEQQMSG0

Emuframe image

En la DD ISPTLIB:

// DD DISP=SHR,DSN=TWS950.SEQQTBL0

Emuframe image

Al final del fichero, añadimos tres DD nuevas:

//EQQMLIB DD DISP=SHR,DSN=TWS950.SEQQMSG0 //EQQMLOG DD DISP=SHR,DSN=OPC.V950.MLOG //EQQTMPL DD DISP=SHR,DSN=TWS950.SEQQLENU

Emuframe image

Configuración adicional

Para que funcione correctamente el intercambio de MLOG, debemos copiar a la PROCLIB el miembro EQQSMLOG de la librería de ejemplos, en mi caso, OPC.V950.SAMPJCL.

Emuframe image

Ese procedimiento utiliza como sysin el miembro EQQREPRO de la librería **.SEQQSAMP. Debemos copiarlo de esa librería a la librería de parámetros de OPC, en mi caso, OPC.V950.PARM.

Emuframe image

Editamos el BPXPRMxx correspondiente para montar el File System ‘TWS950.ZFS’ en el punto de montaje ‘/usr/lpp/TWS’.

Emuframe image

Crearemos dos ficheros MLOG para el tracker ya que no puede compartirlos con el controller.

Las características de los dataset son las mismas que los ficheros MLOG del controller. Los llamaré:

  • OPC.V950.MLOGT
  • OPC.V950.MLOGT2

También hay que crear el fichero EV (EQQEVD). Lo llamaré:

  • OPC.V950.OPCT.EV

Emuframe image

Emuframe image

También hay que crear el directorio de logs que definimos en la configuración anteriormente (/var/TWS950/logs) y montar un ZFS para guardar el contenido (importante incluirlo en el BPXPRMxx correspondiente).

$12LOGZF
//$12LOGZF JOB 0,REGION=0M,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID //CREATE EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE CLUSTER ( - NAME(OPC.LOGS.ZFS) - CYL(50 50) - STORCLAS(SCBASE) - LINEAR - SHAREOPTIONS(3) - ) /* // SET ZFSDSN='OPC.LOGS.ZFS' //FORMAT EXEC PGM=IOEAGFMT,COND=(0,LT), // PARM='-aggregate &ZFSDSN -compat' //SYSPRINT DD SYSOUT=* //* //MOUNT EXEC PGM=IKJEFT01,COND=(0,LT) //SYSEXEC DD DISP=SHR,DSN=SYS1.SBPXEXEC //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * PROFILE MSGID WTPMSG oshell umask 0022; + mkdir -p /var/TWS950 + mkdir -p /var/TWS950/logs MOUNT + FILESYSTEM('OPC.LOGS.ZFS') + MOUNTPOINT('/var/TWS950/logs') + MODE(RDWR) TYPE(ZFS) PARM('AGGRGROW') /*

Emuframe image

Emuframe image

Arranque del sistema

Como no hemos ido activando la configuración de forma dinámica, ahora haré IPL. Además, de esta forma me aseguro de que todas las modificaciones que hecho son correctas.

Después del IPL, arrancaremos las tareas OPCC y OPCT con los comandos:

S OPCC S OPCT

Emuframe image

El siguiente mensaje es debido a que no tenemos ningún Long-term plan, ni Current Plan creados. Una vez creados, el tracker conectará con el controller. De momento, podemos ignorarlo.

EQQV019E SESSION SETUP FAILED - PLU=NCFOPCC NOT AVAILABLE

Emuframe image

En el fichero de MLOG deberíamos ver mensajes como esos que están marcados en la imagen. Eso indica que las EXITs se han cargado bien. Emuframe image

Ahora entramos a los paneles de OPC.

Para definir el controller al que nos vamos a conectar, vamos a la opción 0 - Options.

Emuframe image

Entramos a la opción 1 – Subsystem.

Emuframe image

Marcamos la opción Local “OPC on same MVS”. El nombre del controller es OPCC. Emuframe image

Ya podremos entrar a las diferentes opciones de la herramienta.

Espero que os haya gustado y os sirva de ayuda esta demostración de instalación básica de OPC / TWS / IZWS.

Last updated on