Dockerを使用してElasticsearchクラスターを素早くデプロイする方法

Dockerを使用してElasticsearchクラスターを素早くデプロイする方法

この記事では、 Dockerコンテナ ( docker-composeを使用してオーケストレーション) を使用して、開発環境 (単一マシンの複数インスタンス) または実稼働環境で使用できるElasticsearch 集群迅速にデプロイします。

6.xバージョンでは、 -Epath.configパラメータを使用して構成ファイルの読み込み場所を指定できなくなりました。ドキュメントには次のように記載されています。

アーカイブ配布の場合、config ディレクトリの場所はデフォルトで$ES_HOME/configになります。config ディレクトリの場所は、次のようにES_PATH_CONF環境変数を使用してcan be changed
ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch
あるいは、コマンド ラインまたはシェル プロファイル経由で ES_PATH_CONF 環境変数をエクスポートすることもできます。

つまり、環境変数ES_PATH_CONF (公式ドキュメント) によって設定されます。1 台のマシンに複数のインスタンスを展開し、コンテナーを使用しない学生は、さらに注意する必要があります。

準備

dockerdocker-composeをインストールする

ここでは、インストールを高速化するために daocloud の使用を推奨します。

#ドッカー
curl -sSL https://get.daocloud.io/docker | sh

#docker-compose
カール -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

#インストール結果を表示する docker-compose -v

データディレクトリ

#データ/ログディレクトリを作成する ここでは3つのノードをデプロイします mkdir /opt/elasticsearch/data/{node0,nod1,node2} -p
mkdir /opt/elasticsearch/logs/{node0,nod1,node2} -p
cd /opt/elasticsearch
#パーミッション 私も混乱しています。特権を与えてもうまくいかないので、0777 を使用します。chmod 0777 data/* -R && chmod 0777 logs/* -R

#JVM がエラーを報告しないようにする echo vm.max_map_count=262144 >> /etc/sysctl.conf
sysctl -p

docker-comse オーケストレーション サービス

オーケストレーションファイルを作成する

vim docker-compose.yml

パラメータの説明

- cluster.name=elasticsearch-cluster

クラスター名

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

ノード名、マスターノードとして使用できるかどうか、データを保存するかどうか

- bootstrap.memory_lock=true

プロセスの物理メモリアドレスをロックしてスワップ(スワップ)を回避し、パフォーマンスを向上させる

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

Headプラグインを使用するにはcorsを有効にする

- "ES_JAVA_OPTS=-Xms512m -Xmx512m"

JVM メモリ サイズの構成

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

5.2.1以降のバージョンではマルチキャストがサポートされていないため、クラスター節點發現failoverのために、クラスター内の各ノードのtcpデータ交換アドレスを手動で指定する必要があります。デフォルトのポートは9300です。他のポートが設定されている場合は、個別に指定する必要があります。ここでは、コンテナー通信を直接使用するか、各ノードの9300ホストにマッピングして、ネットワーク ポートを介して通信することができます。

failover選択quorum = nodes/2 + 1を設定します

もちろん、独自の設定ファイルをマウントすることもできます。ES ESの設定ファイルは/usr/share/elasticsearch/config/elasticsearch.ymlで、次のようにマウントされます。

ボリューム:
 - パス/to/local/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro

ドッカーの作成

バージョン: '3'
サービス:
 エラスティックサーチ_n0:
  画像: elasticsearch:6.6.2
  コンテナ名: elasticsearch_n0
  特権: true
  環境:
   - クラスター名=elasticsearch-cluster
   - ノード名=ノード0
   - ノードマスター=true
   - ノードデータ=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」
  ulimits:
   メモリロック:
    ソフト: -1
    難しい: -1
  ボリューム:
   - ./data/node0:/usr/share/elasticsearch/データ
   - ./logs/node0:/usr/share/elasticsearch/logs
  ポート:
   - 9200:9200
 エラスティックサーチ_n1:
  画像: elasticsearch:6.6.2
  コンテナ名: elasticsearch_n1
  特権: true
  環境:
   - クラスター名=elasticsearch-cluster
   - ノード名=ノード1
   - ノードマスター=true
   - ノードデータ=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」
  ulimits:
   メモリロック:
    ソフト: -1
    難しい: -1
  ボリューム:
   - ./data/node1:/usr/share/elasticsearch/データ
   - ./logs/node1:/usr/share/elasticsearch/logs
  ポート:
   - 9201:9200
 エラスティックサーチ_n2:
  画像: elasticsearch:6.6.2
  コンテナ名: elasticsearch_n2
  特権: true
  環境:
   - クラスター名=elasticsearch-cluster
   - ノード名=ノード2
   - ノードマスター=true
   - ノードデータ=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"
  ulimits:
   メモリロック:
    ソフト: -1
    難しい: -1
  ボリューム:
   - ./data/node2:/usr/share/elasticsearch/データ
   ログファイル
  ポート:
   - 9202:9200

