So stellen Sie mit Docker schnell einen Elasticsearch-Cluster bereit

So stellen Sie mit Docker schnell einen Elasticsearch-Cluster bereit

In diesem Artikel werden Docker Container (orchestriert mit docker-compose ) verwendet, um schnell Elasticsearch 集群bereitzustellen, der in einer Entwicklungsumgebung (einzelne Maschine, mehrere Instanzen) oder einer Produktionsumgebung verwendet werden kann.

Beachten Sie, dass die Version 6.x den Parameter -Epath.config nicht mehr verwenden kann, um den Ladeort der Konfigurationsdatei anzugeben. In der Dokumentation heißt es:

Bei den Archivverteilungen ist der Speicherort des Konfigurationsverzeichnisses standardmäßig $ES_HOME/config . Der Speicherort des Verzeichnisses >config kann über die Umgebungsvariable ES_PATH_CONF wie folgt can be changed :
ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch
Alternativ können Sie die Umgebungsvariable ES_PATH_CONF über die Kommandozeile oder über Ihr Shell-Profil exportieren.

Das heißt, es wird durch die Umgebungsvariable ES_PATH_CONF (offizielles Dokument) festgelegt. Studenten, die mehrere Instanzen auf einer einzigen Maschine bereitstellen und keine Container verwenden, sollten mehr darauf achten.

Vorbereitung

Installieren Sie docker und docker-compose

Hier empfehlen wir die Verwendung von Daocloud, um die Installation zu beschleunigen:

#Docker
curl -sSL https://get.daocloud.io/docker | sh

