Implementierung der Docker-Compose-Bereitstellung des ZK+Kafka+Storm-Clusters

Implementierung der Docker-Compose-Bereitstellung des ZK+Kafka+Storm-Clusters

Übersicht über die Clusterbereitstellung

172.22.12.20 172.22.12.21 172.22.12.22 172.22.12.23 172.22.12.24
zoo1:2181 zoo2:2182 zoo3:2183 zkui:9090 (Administrator/Manager)
kafka1:9092 kafka2:9092 kafka3:9092 kafdrop:9000
Zuflussdb:8086 grafana:3000 (Administrator/chanhu)
Sturm-Nimbus1 Sturm-Nimbus2 Sturm-Nimbus3 portainer:9002(admin/chanhu@123)
Sturm-Supervisor1 Sturm-Supervisor2 Sturm-Supervisor3
Sturm-UI:8080

Docker-Installation

yum aktualisieren -y     
yum install -y yum-utils Gerätemapper-Persistent-Data lvm2    
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo    
yum installiere docker-ce docker-ce-cli containerd.io   
systemctl starte Docker

Docker-Compose-Installation

yum installiere Epel-Release   
yum install -y python-pip   
pip installieren --upgrade pip   
pip installieren docker-compose

Ändern Sie die Hosts-Datei jedes Host-Rechners

vim /etc/hosts   
172.22.12.20 Datencloud0   
172.22.12.21 Datencloud1   
172.22.12.22 Datencloud2   
172.22.12.23 Datencloud3   
172.22.12.24 Datencloud4

Zookeeper-Cluster

Stellen Sie den zk-Cluster auf den Maschinen 20, 21 und 22 bereit und schreiben Sie jeweils Docker-Compose-Dateien

Wenn nur eine Maschine im Cluster normal funktioniert, fällt der Cluster aus.

Nehmen wir eines davon als Beispiel:

Zoo:   
    Bild: zookeeper:3.4.14   
    Neustart: immer   
    Hostname: zoo1   
    Containername: zoo1   
    Häfen:   
     - 2181:2181   
     -2888:2888   
     -3888:3888   
    Bände:   
     – „./zoo/data:/data“   
     – „./zoo/datalog:/datalog“   
    Umfeld:   
     ZOO_MY_ID: 1   
     ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=172.22.12.21:2888:3888 server.3=172.22.12.22:2888:3888

"./zoo/data:/data" ist das Mount-Verzeichnis für die Daten, muss konfiguriert werden

Konfiguration der Umgebungsvariablen, ZOO_MY_ID ist 1, 2 bzw. 3, ZOO_SERVERS ist mit der Clusteradresse konfiguriert und die aktuelle Maschine ist 0.0.0.0

Kakfa-Cluster

Stellen Sie den Kafka-Cluster auf den Maschinen 20, 21 und 22 bereit und schreiben Sie für jede davon Docker-Compose-Dateien (sie können zusammen mit der ZK-Docker-Compose-Datei geschrieben werden).

Nehmen wir eines davon als Beispiel:

Kafka:   
    Bild: wurstmeister/kafka:2.12-2.2.2   
    Neustart: immer   
    Hostname: kafka1   
    Containername: kafka1   
    Häfen:   
     - „9092:9092“   
    Umfeld:   
     KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.22.12.20:9092   
     KAFKA_ADVERTISED_HOST_NAME: 172.22.12.20   
     KAFKA_ADVERTISED_PORT: 9092   
     KAFKA_ZOOKEEPER_CONNECT: 172.22.12.20:2181,172.22.12.21:2181,172.22.12.22:2181   
    Bände:   
     - ./kafka/logs:/kafka

Es gibt nicht viel zu beachten. KAFKA_ZOOKEEPER_CONNECT ist korrekt mit der zk-Clusteradresse konfiguriert und die ADVERTISED-bezogene Konfiguration ist für den aktuellen Container.

influxdb

Zuflussdb:   
    Bild: influxdb:1.7   
    Neustart: immer   
    Containername: Influxdb   
    Häfen:   
     - „2003:2003“   
     - „8086:8086“   
     - „8089:8089“   
     - „8091:8091“   
    Bände:   
     – „./influxdb:/var/lib/influxdb“   
    Umfeld:   
     – INFLUXDB_GRAPHITE_ENABLED=true  

