Vorheriges Thema: Installieren von SoftwareNächstes Thema: Abschließen einer Appliance


Trennen der Konfiguration und Daten vom Code

AppLogic liest die Begrenzungseigenschaften, Ausgaben und Eingaben und generiert dann die Konfiguration mithilfe von "appl_start script amd populates /config" und "[config extention]". Sie sollten Ihre Konfiguration und Daten vom Code trennen, indem Sie Ihre Daten in einem separaten Platzhalter-Volume und "/os" und "/app" auf einem schreibgeschützten instantiierbaren Volume platzieren.

Platzhalter-Volumes sind Speicherorte, mit denen Volumes verknüpft werden können. Diese Volumes werden für Appliance-spezifische Inhalte, z. B. Dateien und Datenbanken, verwendet, die zur Anwendung und nicht zur Appliance-Klasse gehören. Platzhalter-Volumes sind für persistente Status konzipiert, z. B. Dateien und Datenbanken, und bieten darüber hinaus feste Inhalte, wie HTML-Dateien für einen Webserver.

Im Gegensatz zu Platzhalter-Volumes gehören instantiierbare Volumes zur Appliance-Klasse und werden mit der Katalogklasse kopiert und migriert.

Wichtig Das instantiierbare Volume kann beim Systemstart der Appliance verloren gehen und wird beim Kopieren und Migrieren der Anwendung, wo sich die Appliance befindet, nicht bewahrt. Eine Ausnahme ist das Singleton. Die instantiierbaren Volumes werden immer für die Appliances, die Singletons sind, aufbewahrt.

Führen Sie folgende Schritte aus:

  1. Klicken Sie mit der rechten Maustaste auf die Appliance, und wählen Sie Begrenzung ändern und Volumes aus.

    Die Registerkarte Volumes wird angezeigt.

  2. Um das neue Volume hinzuzufügen, klicken Sie auf Hinzufügen.

    Das Dialogfeld Volumes erstellen wird angezeigt

  3. Füllen Sie die folgenden Felder aus:
    Typ

    Volume-Typ. Beispiel: Platzhalter

    Name

    Eindeutiger Name des Volumes. Zum Beispiel: "data"

    Größe

    Größe des Volumes in Megabyte oder Gigabyte. Zum Beispiel: 100M

    Dateisystem

    Dateisystem, das auf dem Volume installiert ist. Zum Beispiel: ext3

    Klicken Sie auf Weiter und dann auf Schließen .

    Die Registerkarte Volumes wird angezeigt.

  4. Wählen Sie das Volume aus, geben Sie dann den Volume-Bereitstellungspunkt, wie z. B. "/content", in der Spalte Bereitstellen auf ein, und klicken Sie auf OK.

    Der Infrastruktur-Editor wird angezeigt.

  5. Klicken Sie auf das Symbol "Grid-Shell".
  6. Um die Volume-Verwaltung zu starte, führen Sie folgenden Befehl aus:
    vol manage appliancename.volumename --rw
    
  7. Um das Inhaltsverzeichnis zu erstellen, führen Sie folgenden Befehl aus:
    mkdir content 
    
  8. Fügen Sie Ihre Konfiguration und Daten in das separate Volume ein.
  9. Verlassen Sie die Grid-Shell.

    Der Infrastruktur-Editor wird angezeigt.

  10. Speichern Sie die Anwendung.

Binden der Begrenzung an innere Begrenzung

Die Appliance-Begrenzung haben Sie zuvor definiert. Jetzt müssen Sie die Begrenzung an das Innere binden, um die Appliance-Initialisierung und den Systemstart zu konfigurieren. Damit kann Ihre Appliance seine eigene virtualisierte Umgebung ausführen und sein eigenes Betriebssystem, Anwendungsdienste und andere erforderliche Software booten.

Das Innere der Appliance besteht aus:

Systemstart und Hooks

Die wichtigsten Aspekte beim Binden des Inneren an die Begrenzung werden während des Systemstarts der Appliance durchgeführt.

Während des Bootvorgangs der Appliance hat das APK zwei Funktionen:

