ども、cloudpack の かっぱ(@inokara)です。
はじめに
Elasticsearch のクラスタ化って実はあまりやったことが無くて復習を兼ねてザクッと触ってみました。
データノードとマスタノード
うんちく
- データを保持するだけのノード(データノード)を構築することが出来る
- 対してデータを保持せずにクラスタ管理と検索のリクエストを受け付ける処理だけを行うノード(マスタノード)を構築出来る
以下のような感じ
マスタノード
elasticsearch.yml の以下の項目を修正します。
cluster.name: hoge01 node.name: "search01" node.master: true node.data: false
データノード
一台目。
elasticsearch.yml の以下の項目を修正します。
cluster.name: hoge node.name: "data01" node.master: false node.data: data
二台目。
elasticsearch.yml の以下の項目を修正します。
cluster.name: hoge node.name: "data02" node.master: false node.data: data
Amazon EC2 でクラスタ構成
Amazon EC2 でクラスタ構成を構築する際の注意点
- Multicast でのノード探索が利用出来ない
- 上記の理由から設定の修正が必要になる
- プラグインが提供されているので、それを利用すると SDK 経由でノードの探索とクラスタ構成の自動化が行える
参考
プラグイン
cd /usr/share/elasticsearch bin/plugin -install elasticsearch/elasticsearch-cloud-aws/2.4.0
IAM role
対象となるノードに対しては以下のロールを適用しておきましょう。
{ "Statement": [ { "Action": [ "ec2:DescribeInstances" ], "Effect": "Allow", "Resource": [ "*" ] } ], "Version": "2012-10-17" }
もちろん、クレデンシャルな情報を記載しておくことも可能ですが、管理等を考えると IAM ロールで対応したいものですね。
elasticsearch の設定
以下の設定を elasticsearch.yml に設定します。
discovery.zen.ping.multicast.enabled: false cloud.aws.region: ap-northeast-1 discovery: type: ec2
設定後、それぞれのノードを再起動します。
設定後は…
Marvel で見てみると…
Marvel で見るとノード名の下に ホスト名:9300
とありますが、クラスタ関連の通信は 9300
ポートで行っているようですね。ということで、Security Group でうっかり開け忘れ等無いようにしたいものです。
ちなみに elasticsearch-head で見ると…
簡単。
ということで…
クラスタ運用にありがちなノードの切り離しやノード障害等のパターンを色々と試してみたいですね。
元記事はこちらです。
「Elasticsearch のクラスタメモ」