„./influxdb:/var/lib/influxdb“ ist die Datenverzeichnis-Einbindung und muss konfiguriert werden. INFLUXDB_GRAPHITE_ENABLED aktiviert die Graphitfunktion.

Einfache Bedienung von Influxdb:

  • docker exec -it influxdb zustrom
  • Datenbanken anzeigen
  • Datenbank XX erstellen
  • verwenden XX
  • INSERT CPU, Host = ServerA, Region = US_West Wert = 0,64
  • Wählen Sie "Host", "Region", "Wert" aus "CPU"

Mit Docker-Compose verbundene Vorgänge

docker-compose [-f <Dateiname>] up -d   
docker-compose [-f <dateiname>] down

zkui/kafdrop/grafana

Stellen Sie auf Maschine 23 diese drei Webschnittstellen bereit:

zkui:   
    Bild: maauso/zkui   
    Neustart: immer   
    Containername: zkui   
    Häfen:   
     -9090:9090   
    Umfeld:   
     ZKLIST: 172.22.12.20:2181,172.22.12.21:2181,172.22.12.22:2181   
   kafdrop:   
    Bild: obsidiandynamics/kafdrop:latest   
    Neustart: immer   
    Containername: Kafdrop   
    Häfen:   
     - "9000:9000"   
    Umfeld:   
     KAFKA_BROKERCONNECT: 172.22.12.20:9092,172.22.12.20:9092,172.22.12.20:9092   
   grafana:   
    Bild: grafana/grafana:master   
    Neustart: immer   
    Containername: Grafana   
    Häfen:   
     - "3000:3000"   
    Bände:   
     – „./grafana:/var/lib/grafana“ 

Da es sich um eine Webseite handelt, konfigurieren Sie einfach die entsprechende Serviceadresse und starten Sie sie.

Grafana muss mit einer Verzeichniseinbindung konfiguriert werden, hauptsächlich um benutzerdefinierte Datenquellen und Panelkonfigurationen usw. aufzuzeichnen. (chmod -R 777 grafana/ ist hier erforderlich)

Sturmcluster

Der Storm-Cluster besteht aus drei Teilen: Nimbus, Supervisor und UI

Nimbus ist der Masterknoten und Supervisor ist der Slaveknoten. Ersterer sendet Aufgaben an Zookeeper und letzterer erhält Aufgaben von Zookeeper. ui ist eine Webseite.

Stellen Sie drei Nimbus- und Supervisor-Knoten auf den Maschinen 20, 21 und 22 bereit. Es wird empfohlen, eine separate Docker-Compose-Skriptdatei zu erstellen und diese nach dem Start von Zookeeper auszuführen.

Das Docker-Compose-Skript sieht ungefähr so ​​aus:

Nimbus:
  Bild: Sturm:2.2.0
  Containername: nimbus1
  Befehl: Sturmnimbus
  Neustart: immer
  Hostname: nimbus1
  Häfen:
   -6627:6627
  Bände:
   – „./storm.yaml:/conf/storm.yaml“
   – „./nimbus/data:/data“
   – „./nimbus/logs:/logs“

 Aufsicht:
  Bild: Sturm:2.2.0
  Containername: Supervisor1
  Kommando: Sturmaufseher
  Hostname: Supervisor1
  hängt ab von:
   -Nimbus
  Links:
   - Heiligenschein: Heiligenschein
  Neustart: immer
  Bände:
   – „./storm.yaml:/conf/storm.yaml“
   – „./supervisor/data:/data“
   - „./supervisor/logs:/logs“

Nimbus, Supervisor und UI verwenden alle dasselbe Storm-Image, aber die Befehlsparameter sind beim Start unterschiedlich.

Der Hostname von Nimbus und Supervisor wird hier angegeben, da der Host bei der Registrierung bei Zookeeper standardmäßig die vom Docker-Container zufällig generierte UUID ist.

Wenn Nimbus und Supervisor neu gestartet werden, werden auch ihre Container-UUIDs zurückgesetzt, was zu Konflikten mit den bereits in Zookeeper gespeicherten UUIDs führt und einen Fehler verursacht.