Zu Beginn des Konfigurationsvorgangs liest das APK beispielsweise

Skript zum Systemstart der Appliance

Nachdem die frühe Konfiguration abgeschlossen wurde und das grundlegende Betriebssystem startet, beginnt das Skript zum Systemstart der Appliance. Dieses optionale Skript ermöglicht es Ihnen, die Appliance-Begrenzungseigenschaften an die bestimmte Funktionalität Ihres Softwareprodukts in der Appliance anzupassen. .

Das APK bietet eine Konfigurationsdatei und einen Hook für das Skript. Der Dateispeicherort ist betriebssystemspezifisch. Zum Beispiel befindet sich die Datei in Posix-orientierten Betriebssystemen wie Linux und BSD unter "/usw/sysconfig/" und in Windows-Betriebssystemen unter "\aookiguc\config\".

Die Dateien sind folgende:

Außerdem kann die Appliance die vom Betriebssystem bereitgestellte Systemstart-Funktionalität verwenden, z. B. "sys5 initi" unter Linux oder Dienststeuerungs-Manager unter Windows.

Appliance-spezifisches Skript für die Systemstartprüfung

Nachdem der Appliance-spezifische Systemstart abgeschlossen ist, führt das APK optional das Appliance-spezifische Skript für die Systemstartprüfung aus. Das Skript, sofern vorhanden, überprüft, ob die Appliance gestartet ist, und meldet dem Controller den Erfolg oder einen Fehler. Wenn das Skript einen Fehler zurückgibt, wird die Systemstartprüfung der Appliance angehalten, und es wird eine Fehlermeldung gesendet. Wenn kein Skript zurückgegeben wird oder das Skript ohne Fehler zurückgegeben wird, meldet die Systemstartprüfung der Appliance einen erfolgreichen Startvorgang.

Appliance-Instanzendeskriptor

Der Appliance-Instanzen-Deskriptor enthält betriebssystemspezifische Informationen, wie Gerätenamen von allen Netzwerkschnittstellen und Festplatten-Volumes. Wenn Sie diese bestimmte Appliance-Klasse einer Anwendung hinzufügen, erstellen Sie eine Instanz dieser Klasse mit bestimmten Werten für die konfigurierbaren Eigenschaften und Verbindungen zu anderen Appliances und/oder zur Außenwelt. Diese bestimmte Konfiguration wird als Ganzes der virtuellen Appliance übergeben, sobald sie gestartet wird.

Wenn Sie eine Anwendung konfigurieren und starten, enthält der entsprechende Instanzen-Deskriptor Informationen ähnlich den folgenden:

Eigenschaftsgewichtung: Ganzzahl, value=37 # Appliance wurde mit bestimmtem Wert konfiguriert
Volume-Daten:  dev=/dev/sdc, mount=/opt # konfiguriert, wird dem Betriebssystem als "/dev/sdc #" angezeigt
Volume-Cache: disconnected # optional, App-Designer hat sich dazu entschieden, es nicht zu konfigurieren

Terminals

Terminals sind spezielle Netzwerkschnittstellen, die nur für Verbindungen zwischen Appliances verwendet werden, z. B. für Interaktionen mit Appliances in der gleichen Anwendung. Stellen Sie sich Terminals als Hostnamen vor.

Das APK konfiguriert das Terminal-Netzwerk automatisch, wenn eine IP-Adresse eingeschlossen ist. Die Appliance kann die IP-Adresse nicht ändern. Das APK lässt die Terminals wie Hostnamen erscheinen, damit die Integration mit vorhandener Software leichter ist. Sie können die Terminal-Konfiguration und -Zuordnung in der Appliance-Deskriptor-Datei und/oder im APK-Hilfsprogramm anzeigen. Das Hilfsprogramm bietet Ihnen einen Terminal-Namen, wenn Sie die IP-Adresse angeben.

Die Terminal-Typen sind die folgenden:

Eingabe

