Elasticsearch クラスタをマルチノードでインストールする
前回はElasticsearch を Linux上、Dockerコンテナでシングルノードでインストール起動しました。
前回のエントリは下記をご参照ください。
今回も Linux上、Dockerコンテナそれぞれでのクラスタ構築を実施します。
Elasticsearch クラスタ on Linux
まずは Linux OS 上で Elasticsearch クラスタを構築します。ノード数は2台とします。
環境
- プラットフォーム : VirtualBox on Mac
- OS : CentOS 7.3
- ツール : vagrant
- Elasticsearch : 5.1.1
- ノード1 IPアドレス : 10.255.0.100
- ノード2 IPアドレス : 10.255.0.101
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
Makefile(make
コマンド)で簡単に利用できるのですが、このまま利用するとバージョンが 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 は非常に簡単です。インストールだけでなく、設定も簡単なのは嬉しいですね。