Detailliertes Tutorial zum Bereitstellen einer benutzerdefinierten Apollo-Umgebung mit Docker-Compose

Detailliertes Tutorial zum Bereitstellen einer benutzerdefinierten Apollo-Umgebung mit Docker-Compose

Was ist das Apollo Configuration Center?

Apollo ist ein Open-Source-Konfigurationsmanagement-Center, das von der Framework-Abteilung von Ctrip entwickelt wurde. Es kann die Konfiguration verschiedener Anwendungsumgebungen und Cluster zentral verwalten. Nachdem die Konfiguration geändert wurde, kann sie in Echtzeit an das Anwendungsende gesendet werden und verfügt über standardisierte Berechtigungen, Prozesssteuerung und andere Funktionen.

Merkmale von Apollo

  • Zentralisierte Verwaltung von Konfigurationen in verschiedenen Umgebungen und Clustern

Apollo bietet eine einheitliche Schnittstelle zur zentralen Verwaltung der Konfiguration verschiedener Umgebungen, Cluster und Namespaces.
Derselbe Code, der in verschiedenen Clustern bereitgestellt wird, kann unterschiedliche Konfigurationen haben, z. B. die Adresse von Zookeeper. Namespaces können problemlos mehrere verschiedene Anwendungen dabei unterstützen, dieselbe Konfiguration gemeinsam zu nutzen, und gleichzeitig Anwendungen ermöglichen, die gemeinsam genutzte Konfiguration zu überschreiben.

  • Konfigurationsänderungen werden in Echtzeit wirksam (Hot Release)

Nachdem der Benutzer die Konfiguration in Apollo geändert und veröffentlicht hat, kann der Client die neueste Konfiguration in Echtzeit (1 Sekunde) empfangen und die Anwendung benachrichtigen

  • Versionsfreigabeverwaltung

Alle Konfigurationsversionen verfügen über ein Versionskonzept, das ein Konfigurations-Rollback problemlos unterstützt.

  • Graustufenversion

Unterstützt die Graustufenfreigabe von Konfigurationen. Wenn Sie beispielsweise auf „Freigeben“ klicken, wird dies nur auf einige Anwendungsinstanzen wirksam und nach einer gewissen Beobachtungszeit ohne Probleme an alle Anwendungsinstanzen übertragen.

  • Berechtigungsmanagement, Release-Review und Betriebsaudit

Es gibt einen vollständigen Berechtigungsverwaltungsmechanismus für die Anwendungs- und Konfigurationsverwaltung. Die Konfigurationsverwaltung ist außerdem in zwei Teile unterteilt: Bearbeiten und Veröffentlichen, wodurch menschliche Fehler reduziert werden.
Alle Vorgänge verfügen über Prüfprotokolle, mit denen Probleme leicht verfolgt werden können

  • Überwachung der Clientkonfigurationsinformationen

Sie können auf der Benutzeroberfläche leicht erkennen, welche Instanzen die Konfiguration verwenden.

  • Bereitstellung nativer Java- und .Net-Clients

Nativer .Net-Client, praktisch für die Anwendungsintegration und bietet eine HTTP-Schnittstelle, sodass auch Nicht-Java- und .Net-Anwendungen problemlos verwendet werden können

  • Bereitstellung einer offenen Plattform-API

Apollo selbst bietet eine relativ vollständige einheitliche Konfigurationsverwaltungsschnittstelle, die Konfigurationsverwaltung für mehrere Umgebungen und mehrere Rechenzentren, Berechtigungen, Prozesssteuerung und andere Funktionen unterstützt. Aus Gründen der Universalität legt Apollo jedoch nicht zu viele Einschränkungen für Konfigurationsänderungen fest. Solange es dem Grundformat entspricht, kann es gespeichert werden. Es erfolgt keine gezielte Überprüfung verschiedener Konfigurationswerten wie Datenbankbenutzername, Kennwort, Redis-Dienstadresse usw. Für diese Art der Anwendungskonfiguration unterstützt Apollo die Anwendungspartei dabei, die Konfiguration in Apollo über die offene Plattform-API zu ändern und zu veröffentlichen, und verfügt über eine vollständige Autorisierungs- und Berechtigungskontrolle.

  • Einfache Bereitstellung