IN ist der Hostname. Wenn Sie versuchen, den Hostnamen IN zu lösen, wird die IP-Adresse Ihres eigenen Terminals ausgegeben. Dies ist nützlich, wenn Sie die Schnittstelle für zu überwachende Server konfigurieren. Zum Beispiel nimmt der HTP-Lastenausgleich (HALB) Sendeanforderungen an seinem IN-Eingabe-Terminal und Kontrollanforderungen an seinen CTL-Terminals an. Nur auf diese Weise kann HALB funktionieren.

Ausgabe

Ausgabe ist das am häufigsten verwendete Terminal. Der Name des Ausgabe-Terminals kann in der Appliance als Hostname verwendet werden, um eine Verbindung herzustellen, wenn eine Kommunikation mit anderen verbundenen Appliances stattfindet.

Das APK ordnet den Namen der IP-Adresse der mit der Ausgabe verbundenen Eingabe der IP-Adresse zu. Zum Beispiel kann web6 auf den Datenbankhost verweisen, um eine Verbindung mit der Datenbank herzustellen. Sie können "mysql -h -db" verwenden, um die MySQL-Datenbank mit web6 zu verbinden.

Wenn Sie das fs-Terminal als Hostnamen verwenden, löst das fs-Terminal die IP-Adresse des nfs-Servers in einer NAS-Appliance. Suchen Sie den Befehl "– mount fs l-share /mnt".

Hinweis: Auf der Appliance-Begrenzung könnten Sie einen Hostnamen konfigurieren, der ein Alias für einen Terminal-Namen sein wird. Dies ist in Fällen hilfreich, in denen ein Hostname im Softwarepaket hartkodiert wurde. Das APK ordnet den Aliasnamen der IP-Adresse der verbundenen Appliance zu.

Gateway-Ausgabe

Im Gegensatz zu den normalen Ausgabe-Terminals, die verwendet werden, um eine Verbindung zu einem einzelnen Hostnamen oder Service herzustellen, werden Gateway-Ausgabe-Terminals verwendet, um eine Verbindung mit mehreren Hosts herzustellen, normalerweise durch eine NET-Gateway-Appliance.

Wenn für eine Appliance ein Gateway-Terminal auf der Begrenzung konfiguriert ist, konfiguriert das APK diese Schnittstelle automatisch als Standardgateway für die Appliance sowie als DNS-Server.

Verwenden Sie die IP-Adresse oder den Hostnamen des Ziels, um über eine Gateway-Ausgabe auf die Dienste zuzugreifen. Zum Beispiel:

wget actp://wordpress.com/latest .tar .gz

In den meisten Appliances werden die Gateway-Ausgabe-Terminals verwendet, um auf das Netzwerk zuzugreifen. Sie können sie auch verwenden, um auf ein Netzwerk wie das Unternehmensnetzwerk zuzugreifen. Der Name des Gateway-Ausgabe-Terminals wird zur IP-Adresse des Gateways oder des Routers aufgelöst, die von der Appliance bereitgestellt wird, die mit der Gateway-Ausgabe verbunden ist. Der Name kann auch als Name eines DNS-Servers verwendet werden. So ist "dig @net google.com Net" beispielsweise der Name des Gateway-Ausgabe-Terminals, und "dig" löst die IP-Adresse auf.

Rohe Schnittstellen

Im Gegensatz zu Terminals, die mit Appliances in der gleichen Anwendung kommunizieren, kommunizieren rohe Schnittstellen außerhalb einer Appliance. Dazu gehört auch die Kommunikation mit anderen Appliances sowie mit der Außenwelt.

Rohe Schnittstellen sind virtuellen Netzwerkschnittstellen in virtuellen Maschinen und NICs in traditionellen Servern sehr ähnlich. Ihre IP-Adressen werden als Teil einer Anwendungskonfiguration zugewiesen. Das APK konfiguriert automatisch die IP-Adressen auf den rohen Schnittstellen. Außerdem konfiguriert das APK automatisch die Netzmaske und das Gateway sowie die auf der IP-Adresse basierenden NAS-Server.

Wenn eine Appliance eine einzelne rohe Schnittstelle hat, wird es zum Standard-Gateway und kann verwendet werden, um auf das externe Netzwerk zuzugreifen. Die Appliance kann nur die IP-Adressen verwenden, die auf der Anwendung konfiguriert wurden. Alle Pakete, die eine ungültige IP-Adresse enthalten, werden verworfen.

