Desarrollo2 días

Módulo 4 — Assure Quick EDD

Solución de alta disponibilidad y disaster recovery de Precisely para IBM i, basada en replicación lógica.

Conocer Assure Quick EDD (de Precisely) como producto de alta disponibilidad y disaster recovery para IBM i. Posicionarlo, diseñarlo, operarlo, diagnosticarlo y extenderlo según el rol.

Base común — todos los roles

Qué es

Assure QuickEDD es la solución de HA/DR de Precisely para IBM i, basada en replicación lógica en tiempo real desde un servidor de producción a uno o varios servidores de respaldo. El servidor de respaldo queda listo para asumir el rol productivo (role-swap) o para recuperar datos a un punto en el tiempo.

La replicación utiliza sincronización sin bloqueos (no-lock synchronization), lo que significa que el proceso de replicación no pone en hold ni bloquea los objetos durante la captura de cambios. Esto elimina el impacto sobre el rendimiento de la aplicación productiva. La solución es compatible con un amplio rango de versiones de IBM i y combinaciones de storage, y escala desde entornos SMB hasta enterprise sin cambiar el modelo de licenciamiento o administración.

Linaje del producto

QuickEDD nació en la línea Quick Software de Trader's, empresa especializada en soluciones IBM i que fue adquirida y absorbida por Precisely. Hoy es parte del portafolio Assure de Precisely para IBM i — una suite integrada de productos de protección de datos, HA/DR y calidad de datos para la plataforma IBM i. El nombre "EDD" responde a "Enhanced Data Distribution", concepto central de su arquitectura basada en distribución continua de cambios del journal hacia el target.

Qué replica

Quick EDD replica una variedad amplia de objetos:

  • Objetos de base de datos (archivos físicos y lógicos).
  • Stream files de IFS.
  • System values.
  • User profiles.
  • Spool files.
  • Job queues.
  • Job scheduler.

Esta amplitud de cobertura es significativa: muchas soluciones de replicación lógica para IBM i solo replican archivos de base de datos, dejando fuera elementos del sistema operativo como user profiles o system values que son críticos para que el target pueda realmente operar en producción tras un role-swap.

Qué garantiza

  • Replicación en tiempo real del source al target.
  • Validación de sincronía mediante auditorías programadas, on-demand y monitoreo continuo. Las divergencias se reparan automáticamente sin poner objetos en hold.
  • Topologías múltiples y multi-nodo (más de un target, encadenamientos).
  • Compatibilidad amplia con distintos niveles de IBM i y combinaciones de storage, escalable de SMB a enterprise.
  • Procedimientos de switch personalizables, ejecutables paso a paso, interactivos o en batch.

Cómo se administra

Assure QuickEDD ofrece dos interfaces de administración complementarias:

  • Interfaz gráfica con soporte para siete idiomas (inglés, francés, español, entre otros), pensada para administración centralizada y visión de estado del entorno HA.
  • Interfaz 5250 para administración en consola tradicional IBM i, familiar para operadores y administradores acostumbrados al entorno nativo.

Las alertas se entregan por email, MSGQ y SNMP, lo que permite integración con cualquier consola de monitoreo corporativo (Nagios, Zabbix, AUI Enterprise Monitor, etc.) y facilita el monitoreo desatendido en guardia nocturna o fin de semana.

El portal de soporte de Precisely (support.precisely.com) provee documentación técnica en inglés y francés, incluyendo referencias de comandos propios del producto (EDHCTL, EDHMONITOR, EDH_STATUS, PMEDHSTR), guías de configuración de journaling y SSH, checklists de operación diaria y artículos de troubleshooting con códigos de error específicos (EDH0734, SYS0403, CPF codes). También documenta integraciones con SAP, MQ Series y NetServer.

Por qué importa el journaling

Quick EDD es replicación lógica: lee los journals de IBM i y aplica los cambios en el target. Si un objeto crítico no está journaled, no se replica. Por eso la primera tarea de cualquier proyecto Quick EDD es relevar y completar journaling de los objetos productivos.


DesarrolloPara Desarrollo (2 días)

Objetivo del rol en este módulo: automatizar e integrar QuickEDD con el resto del stack del cliente.