Als Basisdienst hat das Konfigurationscenter sehr hohe Verfügbarkeitsanforderungen, was erfordert, dass Apollo so wenig externe Abhängigkeiten wie möglich hat. Derzeit ist MySQL die einzige externe Abhängigkeit, daher ist die Bereitstellung sehr einfach. Solange Java und MySQL installiert sind, kann Apollo ausgeführt werden.
Apollo bietet außerdem ein Verpackungsskript, das alle erforderlichen Installationspakete mit einem Klick generieren kann und benutzerdefinierte Laufzeitparameter unterstützt

Client-Architektur

Architektur und Module

1: Der Konfigurationsdienst bietet Funktionen wie das Lesen und Pushen von Konfigurationen, und das Dienstobjekt ist der Apollo-Client

  • Bietet eine Schnittstelle zur Konfigurationserfassung
  • Bietet eine Push-Schnittstelle für Konfigurationsaktualisierungen (basierend auf HTTP-Long-Polling)

Der Server verwendet Spring DeferredResult, um Asynchronität zu erreichen, was die Anzahl langer Verbindungen erheblich erhöht. Die aktuelle Standardkonfiguration von Tomcat Embed beträgt maximal 10.000 Verbindungen (kann angepasst werden). Die virtuelle 4C8G-Maschine kann 10.000 Verbindungen unterstützen und erfüllt daher die Anforderungen (eine Anwendungsinstanz initiiert nur eine lange Verbindung).

  • Das Schnittstellendienstobjekt ist der Apollo-Client

2. Der Admin-Dienst bietet Funktionen wie Konfigurationsänderung und -veröffentlichung und sein Dienstobjekt ist das Apollo-Portal (Verwaltungsschnittstelle).

  • Bietet eine Schnittstelle zur Konfigurationsverwaltung
  • Bereitstellung von Schnittstellen für Konfigurationsänderungen, Veröffentlichungen und andere
  • Das Schnittstellendienstobjekt ist Portal

3. Metaserver Wir haben einen Metaserver auf Eureka aufgebaut, um Eurekas Service-Discovery-Schnittstelle zu kapseln

  • Das Portal greift über den Domänennamen auf den Metaserver zu, um die Dienstliste des Admin-Dienstes (IP+Port) abzurufen.
  • Der Client greift über den Domänennamen auf den Metaserver zu, um die Dienstliste des Konfigurationsdienstes (IP+Port) abzurufen.
  • Meta Server erhält die Serviceinformationen von Config Service und Admin Service von Eureka, was einem Eureka-Client entspricht
  • Der Zweck des Hinzufügens einer Metaserverrolle besteht darin, die Details der Diensterkennung zu kapseln. Für Portal und Client erhalten sie die Dienstinformationen des Admin-Dienstes und des Konfigurationsdienstes immer über eine HTTP-Schnittstelle, ohne sich um die eigentlichen Dienstregistrierungs- und Erkennungskomponenten dahinter kümmern zu müssen.
  • Meta Server ist nur eine logische Rolle. Bei der Bereitstellung befindet es sich im selben JVM-Prozess wie Config Service, sodass IP und Port mit Config Service übereinstimmen.

Viertens: Eine Service-Discovery-Komponente von Eureka Java

  • Dienstregistrierung und -erkennung basierend auf Eureka und Spring Cloud Netflix
  • Config Service und Admin Service registrieren Dienste bei Eureka und verwalten den Heartbeat
  • Der Einfachheit halber wird Eureka derzeit im selben JVM-Prozess wie der Konfigurationsdienst bereitgestellt (über Spring Cloud Netflix).

Fünf: Portal

  • Bietet Benutzern eine Weboberfläche zur Verwaltung von Konfigurationen
  • Holen Sie sich die Admin-Dienstliste (IP+Port) über den Meta-Server und greifen Sie über IP+Port auf den Dienst zu.
  • Führen Sie einen Lastenausgleich und einen Fehlerwiederholungsversuch auf der Portalseite durch.

