ども、cloudpackかっぱ@inokara)です。

はじめに

Elasticsearch のクラスタ化って実はあまりやったことが無くて復習を兼ねてザクッと触ってみました。


データノードとマスタノード

うんちく

  • データを保持するだけのノード(データノード)を構築することが出来る
  • 対してデータを保持せずにクラスタ管理と検索のリクエストを受け付ける処理だけを行うノード(マスタノード)を構築出来る

以下のような感じ

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 で見てみると…

Elasticsearchのクラスタリング: 動作確認(Marvel)

Marvel で見るとノード名の下に ホスト名:9300 とありますが、クラスタ関連の通信は 9300 ポートで行っているようですね。ということで、Security Group でうっかり開け忘れ等無いようにしたいものです。

ちなみに elasticsearch-head で見ると…

Elasticsearchのクラスタリング: 動作確認(elasticsearch-head)

簡単。


ということで…

クラスタ運用にありがちなノードの切り離しやノード障害等のパターンを色々と試してみたいですね。

元記事はこちらです。
Elasticsearch のクラスタメモ