APIs y exits

  • QuickEDD ofrece APIs y exits para personalizar comportamiento.
  • Verificar la documentación oficial vigente del producto en el portal de soporte de Precisely para la versión instalada.

Event exits de Quick EDD

Los event exits son puntos de extensión donde Quick EDD invoca un programa CL definido por el usuario antes o después de ciertas operaciones. Son el mecanismo principal para personalizar el comportamiento de la replicación sin modificar el producto.

Cuándo se disparan:

| Exit | Momento | Uso típico | |---|---|---| | Pre-apply | Antes de aplicar un cambio en el target | Validar condiciones previas, pausar procesos dependientes | | Post-apply | Después de aplicar un cambio exitosamente | Notificar sistemas downstream, disparar triggers de negocio | | Pre-switch | Antes de iniciar un role-swap | Quiesce de aplicaciones, cierre de conexiones, notificación a usuarios | | Post-switch | Después de completar el role-swap | Arranque de aplicaciones, verificación de servicios, notificación de "sistema disponible" | | On-error | Cuando se detecta un error en la replicación | Enviar alerta, registrar en log externo, ejecutar diagnóstico automático |

Template CL para un event exit:

PGM PARM(&EXITTYPE &OBJLIB &OBJNAME &OBJTYPE &RTNCODE)
  DCL VAR(&EXITTYPE) TYPE(*CHAR) LEN(10)
  DCL VAR(&OBJLIB)   TYPE(*CHAR) LEN(10)
  DCL VAR(&OBJNAME)  TYPE(*CHAR) LEN(10)
  DCL VAR(&OBJTYPE)  TYPE(*CHAR) LEN(10)
  DCL VAR(&RTNCODE)  TYPE(*CHAR) LEN(1)

  /* Lógica del exit según el tipo */
  IF COND(&EXITTYPE *EQ 'PREAPPLY') THEN(DO)
    /* Ejemplo: registrar en data queue para monitoreo externo */
    CALL PGM(MYLIB/LOGCHANGE) PARM(&OBJLIB &OBJNAME &OBJTYPE)
  ENDDO

  IF COND(&EXITTYPE *EQ 'ONERROR') THEN(DO)
    /* Ejemplo: enviar mensaje a cola de monitoreo */
    SNDMSG MSG('EDH ERROR en ' *CAT &OBJLIB *TCAT '/' +
               *TCAT &OBJNAME) TOUSR(QSYSOPR)
  ENDDO

  /* Retornar '0' = continuar normalmente, '1' = abortar operación */
  CHGVAR VAR(&RTNCODE) VALUE('0')
ENDPGM

El parámetro &RTNCODE es importante: si el exit retorna '1', Quick EDD aborta la operación en curso. Usar con precaución en exits de tipo pre-apply — un exit mal programado puede detener toda la replicación.

STRJRNPF — buenas prácticas para aplicaciones que coexisten con Quick EDD

Toda tabla nueva creada por la aplicación en runtime DEBE ser journaled antes de que Quick EDD pueda replicarla. La secuencia correcta desde CL:

/* 1. Crear el archivo */
CRTPF FILE(MYLIB/NEWFILE) RCDLEN(256)

/* 2. Journalizarlo inmediatamente */
STRJRNPF FILE(MYLIB/NEWFILE) JRN(MYLIB/MYJRN) IMAGES(*BOTH)

Reglas para convivencia sana:

  • IMAGES(*BOTH) es preferible a *AFTER si hay posibilidad de que el archivo también sea fuente de Connect CDC o auditoría.
  • Si la aplicación crea archivos temporales que NO deben replicarse, usar bibliotecas excluidas del scope de Quick EDD (ej. QTEMP, o una biblioteca dedicada WRKLIB).
  • Si un programa crea y destruye archivos frecuentemente (archivos de trabajo), NO journalizarlos — genera volumen inútil de journal entries.
  • Documentar en cada release qué bibliotecas y objetos nuevos se crean, para que el equipo de operaciones actualice el scope de replicación.

Uso programático de comandos Quick EDD

EDHCTL OPTION(*STATUS) desde CL — verificar estado antes de una operación:

