Detailliertes Tutorial zur Installation des ElasticSearch:7.8.0-Clusters mit Docker

Detailliertes Tutorial zur Installation des ElasticSearch:7.8.0-Clusters mit Docker

Der ElasticSearch-Cluster unterstützt動態請求的方式und靜態配置文件zum Erstellen des Clusters

Offizielle Dokumentation zu dynamischen Cluster-Verbindungsmethoden: https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html

Vorarbeit

Beschreibung der Parameter auf der offiziellen Website:
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html

下載elsticsearch 7.8.0

Docker-Pull Elasticsearch:7.8.0

Erstellen Sie ein Netzwerk es_net, um den Elasticsearch-Cluster zu platzieren

Docker-Netzwerk erstellen --subnet=172.18.0.0/24 es_net

Gemäß den Informationen WORKDIR /usr/share/elasticsearch in der DockerFile-Datei auf der offiziellen Website können wir erkennen, dass sich der Installationsort von Elasticsearch im Verzeichnis /usr/share/elasticsearch befindet. Um nachfolgende Vorgänge zu erleichtern, erstellen Sie ein Datenvolumen, um die von Elasticsearch generierten Daten dem Host zuzuordnen, um zu verhindern, dass ES abstürzt und Daten nicht wiederhergestellt werden können.

Erstellen eines Datenvolumens

Docker-Volume erstellen es_data01
Docker-Volume erstellen es_data02
Docker-Volume erstellen es_data03
#Öffentliche Konfigurationsdateien und Plugin-Speicherort Docker-Volume erstellen es_conf
Docker-Volume erstellt es_plugins

Erstellen Sie drei YML-Konfigurationsdateien zum Speichern von Daten, Konfigurationen und Plug-Ins

Dynamischer Aufbau eines ElasticSearch-Clusters (empfohlen)

Dies bedeutet, dass Sie den Clusteraufbau abschließen können, indem Sie einfach ElasticSearch starten und dann die in ES integrierten Operationen im RestFul-Stil verwenden.
Die offizielle Startmethode in Dockerhub besteht darin, einen einzelnen Knoten und drei ElasticSearch-Knoten separat zu starten.

Starten Sie es01

docker run -it -d --restart immer -p 9201:9200 -p 9301:9300 \
--name es01 --network=es_net --ip=172.18.0.101 \
-v es_data01:/usr/share/elasticsearch/data \
-v es_conf:/usr/share/elasticsearch/conf \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e "Entdeckung.Typ=Einzelknoten" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

Starten Sie es02

docker run -it -d --restart immer -p 9202:9200 -p 9302:9300 \
--name es02 --network=es_net --ip=172.18.0.102 \
-v es_data02:/usr/share/elasticsearch/data \
-v es_conf:/usr/share/elasticsearch/conf \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e "Entdeckung.Typ=Einzelknoten" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

Starten Sie es03

docker run -it -d --restart immer -p 9203:9200 -p 9303:9300 \
--name es03 --network=es_net --ip=172.18.0.103 \
-v es_data03:/usr/share/elasticsearch/data \
-v es_conf:/usr/share/elasticsearch/conf \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e "Entdeckung.Typ=Einzelknoten" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

Über die PUT-Methode können Sie den Linux-Curl-Befehl verwenden, um auf es02 und es03 zu arbeiten

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Inhaltstyp: application/json' -d'
{
 "hartnäckig" : {
 "Cluster": {
 "Fernbedienung" : {
 "Führer" : {
  "Samen" : [
  „127.0.0.1:9300“ 
  ]
 }
 }
 }
 }
}
'

Persistentes Update

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Inhaltstyp: application/json' -d'
{
 "hartnäckig" : {
 "indices.recovery.max_bytes_per_sec" : "50 MB"
 }
}
'

Transiente aktualisieren

curl -X PUT "localhost:9200/_cluster/settings?flat_settings=true&pretty" -H 'Inhaltstyp: application/json' -d'
{
 "vorübergehend" : {
 "indices.recovery.max_bytes_per_sec": "20 MB"
 }
}
'

