Docker を使用した ElasticSearch:7.8.0 クラスターのインストールに関する詳細なチュートリアル

Docker を使用した ElasticSearch:7.8.0 クラスターのインストールに関する詳細なチュートリアル

ElasticSearch クラスターは、クラスターを構築するための動態請求的方式靜態配置文件をサポートします。

動的クラスター接続方法に関する公式ドキュメント: https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html

準備作業

公式ウェブサイトのパラメータの説明:
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html

下載elsticsearch 7.8.0

docker pull elasticsearch:7.8.0

elasticsearchクラスターを配置するためのネットワークes_netを作成します。

docker ネットワーク作成 --subnet=172.18.0.0/24 es_net

公式サイトの dockerFile ファイルにある WORKDIR /usr/share/elasticsearch の情報によると、elasticsearch のインストール場所は /usr/share/elasticsearch ディレクトリにあることがわかります。後続の操作を容易にするために、elasticsearch によって生成されたデータをホストにマップするデータ ボリュームを作成し、es がクラッシュしてデータが回復できなくなるのを防ぎます。

データボリュームの作成

dockerボリューム作成es_data01
dockerボリューム作成es_data02
dockerボリューム作成es_data03
#パブリック設定ファイルとプラグインの保存場所 docker volume create es_conf
docker ボリューム作成 es_plugins

データ、設定、プラグインをそれぞれ保存するための3つのyml設定ファイルを作成します。

ElasticSearch クラスターを動的に構築する (推奨)

つまり、ElasticSearch を起動し、ES に組み込まれた RestFul スタイルの操作を使用するだけで、クラスターの構築を完了できます。
dockerhub の公式の起動方法は、単一のノードを起動し、3 つの ElasticSearch ノードを個別に起動することです。

es01を開始

docker run -it -d --restart always -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 "discovery.type=シングルノード" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" エラスティックサーチ:7.8.0

es02を開始

docker run -it -d --restart always -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 "discovery.type=シングルノード" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" エラスティックサーチ:7.8.0

es03を開始

docker run -it -d --restart always -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 "discovery.type=シングルノード" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" エラスティックサーチ:7.8.0

PUTメソッドを通じて、Linux curlコマンドを使用してes02とes03を操作できます。

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
 "持続的" : {
 「クラスター」: {
 「リモート」:{
 "リーダー" : {
  「種子」: [
  「127.0.0.1:9300」 
  ]
 }
 }
 }
 }
}
'

永続的な更新

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
 "持続的" : {
 "indices.recovery.max_bytes_per_sec" : "50mb"
 }
}
'

一時的な更新

curl -X PUT "localhost:9200/_cluster/settings?flat_settings=true&pretty" -H 'コンテンツタイプ: application/json' -d'
{
 「一時的」: {
 "indices.recovery.max_bytes_per_sec" : "20mb"
 }
}
'

一時的な構成コンテンツを削除する

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
 「一時的」: {
 "indices.recovery.max_bytes_per_sec" : null
 }
}
'

すべての一時設定を削除する

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
 「一時的」: {
 "indices.recovery.*" : null
 }
}
'

ElasticSearchは静的構成ファイルを通じてクラスターを起動します

失敗の原因は、コンテナを起動するときのパラメータが少ないことにあるはずです。
公式ウェブサイトのドキュメントによると、将来のバージョンではdiscovery.zen.ping.unicast.hostsは使用されなくなり、discovery.seed_hostsになるとのこと。

es-node1ノードの設定ファイル情報

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

コメント行のesクラスタ通信のホストIPとポートアドレスを変更してください。

クラスター名: elasticsearch-cluster
ノード名: es-node1
ネットワーク.bind_host: 0.0.0.0
network.publish_host: 192.168.117.231 #dockerホストのIPに変更
http.port: 9200 #これはコンテナ内にあるため、変更する必要はありません transport.tcp.port: 9300 #これはコンテナ内にあるため、変更する必要はありません http.cors.enabled: true
http.cors.allow-origin: "*"
ノードマスター: true 
ノードデータ: true 
検出シードホスト: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"] 
discovery.zen.最小マスターノード数: 2
インデックス.クエリ.bool.max_clause_count: 10240
#ホストの異なるポートを使用してビルドし、dockerコンテナを起動するときに-pを使用してマッピングポートを指定します

上記の構成ファイルから、マッピングする必要があるポートは 9300、9301、および 9302 であることがわかります。これらのポートはクラスター通信に使用され、3 つのノード バインディング ポートは -p 9300:9300、-p 9301:9300、および -p 9302:9300 です。
同時に、-p 9200:9200、-p 9201:9200、-p 9202:9200の使用を開始できます。


テーブルを作成します。

ノードホストポート1にバインドホストポート2にバインド
es-ノード1 9200 9300
es-ノード2 9201 9301
es-ノード3 9202 9301
効果外部サービスを提供するポートes1 と es3 クラスター間の通信用のポート
つまり、ホスト (192.168.117.231) のポート 9200 ~ 9202 および 9300 ~ 9302 が es クラスターによって使用されます。


es-node2ノードの設定ファイル情報

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

es-node1との違いはノード名が変更されていることです