PGM
  DCL VAR(&OUTPUT) TYPE(*CHAR) LEN(256)
  DCL VAR(&LAGVAL) TYPE(*DEC) LEN(7 0)

  /* Ejecutar EDHCTL y capturar resultado */
  EDHCTL OPTION(*STATUS)

  /* Alternativa: usar EDH_STATUS para captura programática */
  /* EDH_STATUS devuelve datos parseables para automatización */
  CALL PGM(EDHLIB/EDH_STATUS) PARM(&OUTPUT)

  /* Verificar lag antes de proceder con una operación crítica */
  /* Si lag > 60 segundos, no ejecutar role-swap */
ENDPGM

Wrapper CL para validación automática de role-swap readiness:

PGM
  DCL VAR(&RPLSTATE) TYPE(*CHAR) LEN(10)
  DCL VAR(&SWREADY)  TYPE(*CHAR) LEN(3)
  DCL VAR(&LAGVAL)   TYPE(*DEC) LEN(7 0)
  DCL VAR(&MAXLAG)   TYPE(*DEC) LEN(7 0) VALUE(30)

  /* Paso 1: Verificar que la replicación esté activa */
  /* (parsear output de EDH_STATUS) */

  /* Paso 2: Verificar que el lag sea aceptable */
  IF COND(&LAGVAL *GT &MAXLAG) THEN(DO)
    SNDMSG MSG('ROLE-SWAP BLOQUEADO: lag actual ' *CAT +
               %CHAR(&LAGVAL) *TCAT 's > máximo ' *CAT +
               %CHAR(&MAXLAG) *TCAT 's') TOUSR(QSYSOPR)
    GOTO CMDLBL(FIN)
  ENDDO

  /* Paso 3: Verificar Switch Ready */
  IF COND(&SWREADY *NE 'YES') THEN(DO)
    SNDMSG MSG('ROLE-SWAP BLOQUEADO: Switch Ready = NO. +
               Investigar causa.') TOUSR(QSYSOPR)
    GOTO CMDLBL(FIN)
  ENDDO

  /* Paso 4: Todo OK — proceder o notificar */
  SNDMSG MSG('ROLE-SWAP HABILITADO: lag=' *CAT +
             %CHAR(&LAGVAL) *TCAT 's, Switch Ready=YES') +
         TOUSR(QSYSOPR)

FIN:
ENDPGM

Integración con sistemas de monitoreo

SNMP — enviar traps desde Quick EDD:

Quick EDD puede configurarse para enviar alertas SNMP. Desde el lado de la aplicación, también se pueden enviar traps adicionales usando el comando SNDSRVRQS o invocando la API SNMP de IBM i.

Message queue — integración con QSYSOPR y colas personalizadas:

/* Leer mensajes de la cola de QuickEDD programáticamente */
RCVMSG MSGQ(EDHLIB/EDHMSGQ) MSGTYPE(*ANY) WAIT(0) +
       MSG(&MSGTEXT) MSGID(&MSGID) MSGDTA(&MSGDATA)

Los mensajes de la cola de QuickEDD pueden redirigirse a una data queue (*DTAQ) para ser consumidos por un programa de monitoreo que los envíe a Zabbix, Nagios, Datadog, o ServiceNow.

Patrón de integración recomendado:

Quick EDD → MSGQ/DTAQ → Programa CL lector → API REST/SNMP → Consola de monitoreo

Este patrón desacopla Quick EDD del sistema de monitoreo externo. El programa CL lector se encarga de transformar los mensajes a formato del destino (JSON para REST, trap SNMP, evento syslog, etc.).

Integraciones útiles

  • Monitoreo corporativo — enviar alertas SNMP/email/MSGQ a la consola de monitoreo del cliente (Zabbix, Nagios, Splunk, Datadog, ServiceNow).
  • Automatización de switch — scripts CL/Bash que orquesten el switch en batch para drills periódicos.
  • Reporting — extraer métricas de replicación a un dashboard de cliente.

Buenas prácticas para que el código no rompa la replicación

  • Toda biblioteca/objeto nuevo creado en runtime debe nacer journaled. El programa que crea archivos debe llamar STRJRNPF (o equivalente) inmediatamente.
  • Documentar en cada release: bibliotecas/objetos involucrados, para que ops actualice la configuración de replicación.
  • Evitar nombres reservados o esquemas que QuickEDD no replique por diseño.

Recurso oficial

Documentación de Precisely Support: support.precisely.com/products/assure-quick-edd.