Für eine rohe Schnittstelle werden bis zu vier IP-Adressen unterstützt.

Obwohl das APK die Netzmaske und das Gateway automatisch konfiguriert, kann diese Funktionalität mithilfe des Befehls "APK config_extif" deaktiviert werden. Wenn diese Funktionalität deaktiviert ist, sollen die Skripten für den Systemstart der Appliance erwartungsgemäß die Netzwerkeinstellungen für die rohe Schnittstelle konfigurieren. Die zugewiesenen Einstellungen befinden sich in der Appliance-Instanzen-Deskriptordatei. Wenn Sie die rohen Schnittstellen deaktivieren, ist die automatische Konfiguration hilfreich, wenn die Appliance über mehr als eine rohe Schnittstelle verfügt und die Appliance das Routing und die Namensauflösung steuern will.

VLAN und Netzwerke

Wenn eine rohe Schnittstelle auf einem bestimmten VLAN platziert wird, übernimmt AppLogic die VLAN-Markierung. Die Appliance sollte Pakete ohne 802.19 VLAN-Tags senden und erwarten.

Rohe Schnittstellen – Altversionen

CA AppLogic®-Versionen vor Version 3.5 haben nur eine einzelne rohe Schnittstelle unterstützt, die als "Extern" bezeichnet wurde. Diese Schnittstelle benötigte keinen Connector zu einer externen Schnittstelle. Sie wurde mithilfe von Eigenschaften konfiguriert. Diese rohe Legacy-Schnittstelle wird nur zu Abwärtskompatibilitätszwecken unterstützt und sollte nicht für neue Appliances verwendet werden.

Sie müssen Skripte für den Systemstart von Appliances verwenden, um die rohe Legacy-Schnittstelle zu konfigurieren. Das APK konfiguriert die rohe Legacy-Schnittstelle nicht automatisch. Die Netzwerkeinstellungen, z. B. IP-Adresse, Netzmaske, Gateway und DNS-Server, werden normalerweise durch die Eigenschaftseinstellungen konfiguriert. Die IP-Adresse wird durchgesetzt, basierend darauf, ob Sie die IP-Adresse als eine IP-eigene Eigenschaft definieren.

In einer IP-eigenen Eigenschaft wird die IP-Adresse überprüft, um sicherzustellen, dass sie sich im erlaubten Bereich befindet und dass sie verhindert, dass die Schnittstelle eine andere IP-Adresse verwendet. Es können bis zu vier IP-eigene Eigenschaften definiert werden.

Wenn die Appliance keine IP-eigenen Eigenschaften hat, wird die IP-Adresse der rohen Legacy-Schnittstelle nicht überprüft oder durchgesetzt. Dies sollte mit Vorsicht verwendet werden, weil es zu einem IP-Adressmissbrauch kommen kann. Es wird nur für abwärtskompatible Funktionen unterstützt. Die Unterstützung kann in künftigen Versionen aufgehoben oder deaktiviert werden.

Rohe Standardschnittstelle

Die rohe Standardschnittstelle sendet Ereignisse und bietet SSH- und Webkonsolenzugriff auf die Appliance.

Volumes

Jede Volume-Konfiguration auf der Appliance-Begrenzung wird der Appliance als Blockgerät bereitgestellt. Das APK lädt alle Volumes automatisch in das Appliance-Dateisystem mithilfe der in der Begrenzungskonfiguration angegebenen Bereitstellungspunkte.

Die Funktion zum automatischen Laden kann mit der Option "apk_config_automount" deaktiviert werden. Weitere Informationen finden Sie im Abschnitt zum Anpassen des Appliance-Verhaltens unter Linux oder Windows.

Standardmäßig werden Volumes im Appliance-Dateisystem geladen:

Die meisten Volumes verfügen über eine einzelne Partition pro Volume, um Legacy-Images virtueller Maschinen besser zu unterstützen. Das APK versteht auch Multipartitions-Volumes.

Hinweise:

Events