6. Kunde

  • Das von Apollo bereitgestellte Client-Programm bietet Funktionen wie Konfigurationserfassung und Echtzeit-Update für Anwendungen
  • Holen Sie sich die Dienstliste des Konfigurationsdienstes (IP+Port) über den Metaserver und greifen Sie über IP+Port auf den Dienst zu.
  • Führen Sie auf der Clientseite einen Lastenausgleich und einen Wiederholungsversuch bei Fehlern durch.

einsetzen

  1. Derzeit haben wir mehrere Entwicklungsumgebungen: dev, devmt, uat usw. Apollo kann in mehreren Umgebungen eingesetzt werden, und Sie müssen die einzusetzende Umgebung angeben
  2. Apollo wird in mehreren Umgebungen eingesetzt. Konfigurationsdienst und Verwaltungsdienst müssen je nach Umgebung separat eingesetzt werden. Portal kann in nur einer Kopie eingesetzt werden, um alle Umgebungen zu verwalten.
  3. GitHub-Download: https://github.com/ctripcorp/apollo Quellcode
  4. Bei der Änderung des Quellcodes von benutzerdefinierten Umgebungsvariablen wird empfohlen, die GitHub-Dokumentdatei des Quellcodes auf den spezifischen Pfad des Codes zu überprüfen

Env com.ctrip.framework.apollo.core.enums DEVMT hinzufügen

öffentliche Aufzählung Env{
  LOKAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNBEKANNT, DEVMT;

  öffentliche statische Umgebung von String (String-Umgebung) {
    Env-Umgebung = EnvUtils.transformEnv(env);
    Preconditions.checkArgument(Umgebung != UNBEKANNT, String.format("Umgebung %s ist ungültig", Umgebung));
    Umgebung zurückgeben;
  }
}

EnvUtils com.ctrip.framework.apollo.core.enums DEVMT hinzufügen

öffentliche letzte Klasse EnvUtils {
  
  öffentliche statische Umgebung transformEnv(String envName) {
    wenn (StringUtils.isBlank(envName)) {
      gibt Env.UNKNOWN zurück;
    }
    Schalter (Umgebungsname.trim().toUpperCase()) {
      Fall "LPT":
        Umschlag LPT zurückgeben;
      Fall "FAT":
      Fall „FWS“:
        Env.FAT zurückgeben;
      Fall "UAT":
        Env.UAT zurückgeben;
      Fall "PRO":
      Fall "PROD": //nur für den Fall
        Env.PRO zurückgeben;
      Fall "DEV":
        Env.DEV zurückgeben;
      Fall "LOKAL":
        gibt Env.LOCAL zurück;
      Fall "WERKZEUGE":
        Env.TOOLS zurückgeben;
      Fall "DEVMT":
        Env.DEVMT zurückgeben;
      Standard:
        gibt Env.UNKNOWN zurück;
    }
  }
}

LegacyMetaServerProvider com.ctrip.framework.apollo.core.internals DEVMT hinzufügen

private void initialisieren() {
    Eigenschaften-Eigenschaft = neue Eigenschaften();
    prop = ResourceUtils.readConfigFile("apollo-env.properties", prop);

    domains.put(Env.LOCAL, getMetaServerAddress(prop, "local_meta", "local.meta"));
    domains.put(Env.DEV, getMetaServerAddress(prop, "dev_meta", "dev.meta"));
    domains.put(Env.FAT, getMetaServerAddress(prop, "fat_meta", "fat.meta"));
    domains.put(Env.UAT, getMetaServerAddress(prop, "uat_meta", "uat.meta"));
    domains.put(Env.LPT, getMetaServerAddress(prop, "lpt_meta", "lpt.meta"));
    domains.put(Env.PRO, getMetaServerAddress(prop, "pro_meta", "pro.meta"));
    domains.put(Env.SIT, getMetaServerAddress(prop, "devmt_meta", "devmt.meta"));
  }

Überprüfen Sie, installieren Sie JAVA JDK und Maven, öffnen Sie den Quellcode-Ordner Scripts und führen Sie die Build-Datei aus, um Apollo zu kompilieren und zu verpacken

