OSGi-Services für eXtreme-Scale-Plug-ins mit xscmd aktualisieren

WebSphere eXtreme Scale unterstützt das Upgrade von Plug-in-Bundles für Container-Server bei aktivem Grid. Diese Unterstützung ermöglicht Administratoren, Anwendungsaktualisierungen und -erweiterungen durchzuführen, ohne Gridprozesse erneut starten zu müssen.

Vorbereitende Schritte

Führen Sie die folgenden Schritte aus, bevor Sie OSGi-Bundles von eXtreme Scale auf eine neue Version aktualisieren:
  1. Starten Sie die Server von eXtreme Scale in einem unterstützten OSGi-Framework.
  2. Packen Sie alle Plug-ins von eXtreme Scale in separate Bundles, die die Service-Rankings verwenden müssen, um die Version jedes Plug-ins zu identifizieren.
  3. Geben Sie Cacheobjekte als primitive Java-Typen wie byte[], Integer oder String an oder legen Sie fest, dass sie mit dem Plug-in MapSerializerPlugin gespeichert werden müssen. Die Datenobjekte werden im eXtreme-Scale-Bundle gespeichert und nicht aktualisiert. Nur die Plug-ins, die mit den Daten interagieren, werden aktualisiert.
  4. Entwerfen Sie versionskompatible Cacheobjektdaten. Neue Plug-ins müssen in der Lage sein, mit Daten zu interagieren, die von älteren Plug-ins erstellt wurden.
  5. Entwerfen Sie Plug-ins so, dass sie ObjectGridLifecycle- und BackingMapLifecycle-Ereignisse empfangen können und somit alle Referenzen auf andere Plug-ins oder die Metadaten, die die Plug-ins möglicherweise enthalten, aktualisiert werden, wenn sie geändert werden.
  6. Der OSGi-Aktualisierungsprozess von eXtreme Scale betrifft nur Server. Sie müssen alle Clients, die Plug-ins verwenden, unabhängig voneinander aktualisieren.

Informationen zu diesem Vorgang

Wenn OSGi nicht aktiviert ist und ein Administrator die Anwendungs-Plug-ins oder Cacheobjekte aktualisieren muss, muss jeder Gridknoten einzeln aktualisiert werden, was zu einer Belastung des Netzes und zu einer höheren Speicher- und CPU-Auslastung führt. Dies ist erforderlich, da Plug-ins und Java-Cacheobjekte direkt im Grid gespeichert werden. Wenn Klassen ohne Neustart der Prozesse aktualisiert werden, treten in den Grid-Plug-ins Konflikte auf, weil jede Klasse einen anderen ClassLoader hat.

Das Produkt eXtreme Scale enthält das Dienstprogramm xscmd und MBeans, die Administratoren ermöglichen, alle Plug-in-Bundles anzuzeigen, die im übergeordneten OSGi-Framework jedes Grid-Containers installiert sind, und die zu verwendende Überarbeitung auszuwählen. Wenn das Dienstprogramm "xscmd" für die Aktualisierung der Plug-ins auf ein neues Ranking verwendet wird, wird das Grid stillgelegt, alle Transaktionen werden bereinigt, die Plug-ins werden aktualisiert, und das Grid wird erneut aktiviert. Tritt während des Aktualisierungsprozesses ein Fehler auf, wird der Prozess rückgängig gemacht und das alte Ranking wiederhergestellt.

Vorgehensweise

  1. Erstellen Sie eine Version des Bundles, und erhöhen Sie dabei die Rankingnummer im Bundlemanifest und das Ranking für jeden eXtreme-Scale-Plug-in-Service. Wenn die ursprüngliche Bundleversion Bundle-Version: 1.0.0 ist, kann Bundle-Version: 1.1.0 als nächste Version definiert werden.

    Wenn das ursprüngliche Service-Ranking ranking="1" ist, kann ranking="2" als nächstes Ranking definiert werden.

    Wichtig: Die Rankings von OSGi-Services müssen ganze Zahlen sein.
  2. Kopieren Sie das neue Bundle auf jeden OSGi-Frameworkknoten, der einen Container-Server von eXtreme Scale hostet.
  3. Installieren Sie das neue Bundle im OSGi-Framework. Dem Bundle wird eine Bundle-ID zugeordnet, z. B.:
    osgi> install <Bundle-URL>
  4. Starten Sie das neue Bundle mit der zugeordneten Bundle-ID, z. B.:
    osgi> start <ID>

    Nach dem Start des neuen Bundles erkennt der OSGi-Service-Tracker von eXtreme Scale das Bundle und stellt es zur Aktualisierung bereit.

  5. Verwenden Sie den Befehl xscmd -c osgiAll, um sicherzustellen, dass jeder Container-Server das neue Bundle sieht. Der Befehl osgiAll fragt alle Container im Grid nach allen Services ab, die in der ObjectGrid-XML-Deskriptordatei referenziert werden, und zeigt alle verfügbaren Rankings an, z. B.:
    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. Verwenden Sie den Befehl xscmd -c osgiCheck, um sicherzustellen, dass mindestens ein Service-Ranking ein gültiges Aktualisierungsziel ist, z. B.:
    xscmd -c osgiCheck -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2
    
    CWXSI0040I: The command osgiCheck has completed successfully.
  7. Wenn der Befehl osgiCheck keine Fehler findet, setzen Sie die Ausführung der Balancer-Komponente des Verteilungsservice aus, um Shard-Verschiebungen zu vermeiden, falls während des Aktualisierungsprozesses ein Fehler auftritt. Zum Aussetzen der Verteilung verwenden Sie den Befehl xscmd -c suspendBalancing für jedes ObjectGrid und MapSet, das von der Aktualisierung betroffen ist, z. B.:
    xscmd -c suspendBalancing -g MyGrid -ms MyMapSet
  8. Nachdem die gleichmäßige Verteilung für jedes betroffene ObjectGrid und MapSet ausgesetzt wurde, verwenden Sie den Befehl xscmd -c osgiCheck erneut, um sicherzustellen, dass mindestens ein Service-Ranking ein gültiges Aktualisierungsziel ist, z. B.:
    xscmd -c osgiCheck -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2
    
    CWXSI0040I: The command osgiCheck has completed successfully.
  9. Nachdem die gleichmäßige Verteilung für jedes betroffene ObjectGrid und MapSet ausgesetzt wurde, verwenden Sie den Befehl osgiUpdate, um den Service in allen Servern für ein ObjectGrid und MapSet zu aktualisieren, z. B.:
    xscmd -c osgiUpdate  -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2 -g MyGrid -ms MyMapSet
  10. Vergewissern Sie sich, dass das Upgrade erfolgreich war, z. B.:
    Update succeeded for the following service rankings:
    Service                     Ranking
    -------                     -------
    mySerializerServiceFactory  2
    myLoaderServiceFactory      2
  11. Nachdem Sie sichergestellt haben, dass das Ranking erfolgreich aktualisiert wurde, aktivieren Sie die gleichmäßige Verteilung mit dem Befehl xscmd -c resumeBalancing erneut, z. B.:
    xscmd -c resumeBalancing -g MyGrid -ms MyMapSet
  12. Stoppen und deinstallieren Sie das alte Bundle in jedem OSGi-Framework, das den Container von eXtreme Scale hostet. Geben Sie beispielsweise den folgenden Code in der Eclipse-Equinox-Konsole ein:
    osgi> stop <ID>
    osgi> uninstall <ID>

Ergebnisse

Das eXtreme-Scale-Bundle wurde auf eine neue Version aktualisiert.