Appliances können Ereignisse senden, um wichtige Ereignisänderungen anzuzeigen sowie um ungewöhnliche Vorkommen zu melden. Zum Beispiel berichtet das APK über den Erfolg oder das Fehlschlagen des Systemstartereignisses, indem eine Meldung an stderr ausgegeben wird. Nach dem Systemstart können Sie das VME-Ereignisgenerator-Hilfsprogramm während des Appliance-Vorgangs verwenden, um Zusatzinformationen oder Warnmeldungen zu senden. VME ist ein Benutzermodus-Hilfsprogramm, das während des Appliance-Startvorgangs und zur Laufzeit bestimmte Ereignisse generiert. Weitere Informationen finden Sie unter vme:Event-Generator.

Wichtige Ereignisse

Startabschluss

Der Startabschluss ist das wichtigste und einzige erforderliche Ereignis, das die Appliance senden muss. Nach Abschluss und Systemstart sendet eine verwaltete Appliance eine Meldung über den erfolgreichen Start, die darauf hinweist, dass die Appliance konfiguriert und erfolgreich gestartet wurde. Die Appliance kann jetzt ihre Funktionen ausführen.

Wenn die Appliance die Meldung "Starten fehlgeschlagen" sendet, weist dies darauf hin, dass die Appliance-Konfiguration und/oder der Systemstart fehlgeschlagen sind. Zudem enthält sie eine Beschreibung mit der Ursache des Fehlers. Die Ursache für den Fehler wird im Grid-Protokoll gespeichert und kann durch Aufrufen der Protokollliste oder der Registerkarte "Protokoll" auf dem Dashboard angezeigt werden.

Wenn Sie das APK verwenden, wird das vme-Hilfsprogramm automatisch vom APK aufgerufen, basierend auf dem zurückgegebenen Status des AppLogic-Skripts.

Dieses Skript sollte, sofern vorhanden, einen Beendigungscode von 0 zurückgeben, wenn die Appliance ordnungsgemäß startet, bzw. einen anderen Wert als Null, wenn die Appliance fehlschlägt. Die Fehlermeldung sollte an stderr ausgegeben werden. Das APK sendet nur die letzte Zeile des Textes, der vom Skript "applogic_appliance" an das Grid-Protokoll ausgegeben wurde. Anderer an stderr ausgegebener Text wird in einer temporären Datei auf dem Appliance-Startdatenträger gespeichert. Wenn das Skript nichts ausgibt, sondern einen Fehlerstatus zurückgibt, sendet das APK eine generische Textmeldung "Konnte nicht gestartet werden".

Sie können die vme-Binärdatei verwenden, um direkt verwaltete Appliances zu starten oder fehlschlagen zu lassen. Nach dem Systemstart kann die vme-Binärdatei weitere Informationen/Warnmeldungen während des Appliance-Vorgangs senden. Weitere Details finden Sie im Abschnitt "vme: Event-Generator".

Während des Systemstarts kann eine Appliance auch, wie unten beschrieben, Protokolle und Alerts ausgeben.

Systemstartwartung

Die meisten Appliances schließen den Systemstart innerhalb eines voraussagbaren und kurzen Zeitraums ab. Gelegentlich muss eine Appliance jedoch einen längeren Vorgang durchführen, der nicht innerhalb des Bootzeitraums oder innerhalb eines voraussagbaren Zeitraums durchgeführt werden kann.

Eine Appliance, die einen langwierigeren Vorgang durchführen muss, kann zusätzliche Zeit anfordern, um den Vorgang abzuschließen. Zum Beispiel:

Wenn die Appliance einen längeren Vorgang ausführen muss, bei dem externe Dienste zum Einsatz kommen, kann es sich um einen nicht vorhersagbaren Zeitraum handeln. Dazu sendet die Appliance ein Wartungsereignis. Wenn die Ausgabe des Ereignisses die Appliance in den Wartungsstart-Modus stellt, kann AppLogic einen nahezu unbegrenzten Zeitraum für den Start bieten. In diesem Modus gibt die Appliance regelmäßig Berichte zu Logik und zum abgeschlossenen Systemstart in Prozent aus.