Kopieren Sie apollo-configservice/target, apollo-adminservice/target, apollo-portal/target, die ZIP-Dateien und das Dockerfile unter den Dateien in den angegebenen Ordner, wie unten gezeigt

Ändern Sie die Versionsnummern der Dateien Configservice, Adminservice, Portal und Dockerfile, sodass sie mit den Versionsnummern der ZIP-Dateien übereinstimmen.

Suchen Sie das SQL-Bereitstellungsskript im Ordner „Scripts“ des Quellcodes und führen Sie es in MySQL aus.

Ändern Sie apolloconfigdb. Die Adresse von eureka.service.url ist die Adresse, unter der Configservice bereitgestellt wird, z. B. http://192.168.xx.xxx:8081/eureka/.

Ändern Sie die Datei apollo.portal.envs des Portals in: Umgebungsvariablen für die Bereitstellung in mehreren Umgebungen, wie dev, devmt

Ändern Sie die Adresse apollo.portal.meta.servers des Portals in die Adresse des bereitgestellten Configservice, zum Beispiel

{
    "DEV":"http://192.168.xx.xxx:8081",
    "DEVMT":"http://192.168.xx.xxx:8082"
}

Schreiben Sie docker-compose.yml

Version: "3"
Leistungen:
  apollo-Konfigurationsdienst:
    Containername: apollo-configservice
    Erstellen: apollo-configservice/ 
    Bild: apollo-configservice
    Häfen:
      -8081:8080
    Bände:
      – /root/apollo/apollocompose/logs:/opt/logs
    Umfeld:
      - SPRING_DATASOURCE_URL= jdbc:mysql://192.168.xx.xxx:3306/apolloconfigdbdev?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      -SPRING_DATASOURCE_USERNAME=xxxxxx
      -SPRING_DATASOURCE_PASSWORD=xxxxxx

  apollo-Admindienst:
    Containername: apollo-adminservice
    Erstellen: apollo-adminservice/ 
    Bild: apollo-adminservice
    Häfen:
      -8091:8090
    Bände:
      – /root/apollo/apollocompose/logs:/opt/logs
    Umfeld:
      - SPRING_DATASOURCE_URL= jdbc:mysql://192.168.xx.xxx:3306/apolloconfigdbdev?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      -SPRING_DATASOURCE_USERNAME=xxxxxx
      -SPRING_DATASOURCE_PASSWORD=xxxxxx
  
  apollo-Konfigurationsservice-uat:
    Containername: apollo-configservice-uat
    Erstellen: apollo-configservice/ 
    Bild: apollo-configservice
    Häfen:
      -8082:8080
    Bände:
      – /root/apollo/apollocompose/logs:/opt/logs
    Umfeld:
      - SPRING_DATASOURCE_URL= jdbc:mysql://192.168.xx.xxx:3306/apolloconfigdbuat?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      -SPRING_DATASOURCE_USERNAME=xxxxxx
      -SPRING_DATASOURCE_PASSWORD=xxxxxx

  apollo-adminservice-uat:
    Containername: apollo-adminservice-uat
    Erstellen: apollo-adminservice/ 
    Bild: apollo-adminservice
    Häfen:
      -8092:8090
    Bände:
      – /root/apollo/apollocompose/logs:/opt/logs
    Umfeld:
      - SPRING_DATASOURCE_URL= jdbc:mysql://192.168.xx.xxx:3306/apolloconfigdbuat?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      -SPRING_DATASOURCE_USERNAME=xxxxxx
      -SPRING_DATASOURCE_PASSWORD=xxxxxx
  
  Apollo-Portal:
    Containername: Apollo-Portal
    Build: Apollo-Portal/
    Bild: Apollo-Portal
    Neustart: immer
    hängt ab von:
      - Apollo-Adminservice
    Umfeld:
      - SPRING_DATASOURCE_URL= jdbc:mysql://192.168.xx.xxx:3306/apolloportaldb?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      -SPRING_DATASOURCE_USERNAME=xxxxxx
      -SPRING_DATASOURCE_PASSWORD=xxxxxx
    Bände:
      – /root/apollo/apollocompose/logs:/opt/logs
      - /root/apollo/apollocompose/apollo-env.properties:/apollo-portal/config/apollo-env.properties
    Häfen:
      -8071:8070