クラスター名: elasticsearch-cluster
ノード名: es-node2
ネットワーク.bind_host: 0.0.0.0
network.publish_host: 192.168.117.231 #dockerホストのIPに変更
http.port: 9200 #これはコンテナ内にあるため、変更する必要はありません transport.tcp.port: 9300 #これはコンテナ内にあるため、変更する必要はありません http.cors.enabled: true
http.cors.allow-origin: "*"
ノードマスター: true 
ノードデータ: true 
検出シードホスト: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"]
discovery.zen.最小マスターノード数: 2
インデックス.クエリ.bool.max_clause_count: 10240
#ホストの異なるポートを使用してビルドし、dockerコンテナを起動するときに-pを使用してマッピングポートを指定します

es-node3ノードの設定ファイル情報

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

es-node1との違いはノード名が変更されていることです

クラスター名: elasticsearch-cluster
ノード名: es-node3
ネットワーク.bind_host: 0.0.0.0
network.publish_host: 192.168.117.231 #dockerホストのIPに変更
http.port: 9200 #これはコンテナ内にあるため、変更する必要はありません transport.tcp.port: 9300 #これはコンテナ内にあるため、変更する必要はありません http.cors.enabled: true
http.cors.allow-origin: "*"
ノードマスター: true 
ノードデータ: true 
検出シードホスト: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"]
discovery.zen.最小マスターノード数: 2
インデックス.クエリ.bool.max_clause_count: 10240
#ホストの異なるポートを使用してビルドし、dockerコンテナを起動するときに-pを使用してマッピングポートを指定します

クラスターを1つずつ起動します

es-node1 起動コマンド、docker プロセス エイリアス es01

使用されるネットワークは上記で作成したネットワークカードes_netであり、指定されたノードの内部ネットワークIP 172.18.0.100はes_netと同じネットワークセグメント内にある必要があります。

docker run -it -d --restart always -p 9200:9200 -p 9300:9300 \
--name es01 --network=es_net --ip=172.18.0.100 \
-v es_data01:/usr/share/elasticsearch/data \
: ディレクトリ /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" エラスティックサーチ:7.8.0

ES_JAVA_OPTSは、esの起動時にメモリ領域を過度に占有しないように、esが使用するメモリを指定します。
--restart always データボリュームのマッピングは省略されます。注意すべき点は、設定ファイル es01.yml が、内部 es の起動時に使用される設定ファイルにマッピングされることです。


es-node2 起動コマンド

docker run -it -d --restart always -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" エラスティックサーチ:7.8.0

es-node3 起動コマンド

docker run -it -d --restart always -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" エラスティックサーチ:7.8.0

これで、Docker を使用した ElasticSearch:7.8.0 クラスターのインストールに関するこの記事は終了です。Docker を使用した ElasticSearch クラスターのインストールの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ElasticSearch 6.4.0 クラスタ構築の詳細な説明
  • ElasticSearch のインデックス断片化の合理的な割り当て原則
  • Dockerを使用してElasticsearchクラスターを素早くデプロイする方法
  • Elasticsearch のクラスター構築とデータシャーディングプロセスの詳細な説明

<<:  GET POSTの違い

>>:  MySQLデュアルマスター(マスターマスター)アーキテクチャ構成ソリューション

推薦する

vue keepAlive キャッシュクリア問題事例の詳細な説明

Keepalive は Vue プロジェクトでのキャッシュによく使用され、基本的な要件を満たすのに非...

初心者向けの MySQL のインストール方法 (効果が実証済み)

1. ソフトウェアのダウンロードMySQL のダウンロードとインストール:公式サイトのダウンロード...

Vueページジャンプの実装方法

1. this.$router.push() 1. ビュー <テンプレート> <d...

要素テーブルの行と列のドラッグを実装する例

要素 ui テーブルにはドラッグ アンド ドロップによる並べ替え機能が組み込まれておらず、サードパー...

MySQLデータベースのbinlogクリーンアップコマンドの詳細な説明

概要今日は主に、MySQL データベースから binlog ログを正しく削除する方法を紹介します。ロ...

MyCat を使用して Linux で MySQL マスター/スレーブの読み取り/書き込み分離を実装する方法

目次Linux - MyCat を使用して MySQL マスター スレーブの読み取り書き込み分離を実...

Win10にMySQL8圧縮パッケージ版をインストールするチュートリアル

1 公式サイトからMySQL8をダウンロードしてインストールするMySQL8 ダウンロードアドレスこ...

Dockerは公式Redisイメージをインストールし、パスワード認証を有効にします

参考: Docker 公式 Redis ドキュメント1. 特別なバージョン要件がある場合は、redi...

MySQL はデータベースを動的に更新します スクリプト例の説明

具体的なupgradeスクリプトは次のとおりです。インデックスを動的に削除する アップグレードが存在...

Windows 10 での MySQL 8.0.19 のインストールと設定のチュートリアル

来学期にMySQLを勉強します。事前に自宅で練習していませんでした。インストールに時間がかかるとは思...

HTMLにリンクを挿入する方法

各 Web ページには、URL () で識別されるアドレスがあります。通常、Web サイト内でリンク...

Idea で Docker を使用して SpringBoot プロジェクトをデプロイする詳細な手順

序文プロジェクト要件: Dockeridea に Docker プラグインをインストールし、Dock...

入力できない無効な値はアクションレイヤーに渡すことができません

フォームを入力不可にしたい場合は、フォームを次のように設定します。コードをコピーコードは次のとおりで...

Nginx の動的および静的分離実装ケースのコード分析

静的と動的の分離動的リクエストと静的リクエストはミドルウェアを通じて分離され、不要なリクエストの消費...

MySQL におけるユニーク制約と NULL の詳細な説明

序文説明を簡略化するために以前に設定した要件は、他のグループから MQ メッセージを受信し、データベ...