Die Lösung im Internet lautet: 1. Löschen Sie nach dem Stoppen des Storm-Clusters den Storm-Knoten auf dem Zookeeper und starten Sie den Zookeeper + Storm-Cluster neu. 2. Erstellen Sie einen separaten zustandslosen Zookeeper für den Storm-Cluster

Die Lösung besteht hier darin, den Host anzugeben, wenn Nimbus und Supervisor registriert werden. Dieser ändert sich beim Neustart nicht

Beim Start müssen einige Umgebungsvariablen angegeben werden. Hier wird die Zuordnung der lokalen Konfigurationsdatei verwendet. Die storm.yaml-Konfiguration lautet wie folgt:

storm.zookeeper.servers: 
 - "172.22.12.20"
 - "172.22.12.21"
 - "172.22.12.22"
nimbus.seeds:
 - "nimbus1"
 - "nimbus2"
 - "nimbus3"
storm.log.dir: "/logs"
storm.local.dir: "/data"
storm.cluster.mode: verteilt

storm.zookeeper.servers ist die Zookeeper-Adresse und der Standardport ist 2181. nimbus.seeds ist die Adresse des Nimbus-Clusters, wo der in Docker-Compose angepasste Hostname verwendet wird.

Storm-ui kann die einzelne Instanz starten und die Docker-Compose-Konfiguration ist wie folgt:

Sturm-Benutzeroberfläche:
  Bild: Sturm:2.2.0
  Containername: Storm-UI
  Befehl: Sturm-UI
  hängt ab von:
   -Nimbus
  Links:
   - Heiligenschein: Heiligenschein
  Neustart: immer
  Häfen:
   8080: 8080
  Bände:
   – „./storm.yaml:/conf/storm.yaml“
   – „./ui/data:/data“
   – „./ui/logs:/logs“ 
  zusätzliche_hosts:
   - "nimbus1:172.22.12.20"
   - "nimbus2:172.22.12.21"
   - "nimbus3:172.22.12.22"
   - "Supervisor1:172.22.12.20"
   - "Supervisor2:172.22.12.21"
   - "Supervisor3:172.22.12.22"

Unter diesen ist extra_hosts die angepasste Hostzuordnung nach dem Start des Containers, sodass nach dem Start der UI-Seite der registrierte Alias-Host der tatsächlichen IP-Adresse entsprechen kann.

Beim Bereitstellen von Docker-Containern müssen Sie häufig die Konfigurationsdateien des Hosts dem Container zuordnen, damit die Konfiguration nach dem Neustart des Containers nicht zurückgesetzt wird.

Beispielsweise lautet die Storm-Konfiguration: - „./storm.yaml:/conf/storm.yaml“. Wenn jedoch nach der Zuordnung lokal keine storm.yaml im richtigen Format vorhanden ist, schlägt der Start fehl. Zusätzlich zum Herunterladen des Installationspakets von der offiziellen Website, um dessen Konfigurationsdatei abzurufen, können Sie zunächst einen temporären Container starten und dessen Konfigurationsdatei auf den Host kopieren.

docker run -d --name nimbus-tmp storm:2.2.0 storm nimbus

docker cp nimbus-tmp:/conf/storm.yaml lokaler Ordnerpfad/

Kanaleinsatz

Bevor Sie den Kanal bereitstellen, müssen Sie das MySQL konfigurieren, mit dem er verbunden ist:

[mysqld]
log-bin=mysql-bin # Binlog aktivieren
binlog-format=ROW # ROW-Modus auswählen server_id=1 # Die Konfiguration der MySQL-Replikation erfordert eine Definition. Wiederholen Sie die Slave-ID des Kanals nicht.

Die Docker-Compose-Konfiguration des Kanals ist wie folgt:

Kanal-Server:
  Bild: Kanal/Kanal-Server:v1.1.3
  Containername: Kanal-Server
  Häfen:
   - 11111:11111
  Umfeld:
   - canal.instance.mysql.slaveId=12
   - canal.auto.scan=false
   - canal.destinations=Datencloud
   - canal.instance.master.address=10.23.16.32:3307
   - canal.instance.dbBenutzername=root
   - canal.instance.dbPassword=chinaunicom@dengfy
   - canal.instance.filter.regex=river\\..*
  Bände:
   - ./canal-server/logs/:/admin/canal-server/logs/

