Actualización de servicios OSGi para plug-ins de eXtreme Scale con xscmd

WebSphere eXtreme Scale soporta la actualización de paquetes de plug-in de servidor de contenedor mientras la cuadrícula está activa. Este soporte permite a los administradores realizar actualizaciones de aplicación y adiciones sin necesidad de reiniciar los procesos de cuadrícula.

Antes de empezar

Complete los pasos siguientes antes de actualizar paquetes OSGi de eXtreme Scale a una nueva versión:
  1. Inicie los servidores de eXtreme Scale en una infraestructura OSGi soportada.
  2. Separe todos los plug-ins de eXtreme Scale en paquetes y éstos deben utilizar clasificaciones de servicio para identificar cada versión de los plug-ins.
  3. Especifique objetos de memoria caché como tipo de primitivos Java como byte[], Integer o String, o se deben almacenar utilizando un plug-in MapSerializerPlugin. Los objetos de datos se almacenan en el paquete eXtreme Scale y no se actualizan. Sólo se actualizan los plug-ins que interactúan con los datos.
  4. Diseñe los datos de objeto de memoria caché de forma que sean compatibles con las versiones. Los plug-ins nuevos deben poder interactuar con los datos creados por los plug-ins antiguos.
  5. Diseñe plug-ins para escuchar los sucesos ObjectGridLifecycle y BackingMapLifecycle para renovar las referencias a otros plug-ins o los metadatos que los plug-ins pueden tener para que se puedan renovar cuando se actualiza.
  6. El proceso de actualización OSGi de eXtreme Scale sólo afecta a los servidores. Debe actualizar de forma independiente los clientes que utilizan plug-ins.

Acerca de esta tarea

Sin la habilitación OSGi, si un administrador necesita actualizar plug-ins de aplicación u objetos de memoria caché, se debe actualizar uno a a uno cada nodo de cuadrícula, lo que produce estrés en la red, la memoria y la utilización de cpu. Esto es necesario puesto que los objetos Java de memoria caché y plug-ins se almacenan directamente en la cuadrícula. Cuando las clases se actualizan sin reiniciar los procesos, los plug-ins de cuadrícula tienen conflictos porque cada clase tiene un ClassLoader diferente.

El producto eXtreme Scale incluye el programa de utilidad xscmd y MBeans lo que permite a los administradores ver todos los paquetes de plug-in instalados en infraestructura OSGi de alojamiento de cada contenedor de cuadrícula y elegir qué revisión va a utilizar. Cuando se utiliza xscmd para actualizar los plug-ins a una nueva clasificación, se inmoviliza la cuadrícula y se drenan todas las transacciones, se actualizan los plug-ins y la cuadrícula se activa de nuevo. Si se produce un error durante el proceso de actualización, el proceso se retrotrae y la clasificación antigua se restaura.

Procedimiento

  1. Cree una versión del paquete, aumentando el número de versión en el manifiesto de paquete y aumentando la clasificación para cada servicio de plug-in eXtreme Scale. Si la versión de paquete original es Bundle-Version: 1.0.0, la siguiente versión se puede definir como Bundle-Version: 1.1.0.

    Si la clasificación de servicio original es ranking="1", la siguiente clasificación se puede definir como ranking="2".

    Importante: Las clasificaciones de servicio de OSGi deben ser enteros.
  2. Copie el nuevo paquete en cada nodo de infraestructura OSGi que aloja un servidor de contenedor de eXtreme Scale.
  3. Instale el nuevo paquete en la infraestructura OSGi. Se le asigna al paquete un identificador de paquete; por ejemplo:
    osgi> install <URL a paquete>
  4. Inicie el nuevo paquete utilizando el identificador de paquete asignado; por ejemplo:
    osgi> start <id>

    Después de que se haya iniciado el nuevo paquete, el rastreador de servicio OSGi de eXtreme Scale detecta el paquete y lo deja disponible para la actualización.

  5. Utilice el mandato xscmd -c osgiAll para verificar que cada servidor de contenedor ve el nuevo paquete. El mandato osgiAll consulta en todos los contenedores de la cuadrícula todos los servicios a los que se hace referencia en el archivo XML de descriptor de ObjectGrid y visualiza todas las clasificaciones que están disponibles; por ejemplo:
    xscmd -c osgiAll 
    
    Server: server1
       OSGi Service Name          Available Rankings
       -----------------          ------------------
       myLoaderServiceFactory     1, 2
       mySerializerServiceFactory 1, 2
    
    Server: server2
       OSGi Service Name          Available Rankings
       -----------------          ------------------
       myLoaderServiceFactory     1, 2
       mySerializerServiceFactory 1, 2
    
    Summary - All servers have the same service rankings.
  6. Utilice el mandato xscmd -c osgiCheck para verificar que una o más clasificaciones de servicio son destinos de actualización válidos; por ejemplo:
    xscmd -c osgiCheck -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2
    
    CWXSI0040I: The command osgiCheck has completed successfully.
  7. Si el mandato osgiCheck no ha encontrado errores resultantes, suspenda el equilibrador del servicio de colocación para evitar movimientos de fragmentos, si se produjera una anomalía durante el proceso de actualización. Para suspender la colocación, utilice el mandato xscmd -c suspendBalancing para cada cuadrícula de objeto y conjunto de correlaciones afectados por la actualización; por ejemplo:
    xscmd -c suspendBalancing -g MyGrid -ms MyMapSet
  8. Después de que se haya suspendido el equilibrio para cada cuadrícula de objeto y conjunto de correlaciones, utilice el mandato xscmd -c osgiCheck de nuevo para verificar que una o más clasificaciones de servicio son destinos de actualización válidos; por ejemplo:
    xscmd -c osgiCheck -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2
    
    CWXSI0040I: The command osgiCheck has completed successfully.
  9. Después de que se haya suspendido el equilibrio para la cuadrícula de objeto y el conjunto de correlaciones, utilice el mandato osgiUpdate para actualizar el servicio en todos los servidores para una cuadrícula de objeto y un conjunto de correlaciones; por ejemplo:
    xscmd -c osgiUpdate  -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2 -g MyGrid -ms MyMapSet
  10. Verifique que la actualización se haya realizado satisfactoriamente; por ejemplo:
    La actualización ha sido satisfactoria para las siguientes clasificaciones
    de servicio:
    Service                     Ranking
    -------                     -------
    mySerializerServiceFactory  2
    myLoaderServiceFactory      2
  11. Después de verificar que la clasificación se ha actualizado satisfactoriamente, habilite el equilibrado de nuevo, utilizando el mandato xscmd -c resumeBalancing; por ejemplo:
    xscmd -c resumeBalancing -g MyGrid -ms MyMapSet
  12. Detenga y desinstale el paquete antiguo en cada infraestructura OSGi que aloja el contenedor de eXtreme Scale. Por ejemplo, entre el código siguiente en la consola de Eclipse Equinox:
    osgi> stop <id>
    osgi> uninstall <id>

Resultados

El paquete eXtreme Scale se ha actualizado a una versión nueva.