ここでは、ホストの9200/9201/9202それぞれnode0/node1/node2http服務端口として開き、各インスタンスのtcp數據傳輸はデフォルトの9300を使用してコンテナーを介した通信を管理します。

複数マシンの展開が必要な場合は、 ES transport.tcp.port: 9300ポートをホスト マシンのxxxxポートにマップし、 discovery.zen.ping.unicast.hosts各ホスト エージェントのアドレスを入力します。

#たとえば、ホストの1つは192.168.1.100です
  ...
  - 「discovery.zen.ping.unicast.hosts=192.168.1.100:9300,192.168.1.101:9300,192.168.1.102:9300」
  ...
ポート:
 ...
 - 9300:9300

サービスを作成して開始する

[root@localhost elasticsearch]# docker-compose up -d
[root@localhost elasticsearch]# docker-compose ps
   名前 コマンド 状態 ポート       
----------------------------------------------------------------------------------------------
elasticsearch_n0 /usr/local/bin/docker-entr ... 0.0.0.0:9200->9200/tcp、9300/tcp がアップ
elasticsearch_n1 /usr/local/bin/docker-entr ... 0.0.0.0:9201->9200/tcp、9300/tcp がアップ
elasticsearch_n2 /usr/local/bin/docker-entr ... 0.0.0.0:9202->9200/tcp、9300/tcp がアップ

#起動に失敗しましたエラーを表示できませんでした [root@localhost elasticsearch]# docker-compose ログ
#せいぜい、アクセス権/JVM vm.max_map_count 設定の問題です

クラスターのステータスを確認する

192.168.20.6 是我的服務器地址

クラスターのステータスを表示するには、 http://192.168.20.6:9200/_cat/nodes?v 9200/_cat/nodes?v にアクセスしてください。

ip ヒープ.パーセント ram.パーセント cpu load_1m load_5m load_15m node.role マスター名
172.25.0.3 36 98 79 3.43 0.88 0.54 mdi * ノード0
172.25.0.2 48 98 79 3.43 0.88 0.54 mdi - ノード2
172.25.0.4 42 98 51 3.43 0.88 0.54 mdi - ノード1

フェイルオーバーの検証

クラスタインターフェースを通じてステータスを確認する

マスター ノードがオフラインになることをシミュレートし、クラスターは新しいマスター ノードの選択を開始し、データを移行して再シャーディングします。

[root@localhost elasticsearch]# docker-compose stop elasticsearch_n0
elasticsearch_n0 を停止しています...完了

クラスターのステータス (http ポートを変更した後、元のマスター ノードはオフラインになっていることに注意してください)。ダウンしたノードはまだクラスター内にあり、回復せずに一定期間待機した後、削除されます。

ip ヒープ.パーセント ram.パーセント cpu load_1m load_5m load_15m node.role マスター名
172.25.0.2 57 84 5 0.46 0.65 0.50 mdi - ノード2
172.25.0.4 49 84 5 0.46 0.65 0.50 mdi * ノード1
172.25.0.3 mdi-node0

しばらくお待ちください

ip ヒープ.パーセント ram.パーセント cpu load_1m load_5m load_15m node.role マスター名
172.25.0.2 44 84 1 0.10 0.33 0.40 mdi - ノード2
172.25.0.4 34 84 1 0.10 0.33 0.40 mdi * ノード1

ノード node0 を復元する

[root@localhost elasticsearch]# docker-compose で elasticsearch_n0 を起動します
elasticsearch_n0 を開始しています...完了