Die Slave-ID muss sich von der in MySQL konfigurierten unterscheiden, „Destinations“ ist der benutzerdefinierte Instanzname und „canal.instance.filter.regex“ ist der zu überwachende Datenbanktabellenfilter.

Portainer-Bereitstellung

Portainer ist ein visuelles Verwaltungstool für Docker-Container. Es kann die Docker-Container der oben genannten Maschinen verwalten, Protokolle anzeigen, Startskripte ändern, Container stoppen usw.

Zuerst müssen Sie die Docker-API-Schnittstelle für jede Maschine öffnen:

1.vim /usr/lib/systemd/system/docker.service
Fügen Sie -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock zum Startelement ExecStart hinzu.
2. Starten Sie den Docker-Dienst neu systemctl daemon-reload systemctl restart docker

Stellen Sie den Portainer-Container auf einer der Maschinen bereit:

Träger:
  Bild: portainer/portainer:1.24.1
  Neustart: immer
  Containername: portainer_datacloud
  Häfen:
   - "8000:8000"
   - "9002:9000"
  Bände:
   – „./portainer/data:/data“
   – „/var/run/docker.sock:/var/run/docker.sock“

"/var/run/docker.sock:/var/run/docker.sock" Diese Zuordnungsbeziehung wird im Standalone-Modus verwendet. Wir verwenden Remote-API-Aufrufe, daher kann sie weggelassen werden.

Nachdem Sie IP:9002 geöffnet haben, registrieren Sie sich als Benutzer und melden Sie sich an. Gehen Sie zu Einstellungen > Endpunkte > Endpunkt hinzufügen > Docker auswählen.

Geben Sie die Ziel-IP:2375 in die Endpunkt-URL ein und fügen Sie die Ziel-IP in die öffentliche IP ein. Nach dem Absenden können Sie alle Containerinformationen sehen.

Dies ist das Ende dieses Artikels über die Implementierung der Docker-Compose-Bereitstellung des ZK+Kafka+Storm-Clusters. Weitere relevante Inhalte zum Docker-Compose-Bereitstellungscluster finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierter Prozess zum Erstellen eines Kafka-Clusters mit Docker-Containern
  • Implementierung von Docker zum Erstellen eines Zookeeper- und Kafka-Clusters
  • So erstellen Sie einen Kafka-Cluster mit Docker

<<:  Vue + Element realisiert Paging-Effekt

>>:  MySql legt die angegebenen Benutzerdatenbankansichtsabfrageberechtigungen fest

Artikel empfehlen

Alibaba Cloud Ubuntu 16.04 baut IPSec-Dienst auf

Einführung in IPSec IPSec (Internet Protocol Secu...

Beispiel für die Bereitstellung einer Laravel-Anwendung mit Docker

Das in diesem Artikel verwendete PHP-Basisimage i...

Docker-Compose-Schritte zum Konfigurieren der Spring-Umgebung

Vor Kurzem musste ich das Projekt für die Mitglie...

So implementieren Sie einen binären Suchbaum mit JavaScript

Eine der am häufigsten verwendeten und diskutiert...

Detaillierte Erklärung dieses Zeigeproblems in JavaScript

Vorwort Glauben Sie mir, solange Sie sich an die ...

Implementierung der mobilen Postcss-pxtorem-Anpassung

Führen Sie den Befehl aus, um das Plugin postcss-...

Zusammenfassung der Befehle zur Benutzerverwaltung im Linux-System

Benutzer- und Gruppenverwaltung 1. Grundlegende K...

Detailliertes Tutorial zur MySQL-Installation und -Konfiguration

Inhaltsverzeichnis Installationsfreie Version von...

Erste Schritte mit GDB unter Linux

Vorwort gdb ist ein sehr nützliches Debugging-Too...

Zusammenfassung der Unterschiede zwischen HTML, SHHTML und XHTML

Zum Beispiel: <u> Dies hat kein Endzeichen u...