Löschen vorübergehender Konfigurationsinhalte

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Inhaltstyp: application/json' -d'
{
 "vorübergehend" : {
 "indices.recovery.max_bytes_per_sec" : null
 }
}
'

Alle vorübergehenden Einstellungen entfernen

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Inhaltstyp: application/json' -d'
{
 "vorübergehend" : {
 "indices.recovery.*" : null
 }
}
'

ElasticSearch startet den Cluster über eine statische Konfigurationsdatei

Der Grund für den Fehler dürfte darin liegen, dass beim Starten des Containers zu wenig Parameter zur Verfügung stehen.
Im offiziellen Website-Dokument heißt es, dass zukünftige Versionen discovery.zen.ping.unicast.hosts nicht mehr verwenden werden und stattdessen discovery.seed_hosts verwenden werden.

Konfigurationsdateiinformationen des Knotens es-node1

vim /var/lib/docker/volumes/es_conf/_data/es01.yml

Bitte ändern Sie die Host-IP und die Portadresse der ES-Clusterkommunikation in der Kommentarzeile

Clustername: Elasticsearch-Cluster
Knotenname: es-node1
Netzwerk.Bind_Host: 0.0.0.0
network.publish_host: 192.168.117.231 #Ändern Sie die IP des Docker-Hosts
http.port: 9200 #Dies befindet sich innerhalb des Containers, also muss es nicht geändert werden transport.tcp.port: 9300 #Dies befindet sich innerhalb des Containers, also muss es nicht geändert werden http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: wahr 
node.data: wahr 
Entdeckung.seed_hosts: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"] 
Entdeckung.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
#Verwenden Sie zum Erstellen unterschiedliche Ports eines Hosts und geben Sie beim Starten des Docker-Containers den Mapping-Port über -p an

Aus der obigen Konfigurationsdatei können wir ersehen, dass die Ports 9300, 9301 und 9302 zugeordnet werden müssen. Diese Ports werden für die Clusterkommunikation verwendet, d. h. die drei Knotenbindungsports sind -p 9300:9300, -p 9301:9300 und -p 9302:9300.
Gleichzeitig können wir die Verwendung von -p 9200:9200, -p 9201:9200, -p 9202:9200 starten.


Erstellen Sie eine Tabelle:

Knoten An Host-Port 1 binden An Host-Port 2 binden
es-node1 9200 9300
es-node2 9201 9301
es-node3 9202 9301
Wirkung Häfen, die externe Dienste anbieten Der Port für die Kommunikation zwischen es1- und es3-Clustern
Das heißt, die Ports 9200-9202 und 9300-9302 des Hosts (192.168.117.231) werden vom es-Cluster verwendet.


Konfigurationsdateiinformationen des Knotens es-node2

vim /var/lib/docker/volumes/es_conf/_data/es02.yml

Der Unterschied zu es-node1 besteht darin, dass der Knotenname geändert wird

Clustername: Elasticsearch-Cluster
Knotenname: es-node2
Netzwerk.Bind_Host: 0.0.0.0
network.publish_host: 192.168.117.231 #Ändern Sie die IP des Docker-Hosts
http.port: 9200 #Dies befindet sich innerhalb des Containers, also muss es nicht geändert werden transport.tcp.port: 9300 #Dies befindet sich innerhalb des Containers, also muss es nicht geändert werden http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: wahr 
node.data: wahr 
Entdeckung.seed_hosts: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"]
Entdeckung.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
#Verwenden Sie zum Erstellen unterschiedliche Ports eines Hosts und geben Sie beim Starten des Docker-Containers den Mapping-Port über -p an

Konfigurationsdateiinformationen des Knotens es-node3

vim /var/lib/docker/volumes/es_conf/_data/es02.yml

Der Unterschied zu es-node1 besteht darin, dass der Knotenname geändert wird

Clustername: Elasticsearch-Cluster
Knotenname: es-node3
Netzwerk.Bind_Host: 0.0.0.0
network.publish_host: 192.168.117.231 #Ändern Sie die IP des Docker-Hosts
http.port: 9200 #Dies befindet sich innerhalb des Containers, also muss es nicht geändert werden transport.tcp.port: 9300 #Dies befindet sich innerhalb des Containers, also muss es nicht geändert werden http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: wahr 
node.data: wahr 
Entdeckung.seed_hosts: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"]
Entdeckung.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
#Verwenden Sie zum Erstellen unterschiedliche Ports eines Hosts und geben Sie beim Starten des Docker-Containers den Mapping-Port über -p an

