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.
- 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.
- Kopieren Sie das neue Bundle auf jeden OSGi-Frameworkknoten, der einen Container-Server von
eXtreme Scale hostet.
- Installieren Sie das neue Bundle im OSGi-Framework. Dem Bundle wird eine Bundle-ID zugeordnet, z. B.:
osgi> install <Bundle-URL>
- 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.
- 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.
- 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.
- 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
- 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.
- 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
- Vergewissern Sie sich, dass das Upgrade erfolgreich war, z. B.:
Update succeeded for the following service rankings:
Service Ranking
------- -------
mySerializerServiceFactory 2
myLoaderServiceFactory 2
- 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
- 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>