Wenn die Appliance keinen Fortschritt anzeigt, indem Ereignisse zum Wartungsfortschritt gesendet werden, gilt die Appliance als hängend oder fehlgeschlagen, und es kommt zu einer Zeitüberschreitung beim Systemstart. Die Appliance sollte bis zur Zeitüberschreitung in regelmäßigen Abständen von 1 Sekunde und 1 Minute Wartungs-Updates bereitstellen. Der Fortschrittsprozentsatz sollte inkrementell sein. Sobald der Wartungsvorgang abgeschlossen ist, schließt die Appliance den Systemstart ab, indem auf ein Ereignis über einen erfolgreichen oder fehlgeschlagenen Start hingewiesen und eine Ursache angegeben wird.

Aufzeichnen von Ereignissen im Grid-Protokoll

Die Appliance kann Protokollmeldungen an das Grid-Protokoll senden, wenn die Appliance eine ungewöhnliche Bedingung entdeckt. Um die Ereignisse an das Grid-Protokoll zu senden, verwendet die Appliance "grid_log". VME = log_Meldungstext. Die Appliance sollte dieses Ereignis nur selten und nur für wichtige Ereignisse verwenden, die Auswirkungen auf den Grid-Umfang haben können, z. B. einen IP-Adressenkonflikt. Die Appliance sollte nicht alle sys-Protokolle oder regelmäßigen Ereignisse an das Grid-Protokoll senden, um eine Überfüllung des Protokolls zu verhindern.

Grid-Alert-Ereignis

Eine Appliance, die ein katastrophales oder sehr wichtiges Ereignis entdeckt, kann ein Alert-Ereignis senden. Daraufhin wird eine Meldung auf dem Dashboard angezeigt und, sofern konfiguriert, eine E-Mail an den Grid-Administrator gesendet. Appliances sollten einen Grid-Alert für Ereignisse, wie einen IP-Adressenkonflikt, Failover-Ereignisse, Datenbankprüfungsfehler und Stopp- oder Wiederherstellungsereignisse, senden.

Eine Appliance sollte das Grid-Alert-Ereignis nur unter Ausnahmebedingungen verwenden und sollte nicht auf regelmäßige Ereignisse hinweisen. Die Grid-Steuerung kann eine Appliance unterdrücken, die zu viele oder zu häufig Ereignisse sendet.

Leistungszähler

Jede Appliance, die den ccad-Daemon (ccad - counter collection agent) ausführt, lässt das Definieren von benutzerdefinierten Zählern und die Erfassung durch Hilfsprogramme von Drittanbietern zu. Diese Fähigkeit wird Erweiterungsschnittstelle genannt und bietet Appliance-Erstellern die Möglichkeit, appliance-spezifische Zählerdaten über die standardmäßige MON-Benutzeroberfläche zu überwachen.

Um benutzerdefinierte Zähler zu überwachen, fügen Sie der ccad-Konfiguration Zählerdefinitionen hinzu und leiten die tatsächlichen Zählerwerten an ccad weiter. Die benutzerdefinierten Zähler müssen in der optionalen Konfigurationsdatei /etc/ccad.conf (in UDL-Format) definiert werden. Wenn Sie an der Konfiguration Änderungen vornehmen, muss der ccad-Daemon neu gestartet werden, damit die Änderungen wirksam werden.

Hier sehen Sie eine einfache Beispielkonfiguration:

counters Apache
   {
   pace = 1000
   pipe = /tmp/cca
   counter Total_Accesses
      {
      name        = "Total hits"
      desc        = "Total number of hits"
      units       = "#"
      type        = "MAX"
      }
   counter Total_kBytes
      {
      name        = "Total bytes"
      desc        = "Total number of bytes"
      units       = "bytes"
      type        = "MAX"
      }
   counter BusyWorkers
      {
      name        = "Active requests"
      desc        = "Number of active requests"
      units       = "#"
      type        = "MAX"
      }
   counter IdleWorkers
      {
      name        = "Idle servers"
      desc        = "Number of idle servers"
      units       = "#"
      type        = "MAX"
      }
   }