Starten Sie die Cluster nacheinander

Startbefehl es-node1, Docker-Prozessalias es01

Das verwendete Netzwerk ist die oben erstellte Netzwerkkarte es_net, und die interne Netzwerk-IP 172.18.0.100 des angegebenen Knotens muss sich im selben Netzwerksegment wie es_net befinden

docker run -it -d --restart immer -p 9200:9200 -p 9300:9300 \
--name es01 --network=es_net --ip=172.18.0.100 \
-v es_data01:/usr/share/elasticsearch/data \
-v /var/lib/docker/volumes/es_conf/_data/es01.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

ES_JAVA_OPTS gibt den von es verwendeten Speicher an, um zu verhindern, dass beim Starten von es zu viel Speicherplatz beansprucht wird.
--restart always Das Datenträgermapping wird weggelassen. Zu beachten ist lediglich, dass die Konfigurationsdatei es01.yml auf die Konfigurationsdatei gemappt wird, die beim Start des internen es verwendet wird.


Startbefehl „es-node2“

docker run -it -d --restart immer -p 9201:9200 -p 9301:9300 \
--name es02 --network=es_net --ip=172.18.0.101 \
-v es_data02:/usr/share/elasticsearch/data \
-v /var/lib/docker/volumes/es_conf/_data/es02.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

Startbefehl „es-node3“

docker run -it -d --restart immer -p 9202:9200 -p 9302:9300 \
--name es03 --network=es_net --ip=172.18.0.102 \
-v es_data03:/usr/share/elasticsearch/data \
-v /var/lib/docker/volumes/es_conf/_data/es03.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

Dies ist das Ende dieses Artikels zur Installation des ElasticSearch:7.8.0-Clusters mit Docker. Weitere Informationen zur Installation des ElasticSearch-Clusters mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Clusterkonstruktion in ElasticSearch 6.4.0
  • ElasticSearch vernünftige Zuweisung des Indexfragmentierungsprinzips
  • So stellen Sie mit Docker schnell einen Elasticsearch-Cluster bereit
  • Detaillierte Erläuterung der Clusterkonstruktion und des Daten-Sharding-Prozesses von Elasticsearch

<<:  GET POST Unterschiede

>>:  Konfigurationslösung für die MySQL Dual-Master-Architektur (Master-Master)

Artikel empfehlen

So verwenden Sie Vuex in einem Vue-Projekt

Inhaltsverzeichnis Was ist Vuex? Vuex-Nutzungszyk...

Detaillierter Vergleich von Ember.js und Vue.js

Inhaltsverzeichnis Überblick Warum ein Framework ...

Reines js, um einen Schreibmaschineneffekt zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

WeChat Mini-Programm: Position des Videofeuers zufällig

In diesem Artikel wird der spezifische Code zur z...

MySQL 4-Methoden zum Importieren von Daten

1. MySQL-Befehl importieren Die Importsyntax des ...

Eine kurze Diskussion über Schreibregeln für Docker Compose

Dieser Artikel stellt nichts im Zusammenhang mit ...

Ein Artikel zum Verständnis der Verwendung von Proxys in JavaScript

Inhaltsverzeichnis Was ist ein Agent Grundkenntni...

Node erstellt schnell die Backend-Implementierungsschritte

1. Installieren Sie zuerst Node, Express und Expr...

JavaScript Canvas zeichnet dynamische Drahtgittereffekte

In diesem Artikel wird der spezifische Code des d...

MySQL-Cursor-Prinzip und Analyse von Anwendungsbeispielen

Dieser Artikel erläutert anhand von Beispielen di...

Detaillierte Erklärung des Unterschieds zwischen Tags und Elementen in HTML

Ich glaube, dass es vielen Freunden, die sich mit ...

Native JavaScript-Implementierung des Fortschrittsbalkens

Der spezifische Code für JavaScript zur Implement...