#docker-komponieren
locke -L \
https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` \
> /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

#Installationsergebnisse anzeigen docker-compose -v

Datenverzeichnis

#Daten-/Protokollverzeichnis erstellen Hier stellen wir 3 Knoten bereit mkdir /opt/elasticsearch/data/{node0,nod1,node2} -p
mkdir /opt/elasticsearch/logs/{node0,nod1,node2} -p
cd /opt/elasticsearch
#Berechtigungen Ich bin auch verwirrt. Das Erteilen von Berechtigungen funktioniert auch nicht, also verwende ich einfach 0777. chmod 0777 data/* -R && chmod 0777 logs/* -R

#Verhindern Sie, dass JVM einen Fehler meldet echo vm.max_map_count=262144 >> /etc/sysctl.conf
sysctl -p

Docker-Compse-Orchestrierungsdienst

Erstellen einer Orchestrierungsdatei

vim docker-compose.yml

Parameter Beschreibung

- cluster.name=elasticsearch-cluster

Clustername

- node.name=node0
- node.master=true
- node.data=true

Knotenname, ob er als Masterknoten verwendet werden kann und ob er Daten speichert

- bootstrap.memory_lock=true

Sperren Sie die physische Speicheradresse des Prozesses, um ein Auslagern (Auslagern) zu vermeiden und die Leistung zu verbessern

- http.cors.enabled=true
- http.cors.allow-origin=*

Aktivieren Sie cors, um das Head-Plugin zu verwenden

- "ES_JAVA_OPTS=-Xms512m -Xmx512m"

Konfiguration der JVM-Speichergröße

- "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"
- "discovery.zen.minimum_master_nodes=2"

Da Versionen nach 5.2.1 kein Multicast unterstützen, müssen Sie für節點發現und failover die tcp Datenaustauschadresse jedes Knotens im Cluster manuell angeben. Der Standardport ist 9300 Wenn andere Ports festgelegt sind, müssen diese separat angegeben werden. Hier verwenden wir direkt die Containerkommunikation, oder wir können 9300 jedes Knotens dem Host zuordnen und über den Netzwerkport kommunizieren.

Legen Sie failover quorum = nodes/2 + 1

Natürlich können Sie auch Ihre eigene Konfigurationsdatei mounten. Die Konfigurationsdatei ES Images ist /usr/share/elasticsearch/config/elasticsearch.yml und wird wie folgt gemountet:

Bände:
 – Pfad/zu/local/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro

docker-compose.yml

Version: '3'
Leistungen:
 elasticsearch_n0:
  Bild: elasticsearch:6.6.2
  Containername: elasticsearch_n0
  privilegiert: wahr
  Umfeld:
   - cluster.name=elasticsearch-cluster
   - Knoten.name=Knoten0
   - node.master=true
   - node.data=true
   - bootstrap.memory_lock=true
   - http.cors.enabled=true
   - http.cors.allow-origin=*
   – „ES_JAVA_OPTS=-Xms512m -Xmx512m“
   - „discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2“
   - „discovery.zen.minimum_master_nodes=2“
  uGrenzwerte:
   Speichersperre:
    weich: -1
    schwer: -1
  Bände:
   - ./data/node0:/usr/share/elasticsearch/data
   - ./logs/node0:/usr/share/elasticsearch/logs
  Häfen:
   9200:9200
 elasticsearch_n1:
  Bild: elasticsearch:6.6.2
  Containername: elasticsearch_n1
  privilegiert: wahr
  Umfeld:
   - cluster.name=elasticsearch-cluster
   - Knoten.name=Knoten1
   - node.master=true
   - node.data=true
   - bootstrap.memory_lock=true
   - http.cors.enabled=true
   - http.cors.allow-origin=*
   – „ES_JAVA_OPTS=-Xms512m -Xmx512m“
   - „discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2“
   - „discovery.zen.minimum_master_nodes=2“
  uGrenzwerte:
   Speichersperre:
    weich: -1
    schwer: -1
  Bände:
   - ./data/node1:/usr/share/elasticsearch/data
   - ./logs/node1:/usr/share/elasticsearch/logs
  Häfen:
   9201:9200
 elasticsearch_n2:
  Bild: elasticsearch:6.6.2
  Containername: elasticsearch_n2
  privilegiert: wahr
  Umfeld:
   - cluster.name=elasticsearch-cluster
   - Knotenname=Knoten2
   - node.master=true
   - node.data=true
   - bootstrap.memory_lock=true
   - http.cors.enabled=true
   - http.cors.allow-origin=*
   – „ES_JAVA_OPTS=-Xms512m -Xmx512m“
   - „discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2“
   - „discovery.zen.minimum_master_nodes=2“
  uGrenzwerte:
   Speichersperre:
    weich: -1
    schwer: -1
  Bände:
   - ./data/node2:/usr/share/elasticsearch/data
   - ./logs/node2:/usr/share/elasticsearch/logs
  Häfen:
   - 9202:9200

Hier öffnen wir die Ports 9200/9201/9202 des Hosts jeweils als http服務端口für node0/node1/node2 , und tcp數據傳輸jeder Instanz verwendet den Standardport 9300 , um die Kommunikation über den Container zu verwalten.

Wenn eine Bereitstellung auf mehreren Rechnern erforderlich ist, ordnen Sie den ES transport.tcp.port: 9300 dem Port xxxx des Host-Rechners zu und tragen Sie die Adresse jedes Host-Agenten discovery.zen.ping.unicast.hosts ein:

#Beispielsweise ist einer der Hosts 192.168.1.100
  ...
  – „discovery.zen.ping.unicast.hosts=192.168.1.100:9300,192.168.1.101:9300,192.168.1.102:9300“
  ...
Häfen:
 ...
 9300:9300

Erstellen und Starten des Dienstes

[root@localhost elasticsearch]# docker-compose up -d
[root@localhost elasticsearch]# docker-compose ps
   Name Befehl Status Ports       
------------------------------------------------------------------------------------------------
elasticsearch_n0 /usr/local/bin/docker-entr ... Bis 0.0.0.0:9200->9200/tcp, 9300/tcp
elasticsearch_n1 /usr/local/bin/docker-entr ... Bis 0.0.0.0:9201->9200/tcp, 9300/tcp
elasticsearch_n2 /usr/local/bin/docker-entr ... Bis 0.0.0.0:9202->9200/tcp, 9300/tcp

#Beim Start konnten keine Fehler angezeigt werden [root@localhost elasticsearch]# docker-compose logs
#Es handelt sich höchstens um einige Probleme mit den Zugriffsrechten/der JVM-Einstellung vm.max_map_count

Überprüfen des Clusterstatus

192.168.20.6 是我的服務器地址

Besuchen Sie http://192.168.20.6:9200/_cat/nodes?v , um den Clusterstatus anzuzeigen:

IP Heap.Prozent RAM.Prozent CPU-Last_1m Last_5m Last_15m Knoten.Rolle Mastername
172.25.0.3 36 98 79 3,43 0,88 0,54 mdi * Knoten0
172.25.0.2 48 98 79 3,43 0,88 0,54 mdi - Knoten2
172.25.0.4 42 98 51 3,43 0,88 0,54 mdi - Knoten1

Failover überprüfen

Überprüfen des Status über die Clusterschnittstelle

Simulieren Sie, dass der Masterknoten offline geht. Der Cluster beginnt mit der Auswahl eines neuen Masterknotens und migriert und teilt die Daten neu auf.

[root@localhost elasticsearch]# docker-compose stop elasticsearch_n0
elasticsearch_n0 wird gestoppt ... fertig

Clusterstatus (beachten Sie, dass der ursprüngliche Masterknoten nach der Änderung des HTTP-Ports offline ist). Der ausgefallene Knoten befindet sich noch im Cluster und wird nach einer Wartezeit ohne Wiederherstellung entfernt.

IP Heap.Prozent RAM.Prozent CPU-Last_1m Last_5m Last_15m Knoten.Rolle Mastername
172.25.0.2 57 84 5 0,46 0,65 0,50 mdi - Knoten2
172.25.0.4 49 84 5 0,46 0,65 0,50 mdi * Knoten1
172.25.0.3 mdi-Knoten0

Warte eine Weile

IP Heap.Prozent RAM.Prozent CPU-Last_1m Last_5m Last_15m Knoten.Rolle Mastername
172.25.0.2 44 84 1 0,10 0,33 0,40 mdi - Knoten2
172.25.0.4 34 84 1 0,10 0,33 0,40 mdi * Knoten1

Knoten node0 wiederherstellen

[root@localhost elasticsearch]# docker-compose start elasticsearch_n0
elasticsearch_n0 wird gestartet ... fertig

Warte eine Weile

IP Heap.Prozent RAM.Prozent CPU-Last_1m Last_5m Last_15m Knoten.Rolle Mastername
172.25.0.2 52 98 25 0,67 0,43 0,43 mdi - Knoten2
172.25.0.4 43 98 25 0,67 0,43 0,43 mdi * Knoten1
172.25.0.3 40 98 46 0,67 0,43 0,43 mdi - Knoten0

Beobachten mit Head-Plug-in

git-Klon git://github.com/mobz/elasticsearch-head.git
CD Elasticsearch-Kopf
npm installieren
npm ausführen starten

Das Cluster-Statusdiagramm erleichtert die Übersicht über den Ablauf der automatischen Datenmigration

1. Die normalen Daten des Clusters werden sicher auf 3 Knoten verteilt

2. Offline-Knoten1-Masterknotencluster beginnt mit der Datenmigration

Migrieren

Migration abgeschlossen

3. Knoten1 wiederherstellen

Fragenhinweis

Elasticsearch-Wasserzeichen

Nach der Bereitstellung wurde beim Erstellen des Index festgestellt, dass sich einige Shards im Status „Unsigned“ befanden. Dies lag an den Einschränkungen des Elasticsearch-Wasserzeichens: niedrig, hoch, Flood_Stage. Standardmäßig wird ein Alarm ausgegeben, wenn die Festplattennutzungsrate über 85% liegt. Für die Entwicklung ist es besser, ihn manuell auszuschalten. Die Daten werden auf jeden Knoten aufgeteilt und die Produktion trifft ihre eigenen Entscheidungen.

curl -X PUT http://192.168.20.6:9201/_cluster/settings \
-H 'Inhaltstyp':'application/json' \
-d '{"transient":{"cluster.routing.allocation.disk.threshold_enabled": false}}'

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Clusterkonstruktion in ElasticSearch 6.4.0
  • ElasticSearch vernünftige Zuweisung des Indexfragmentierungsprinzips
  • Detailliertes Tutorial zur Installation des ElasticSearch:7.8.0-Clusters mit Docker
  • Detaillierte Erläuterung der Clusterkonstruktion und des Daten-Sharding-Prozesses von Elasticsearch

<<:  Detaillierte Erläuterung des Implementierungsprinzips der bidirektionalen Datenbindung von Vue2.0/3.0

>>:  Lösung für das Flashback-Problem nach der Eingabe des Passworts in der MySQL-Datenbank

Artikel empfehlen

JavaScript realisiert die Generierung und Überprüfung von Zufallscodes

Die Generierung und Überprüfung von Zufallscodes ...

So erzielen Sie mit CSS einen Daten-Hotspot-Effekt

Die Wirkung ist wie folgt: analysieren 1. Hier se...

Eine kurze Zusammenfassung aller Kapselungsmethoden in Vue

Inhaltsverzeichnis 1. Kapselungs-API 2. Globale T...

So optimieren Sie den Logikbeurteilungscode in JavaScript

Vorwort Zu den logischen Urteilsaussagen, die wir...

CSS3-Countdown-Effekt

Ergebnisse erzielen Implementierungscode html <...

Wertschätzung des dezenten und eleganten Webdesigns in Schwarz, Weiß und Grau

Unter den klassischen Farbkombinationen kann wohl...

Verwendung von Linux-Netzwerkkonfigurationstools

Dieser Artikel stellt RHEL8-Netzwerkdienste und N...

JavaScript-Closures erklärt

Inhaltsverzeichnis 1. Was ist ein Abschluss? 1.2 ...