4.2. Bereitstellen an einen Fabric
4.2.1. Einen Fabric erstellen Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
4.2.1.1. Überblick Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Abbildung 4.2 zeigt die Übersicht eines Beispiel-Fabric, den Sie erstellen werden. Das Fabric Ensemble besteht aus nur einem Fabric Server (wodurch sich dieser Fabric nur zum Experimentieren eignet) und zwei untergeordneten Containern.
Abbildung 4.2. Ein Beispiel-Fabric mit untergeordneten Containern
4.2.1.2. Fabric Server Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Ein Fabric Server (oder Server) bildet die Grundlage eines Fabric. Er beinhaltet einen Registry-Dienst, der eine replizierbare Datenbank mit Informationen zum Status des Fabric verwahrt. Wenn Sie den Fabric zu Beginn erstellen, existiert nur ein einzelner Fabric Server.
4.2.1.3. Untergeordnete Container Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Das Erstellen von einem oder mehreren untergeordneten Containern ist die einfachste Weise einen Fabric zu erweitern. Wie in Abbildung 4.2, »Ein Beispiel-Fabric mit untergeordneten Containern« gezeigt ist der erste Container im Fabric ein »root«-Container, und beide untergeordnete Container sind von ihm abgeleitet.
Jeder untergeordnete Container ist eine unabhängige Red Hat JBoss Fuse Container Instanz, die ihre eigene JVM Instanz betreibt. Die Daten-Dateien für die untergeordneten Container sind im
InstallDir/instances Verzeichnis gespeichert.
4.2.1.4. Schritte beim Erstellen des Fabric Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Um den einfachen Fabric zu erstellen, der in Abbildung 4.2, »Ein Beispiel-Fabric mit untergeordneten Containern« dargestellt ist, befolgen Sie diese Schritte:
- (Optional) Passen Sie den Namen des »root« Containers an, indem Sie die
InstallDir/etc/system.propertiesDatei bearbeiten und einen anderen Namen für diese Eigenschaft festlegen:karaf.name=rootAnmerkungBeim ersten Container in Ihrem Fabric ist dieser Schritt optional. Wenn Sie jedoch zu einem späteren Zeitpunkt einen »root« Container mit dem Fabric verbinden wollen, so müssen Sie den Namen des neuen Containers anpassen, damit es nicht zu Konflikten mit bestehenden »root« Containern im Fabric kommt. - Um den ersten Fabric Container zu erstellen, der als Basis für den neuen Fabric dient, geben Sie den folgenden Konsolebefehl ein:
JBossFuse:karaf@root> fabric:create --new-user AdminUser --new-user-password AdminPass --new-user-role Administrator --resolver manualip --manual-ip 127.0.0.1 --zookeeper-password ZooPass --wait-for-provisioningDer aktuelle Container, der standardmäßig den Namenrootträgt, wird zu einem Fabric Server mit einem installierten Registry-Dienst. Dies ist anfangs der einzige Container im Fabric. Die--new-user,--new-user-passwordund--new-user-roleOptionen legen die Berechtigungen für einen neuen Administrator-Benutzer fest. Das Zookeeper Passwort wird zur Sicherung vertraulicher Daten im Fabric Registry-Dienst verwendet (alle Knoten unter/fabric).AnmerkungSie werden meist nicht zur Eingabe des Zookeeper Passworts aufgefordert, wenn Sie auf den Registry-Dienst zugreifen, weil es in der aktuellen Sitzung zwischengespeichert wird. Wenn Sie jedoch einen Container mit einem Fabric verbinden, so müssen Sie das Zookeeper Passwort des Fabric eingeben.AnmerkungEs wird empfohlen, dass Sie dem Rechner, der als Host für einen Fabric Server fungiert, eine statische IP-Adresse zuweisen und dass Sie diesen Port explizit mit den--resolverund--manual-ipOptionen festlegen, wenn Sie den Fabric erstellen. Für einfache Tests und Demonstrationen können Sie die Loopback-Adresse127.0.0.1festlegen (wie hier). Weitere Informationen finden Sie im Kapitel »Einen neuen Fabric erstellen« im »Fabric Handbuch«. - Erstellen Sie zwei untergeordnete Container. Heißt Ihr root-Container
root, so geben Sie den folgenden Konsolenbefehl ein:JBossFuse:karaf@root> fabric:container-create-child root child 2 Creating new instance on SSH port 8102 and RMI ports 1100/44445 at: /home/fbolton/Programs/JBossFuse/jboss-fuse-6.2.0.redhat-123/instances/child2 Creating new instance on SSH port 8103 and RMI ports 1101/44446 at: /home/fbolton/Programs/JBossFuse/jboss-fuse-6.2.0.redhat-123/instances/child The following containers have been created successfully: Container: child2. Container: child.Falls Sie zur Eingabe eines JMX Benutzernamens und Passworts aufgefordert werden, so geben Sie die Kombination von Benutzernamen/Passwort ein, die Sie in Schritt 2 definiert haben. - Rufen Sie mit dem
fabric:container-listBefehl eine Liste aller Container in Ihrem neuen Fabric auf. Die Liste sollte ungefähr so aussehen:JBossFuse:karaf@root> fabric:container-list [id] [version] [type] [connected] [profiles] [provision status] root* 1.0 karaf yes fabric success fabric-ensemble-0000-1 jboss-fuse-full child 1.0 karaf yes default success child2 1.0 karaf yes default success
4.2.1.5. Herunterfahren der Container Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Da die untergeordneten Container in ihren eigenen JVMs laufen, stoppen Sie nicht automatisch, wenn der root-Container heruntergefahren wird. Um einen Container und dessen untergeordnete Container herunterzufahren, stoppen Sie zuerst die untergeordneten Container mit dem
fabric:container-stop Befehl. Um zum Beispiel den aktuellen Fabric komplett zu stoppen, geben Sie diese Konsolenbefehle ein:
JBossFuse:karaf@root> fabric:container-stop child
JBossFuse:karaf@root> fabric:container-stop child2
JBossFuse:karaf@root> shutdown
Nach dem Neustart des root-Containers müssen Sie explizit die untergeordneten Container mit dem
fabric:container-start Konsolenbefehl neu starten.
4.2.2. Fabric Profile erstellen Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
4.2.2.1. Überblick Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Ein Profil ist die Grundeinheit der Bereitstellung in einem Fabric. Sie können eines oder mehrere Profile einem Container bereitstellen und der Inhalt dieser bereitgestellten Profile entscheidet, was in dem Container installiert wird.
4.2.2.2. Inhalte eines Profils Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Ein Profil beinhaltet die folgenden Arten von Informationen:
- Die URL Speicherorte von Features Repositorys
- Eine Liste der zu installierenden Funktionen
- Eine Liste zu installierender Bündel (oder - allgemeiner - jedes passende JAR-Paket—einschließlich OSGi Bündel, Fuse Application Bündel und WAR-Dateien)
- Eine Sammlung von Konfigurationseinstellungen für den OSGi Config Admin Dienst
- Java Systemeigenschaften, die den Apache Karaf Container beeinflussen
etc/system.properties) - Java Systemeigenschaften, die installierte Bündel beeinflussen
etc/system.properties)
4.2.2.3. Basisprofil Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Profile unterstützen Vererbung. Dies kann von Nutzen sein, wenn Sie einen Cluster an ähnlichen Servern bereitstellen möchten—etwa wenn sich Server nur in der Wahl der TCP-Port-Nummer unterscheiden. Für diesen Fall würden Sie in der Regel ein Basisprofil definieren, das alle den Servern gemeinsamen Bereitstellungsdaten enthält. Jedes einzelne Serverprofil würde vom gemeinsamen Basisprofil erben, aber Konfigurationseinstellungen entsprechend seiner Serverinstanz hinzufügen.
4.2.2.4. Ein Basisprofil erstellen Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Um das
gs-cxf-base Profil zu erstellen, gehen Sie wie folgt vor:
- Erstellen Sie das
gs-cxf-baseProfil durch Eingabe des Konsolenbefehls:JBossFuse:karaf@root> fabric:profile-create --parent feature-cxf gs-cxf-base - Fügen Sie das
get-startedFeatures Repository (siehe Ein Feature für die Applikation definieren) mit dem folgenden Konsolenbefehl demgs-cxf-baseProfil hinzu:JBossFuse:karaf@root> profile-edit -r mvn:org.fusesource.example/get-started/1.0-SNAPSHOT/xml/features gs-cxf-base - Fügen Sie jetzt das
cxf-http-jettyFeature (das Support für den HTTP-Jetty-Endpunkt bietet) mit dem folgenden Konsolenbefehl demgs-cxf-baseProfil hinzu:JBossFuse:karaf@root> profile-edit --feature cxf-http-jetty gs-cxf-base - Fügen Sie jetzt das
get-started-cxfFeature (das den Web-Dienst Beispielserver liefert) mit dem folgenden Konsolenbefehl demgs-cxf-baseProfil hinzu:JBossFuse:karaf@root> profile-edit --feature get-started-cxf gs-cxf-base
4.2.2.5. Erstellen abgeleiteter Profile Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Sie erstellen zwei abgeleitete Profile,
gs-cxf-01 und gs-cxf-02, die unterschiedliche TCP-Ports für den Webdienst konfigurieren. Hierzu gehen Sie wie folgt vor:
- Erstellen Sie das
gs-cxf-01Profil—welches sich vongs-cxf-baseableitet—indem Sie diesen Konsolenbefehl eingeben:JBossFuse:karaf@root> profile-create --parent gs-cxf-base gs-cxf-01 - Erstellen Sie das
gs-cxf-02Profil—welches sich vongs-cxf-baseableitet—indem Sie diesen Konsolenbefehl eingeben:JBossFuse:karaf@root> profile-create --parent gs-cxf-base gs-cxf-02 - Stellen Sie im
gs-cxf-01Profil dieportNumberKonfigurationseigenschaft auf 8185 ein, indem Sie diesen Konsolenbefehl eingeben:JBossFuse:karaf@root> profile-edit -p org.fusesource.example.get.started/portNumber=8185 gs-cxf-01 - Stellen Sie im
gs-cxf-02Profil dieportNumberKonfigurationseigenschaft auf 8186 ein, indem Sie diesen Konsolenbefehl eingeben:JBossFuse:karaf@root> profile-edit -p org.fusesource.example.get.started/portNumber=8186 gs-cxf-02
4.2.3. Bereitstellen der Profile Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
4.2.3.1. Bereitstellen der Profile an untergeordnete Container Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Nachdem Sie die untergeordneten Container wie in Abschnitt 4.2.1, »Einen Fabric erstellen« und die Profile wie in Abschnitt 4.2.2, »Fabric Profile erstellen« beschrieben erstellt haben, können Sie die Profile jetzt bereitstellen. Sie tun dies wie folgt:
- Stellen Sie das
gs-cxf-01Profil imchildContainer durch Eingeben dieses Konsolenbefehls bereit:JBossFuse:karaf@root> fabric:container-change-profile child gs-cxf-01 - Stellen Sie das
gs-cxf-02Profil imchild2Container durch Eingeben dieses Konsolenbefehls bereit:JBossFuse:karaf@root> fabric:container-change-profile child2 gs-cxf-02
4.2.3.2. Überprüfen Sie, ob der Webdienst läuft Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Um zu überprüfen, ob der Webdienst erfolgreich am
child Container gestartet wurde, gehen Sie wie folgt vor:
- Falls der untergeordnete Container nicht bereits läuft, starten Sie diesen durch Eingabe des folgenden Befehls:
JBossFuse:karaf@root> container-start child - Warten Sie, bis der Startvorgang des
childContainers abgeschlossen ist. Sie können den Provisioning-Status mit demwatchBefehl wie folgt beobachten:JBossFuse:karaf@root> watch container-list - Stellen Sie wie folgt eine Verbindung zum untergeordneten Container her:
JBossFuse:karaf@root> container-connect child - Nach der Verbindung mit dem
childContainer, führen Sie eine Auflistung der aktiven CXF-Endpunkte durch, indem Sie den folgenden Befehl eingeben:JBossFuse:admin@child> cxf:list-endpoints Name State Address BusID [HelloWorldImplPort ] [Started ] [http://0.0.0.0:8185/cxf/HelloWorld ] [org.fusesource.example.cxf-basic-cxf481246446] [FabricResource ] [Started ] [/fabric8 ] [io.fabric8.fabric-rest-cxf1093764918 ]
4.2.4. Ein Profil aktualisieren Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
4.2.4.1. Atomic Container Upgrades Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Normalerweise werden Änderungen an einem bereits in einem Container bereitgestellten Profil sofort wirksam. Der Grund hierfür ist, dass der Fabric Agent in dem betreffenden Container (oder Containern) die Fabric Registry in Echtzeit aktiv überwacht.
In der Praxis ist die sofortige Propagierung oftmals unerwünscht. In einem Produktionssystem etwa, sollen Änderungen in der Regel schrittweise eingeführt werden: Zum Beispiel durch anfängliches Testen der Änderungen in nur einem Container, um auf Probleme zu prüfen, ehe die Änderungen an allen Containern vorgenommen werden. Manchmal müssen auch mehrere Bearbeitungen gemeinsam durchgeführt werden, um eine Applikation auf konsistente Weise neu zu konfigurieren.
4.2.4.2. Profil Versionierung Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Für die Qualitätssicherung und Konsistenz ist es in der Regel am besten, Profile atomar zu bearbeiten, wo mehrere Änderungen simultan vorgenommen werden. Um atomare Aktualisierungen zu unterstützen, implementiert Fabric Profil-Versionierung. Anfangs weist der Container auf Version 1.0 eines Profils. Wenn Sie eine neue Profilversion erstellen (zum Beispiel Version 1.1), so sind die Änderungen für den Container unsichtbar, bis Sie ein Upgrade durchführen. Nachdem Sie mit dem Bearbeiten des neuen Profils fertig sind, können Sie alle Änderungen simultan anwenden, indem Sie ein Uprade des Containers zur Verwendung der neuen Version 1.1 des Profils durchführen.
4.2.4.3. Upgrade auf ein neues Profil Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Um zum Beispiel das
gs-cxf-01 Profil zu bearbeiten, wenn es bereitgestellt ist und in einem Container läuft, gehen Sie wie folgt vor:
- Erstellen Sie eine neue Version 1.1, die die ausstehenden Änderungen enthält, indem Sie den folgenden Konsolenbefehl eingeben:
JBossFuse:karaf@root> fabric:version-create Created version: 1.1 as copy of: 1.0Die neue Version wird mit einer Kopie aller Profile von Version 1.0 initialisiert. - Verwenden Sie den
fabric:profile-editBefehl, um dieportNumbervongs-cxf-01in den Wert 8187 zu ändern, indem Sie den folgenden Befehl eingeben:JBossFuse:karaf@root> fabric:profile-edit -p org.fusesource.example.get.started/portNumber=8187 gs-cxf-01 1.1Denken Sie daran, Version1.1beimfabric:profile-editBefehl festzulegen, damit die Änderungen an Version 1.1 desgs-cxf-01Profils angewendet werden. - Führen Sie ein Upgrade des
child1Containers auf Version 1.1 durch, indem Sie den folgenden Konsolenbefehl eingeben:JBossFuse:karaf@root> fabric:container-upgrade 1.1 child1
4.2.4.4. Zurücksetzen auf ein altes Profil Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
Sie können ganz einfach auf die alte Version des
gs-cxf-01 Profils zurücksetzen, indem Sie den fabric:container-rollback Befehl wie folgt verwenden:
JBossFuse:karaf@root> fabric:container-rollback 1.0 child1