しばらくお待ちください

ip ヒープ.パーセント ram.パーセント cpu load_1m load_5m load_15m node.role マスター名
172.25.0.2 52 98 25 0.67 0.43 0.43 mdi - ノード2
172.25.0.4 43 98 25 0.67 0.43 0.43 mdi * ノード1
172.25.0.3 40 98 46 0.67 0.43 0.43 mdi - ノード0

Headプラグインで観察する

git クローン git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npmインストール
npm 実行開始

クラスタステータスダイアグラムにより、自動データ移行のプロセスがわかりやすくなります。

1. クラスターの通常データは3つのノードに安全に分散されます

2. オフラインノード1のマスターノードクラスタがデータの移行を開始する

移行中

移行完了

3. ノード1を復元する

質問メモ

elasticsearch 透かし

デプロイ後、インデックスを作成すると、一部のシャードが未署名状態であることがわかりました。これは、elasticsearch ウォーターマーク: low、high、flood_stage 制限によるものです。デフォルトでは、ハードディスクの使用率が85%を超えるとアラームが発行されます。開発の場合は、手動でオフにすることをお勧めします。データは各ノードにシャーディングされ、本番環境では独自の判断が下されます。

curl -X PUT http://192.168.20.6:9201/_cluster/settings \
-H 'コンテンツタイプ':'application/json' \
-d '{"transient":{"cluster.routing.allocation.disk.threshold_enabled": false}}'

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

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

<<:  Vue2.0/3.0双方向データバインディングの実装原理の詳細説明

>>:  MySQLデータベースにパスワードを入力した後にフラッシュバックする問題の解決策

推薦する

Vue コンポーネントの切り替え、動的コ​​ンポーネント、コンポーネントのキャッシュについて

目次1. コンポーネント切り替え方式方法1: v-ifとv-elseを使用する方法 2: 組み込みコ...

すべてのブラウザに対応したデータURIとMHTMLの完全なソリューション

データURI Data URI は、小さなファイルをドキュメントに直接埋め込むために RFC 239...

Spark SQL の 4 つの一般的なデータ ソースの詳細な説明

汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...

HTMLはシンプルで美しいログインページを作成します

まずは見てみましょう。 HTML ソースコード: XML/HTML コードコンテンツをクリップボード...

nginx共有メモリの仕組みの詳細な説明

Nginx の共有メモリは、高いパフォーマンスを実現できる主な理由の 1 つであり、主にファイル キ...

有名なウェブサイトのロゴに使われている25種類のフォントのコレクション

この記事では、25 の有名な Web サイト (Google、Yahoo、Twitter、Digg ...

ビューポートの基本原理と詳細な使用方法

1. ビューポートの概要モバイル ブラウザは通常、画面よりも幅の広い仮想ウィンドウにページをレンダリ...

MySQL のデフォルトのストレージ エンジンを変更する方法

mysql ストレージ エンジン: MySQL サーバーはモジュール スタイルを採用しており、特にス...

MySQL ユーザー権限管理の実装

1. MySQL の権限の概要MySQL には、権限を制御する 4 つのテーブルがあります。user...

MySQL では UTF-8 が推奨されないのはなぜですか?

最近、Rails 経由で「utf8」でエンコードされた UTF-8 文字列を MariaDB に保存...

JavaScript クリップボードの使用法の詳細な説明

(1)はじめに: clipboard.js は、テキストをクリップボードにコピーする機能を実装する軽...

Mysqlチュートリアルでのグループランキングの実装例の詳細な説明

目次1. データソース2. データの総合順位1) 総合ランキング2) 同順位3) 同順位3. データ...

テーブルの最大幅と最小幅を設定する際の互換性の問題と解決策の詳細な説明

テーブル内の min-width と max-width プロパティの設定 <テーブル>...

Vueは適切なスライドアウトレイヤーアニメーションを実装します

この記事では、適切なスライドアウトレイヤーアニメーションを実装するためのVueの具体的なコードを例と...

Win10 64ビットMySQL8.0のダウンロードとインストールのチュートリアル図

公式サイトから MySQL をダウンロードしてインストールし、クライアントにログインするにはどうすれ...