Elasticsearch クラスタをマルチノードでインストールする

前回はElasticsearch を Linux上、Dockerコンテナでシングルノードでインストール起動しました。

前回のエントリは下記をご参照ください。

sfujimoto.hatenablog.com

今回も Linux上、Dockerコンテナそれぞれでのクラスタ構築を実施します。

Elasticsearch クラスタ on Linux

まずは Linux OS 上で Elasticsearch クラスタを構築します。ノード数は2台とします。

環境

Elasticsearch インストール

Elasticsearch のインストールはシングルノードと同じです。

Java 8、Elasticsearch をインストールします。

# echo "[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md" > /etc/yum.repos.d/elastic.repo

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

# yum install -y java-1.8.0 elasticsearch
:

# rpm -q elasticsearch java-1.8.0-openjdk
elasticsearch-5.1.1-1.noarch
java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64

2台ともにインストールします。

クラスタ設定

Elasticsearch の設定をします。クラスタを組むためには以下の設定が必要です。

項目 説明
discovery.zen.ping.unicast.hosts Elasticsearch のクラスタを構成する相手のホスト名、もしくはIPアドレスを指定します。
cluster.name Elasticsearch のクラスタ名を指定します。クラスタ構成とする場合、クラスタを構成する全てのノードで名前を合わせる必要があります。指定しない場合、デフォルトの```elasticsearch```が設定されます。
node.name Elasticsearch のノード名を指定します。指定は必須ではないですが、設定する場合はクラスタ内で異なるノード名を指定します。

今回は下記のような設定としています。

ノード1
# echo "network.host: 10.255.0.100, 127.0.0.1
cluster.name: my-cluster
node.name: node1
discovery.zen.ping.unicast.hosts: 10.255.0.101" > /etc/elasticsearch/elasticsearch.yml
ノード2
# echo "network.host: 10.255.0.101, 127.0.0.1
cluster.name: my-cluster
node.name: node2
discovery.zen.ping.unicast.hosts: 10.255.0.100" > /etc/elasticsearch/elasticsearch.yml

Elasticsearch 再起動

Elasticsearch サービスを再起動します。

# systemctl restart elasticsearch

動作確認

クラスタのノードを確認します。

# curl localhost:9200/_cat/nodes
10.255.0.101 3 97 1 0.12 0.08 0.08 mdi - node2
10.255.0.100 3 97 1 0.03 0.04 0.08 mdi * node1

2つのノードが表示され、クラスタが構成されていることがわかります。

Elasticsearch コンテナ クラスタ on Docker

続いて、Docker上で Elasticsearch クラスタを構築します。今回もノードは2台です。

環境

  • Docker ホスト : Docker for Mac 1.12
  • Elasticsearch : 5.1.1

Docker コンテナ起動

Elastic 社の Github リポジトリdocker-compose.ymlが提供されていますので利用します。

$ git clone https://github.com/elastic/elasticsearch-docker.git
:

$ tree elasticsearch-docker
elasticsearch-docker
├── LICENSE
├── Makefile
├── README.md
├── build
│   ├── elasticsearch
│   │   ├── Dockerfile
│   │   ├── bin
│   │   │   └── es-docker
│   │   ├── elasticsearch.yml
│   │   └── log4j2.properties
│   └── python
│       └── Dockerfile
├── docker-compose.hostports.yml
├── docker-compose.yml
└── tests
    ├── __pycache__
    │   └── test_xpack_basic_index_crud.cpython-27-PYTEST.pyc
    ├── es_acceptance.py
    ├── es_acceptance.pyc
    ├── test_basic_index_crud.py
    ├── test_xpack_basic_index_crud.py
    └── testdata.json

6 directories, 16 files

Makefilemakeコマンド)で簡単に利用できるのですが、このまま利用するとバージョンが 5.0.0-beta1 という若干古めのバージョンです。最新を利用したいので、Makefile に記載されているバージョンを 5.1.1 に書き換えます。

$ cd elasticsearch-docker
$ sed -i 's/ELASTIC_VERSION=5.0.1/ELASTIC_VERSION=5.1.1/g' Makefile

docker-compose でクラスタを起動します。

$ make run-es-cluster
docker pull docker.elastic.co/elasticsearch/elasticsearch-alpine-base:latest
latest: Pulling from elasticsearch/elasticsearch-alpine-base
:

数分で起動します。

動作確認

クラスタのノードを確認します。

$ curl -u elastic:changeme localhost:9200/_cat/nodes
172.18.0.2  7 87 4 0.47 0.43 0.27 mdi * P7MWTJw
172.18.0.3 11 87 4 0.47 0.43 0.27 mdi - QF4Caww

2つのノードが表示され、クラスタが構成されていることがわかります。

まとめ

いかがでしたでしょうか?

データストアのクラスタリングといえば、非常に設定が面倒なイメージがありますが、Elasticsearch は非常に簡単です。インストールだけでなく、設定も簡単なのは嬉しいですね。