Ändern Sie die lokale Umgebungsvariablenkonfiguration von apollo-env.properties so, dass sie mit der benutzerdefinierten Konfiguration oder den von Ctrip definierten Umgebungsvariablen übereinstimmt.

dev.meta=http://localhost:8081
devmt.meta=http://localhost:8082

Führen Sie Docker-Compose aus. Es gibt eine Verzögerung beim Start. Warten Sie etwas länger

Fallstricke

Für benutzerdefinierte Umgebungsvariablen müssen Quellcode, Kompilierung, SQL-Skripte und Datenbankverbindungskonfiguration heruntergeladen werden. Verwenden Sie unbedingt die neueste Verbindungskonfiguration auf der offiziellen Website. Unterschiedliche Versionen können inkonsistente SQL-Skripte aufweisen. Die Bereitstellungsmaschine muss über ausreichend Arbeitsspeicher verfügen. Nach der Bereitstellung und dem Start müssen Configservice, Adminservice, Portal, Mata Service und Eureka kommunizieren, sodass es nach dem Start zu einer Verzögerung kommt. Warten Sie eine Weile, um zu sehen, ob die Bereitstellung erfolgreich war. Für Serverports muss die Firewall die entsprechenden Ports 8080, 8090, 8071 und die von Ihnen angegebenen Ports öffnen.

Studienlinks

Artikel zur Architekturanalyse von Herrn Yang Bo: https://blog.csdn.net/yang75108/article/details/86989524?spm=1001.2014.3001.5501

Apollo-Designdokumentation: https://www.apolloconfig.com/

Apollo erstellt eine benutzerdefinierte Umgebung: https://www.jianshu.com/p/f84da093944f

Oben sind die Details der Docker-Compose-Bereitstellung der benutzerdefinierten Apollo-Umgebung aufgeführt. Weitere Informationen zur Docker-Compose-Bereitstellung der Apollo-Umgebung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Implementierung der Master-Slave-Replikation im Docker Compose-Deployment
  • Tutorial zur Verwendung von Docker Compose zum Erstellen von Confluence
  • Beispiel für die Verwendung von Docker Compose zum Erstellen einer Consul-Clusterumgebung
  • Implementierung der ELK-Bereitstellungsmethode mit einem Klick in Docker Compose
  • Detaillierte Erklärung der Lösung für das zu langsame Docker-Compose
  • Docker Compose-Übung und Zusammenfassung

<<:  Reines CSS, um die Bildlaufleiste auszublenden, aber dennoch den Bildlaufeffekt beizubehalten (mobil und PC)

>>:  Zehn Erfahrungen im Webdesign im Jahr 2008

Artikel empfehlen

So implementieren Sie den Dienststatus zur Nginx-Konfigurationserkennung

1. Überprüfen Sie, ob das Modul „Status prüfen“ i...

Warum brauchen wir Map, wenn wir in JavaScript bereits Object haben?

Inhaltsverzeichnis 1. Behandeln Sie Objekte nicht...

Einige Vorschläge zur Linux-Systemoptimierung (Kerneloptimierung)

Swap deaktivieren Wenn auf dem Server ein Datenba...

Verwenden von Zabbix zum Überwachen des Ogg-Prozesses (Linux-Plattform)

Der Ogg-Prozess einer vor einiger Zeit erstellten...

Detaillierte Erklärung zur Installation der PHP-Curl-Erweiterung unter Linux

Dieser Artikel beschreibt, wie man die PHP-Curl-E...

So löschen Sie ein Image in Docker

Der Befehl zum Löschen von Bildern im Docker laut...

CSS-Beispielcode zum Ausblenden der Bildlaufleiste und Scrollen des Inhalts

Vorwort Wenn die HTML-Struktur einer Seite viele ...

Beispiel für die Verwendung eines manipulationssicheren JavaScript-Objekts

Inhaltsverzeichnis Manipulationssicheres Javascri...

Detaillierte Analyse des React Native-Startvorgangs

Einführung: Dieser Artikel verwendet das von reac...