tame_tame
(tame tame)
June 26, 2019, 9:52am
1
現在、自分はElasticSearchを使うRailsアプリケーションを開発しています。
Mac内部にdocker_composeを使いdocker.elastic.co/elasticsearch/elasticsearch:6.8.0
のイメージを使用して、環境を構築しています。
その際rspecでテストを行う為にdevelop環境とは別のElasticSearchを用意したくなりました。
自分はあまりElasticSearchに詳しくない為、間違っている可能性はあるのですが、この場合はtest用とdevelopment用の二つのClusterを建てれば良いはず、と考察しました。
しかしどの様なconfigを掛けば同一サーバに二つのClusterを用意できるかわかりませんでした。
そこで質問なのですがどの様なconfigを書けば良いでしょうか?
また、そもそも私の選択した手法は合っているでしょうか?
tsgkdt
(tsgkdt)
June 26, 2019, 1:30pm
2
Elasticsearchの、というよりはdockerの知識よりになるかと思いますが、
Elasticsearchのdockerで動かす際のマニュアルの記載が参考になるかと思います。
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docker.html
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.1
container_name: elasticsearch
environment:
- cluster.name=docker-cluster ←クラスタ名の指定箇所。
(中略)
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.1
container_name: elasticsearch2
environment:
(中略)
- "discovery.zen.ping.unicast.hosts=elasticsearch" ←docker-clusterに参加するため指定
異なるクラスタを、ということでしたらクラスタ名を変え、そしてunicast先も変えた設定を入れれば良いです。
仮にdocker-clusterは2台ノード、docker-cluster2は3ノード構成でつくる例です。
ネットワークも念のため分けておきました。
node
所属するクラスタ
network
elasticsearch
docker-cluster
esnet
elasticsearch2
docker-cluster
esnet
elasticsearch3
docker-cluster2
esnet2
elasticsearch4
docker-cluster2
esnet2
elasticsearch5
docker-cluster2
esnet2
このときの設定がこちらになりました。
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.1
container_name: elasticsearch
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.1
container_name: elasticsearch2
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata2:/usr/share/elasticsearch/data
networks:
- esnet
elasticsearch3:
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.1
container_name: elasticsearch3
environment:
- cluster.name=docker-cluster2
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata3:/usr/share/elasticsearch/data
ports:
- 9201:9200
networks:
- esnet2
elasticsearch4:
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.1
container_name: elasticsearch4
environment:
- cluster.name=docker-cluster2
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch3"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata4:/usr/share/elasticsearch/data
networks:
- esnet2
elasticsearch5:
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.1
container_name: elasticsearch5
environment:
- cluster.name=docker-cluster2
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch3"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata5:/usr/share/elasticsearch/data
networks:
- esnet2
volumes:
esdata1:
driver: local
esdata2:
driver: local
esdata3:
driver: local
esdata4:
driver: local
esdata5:
driver: local
networks:
esnet:
esnet2:
_cat/healthコマンドでクラスタ情報を確認すると、docker-clusterに2台、docker-clusterに3台と分けて作れていることが確認できました。
現実的にはMacで動作させられるとのことなので、ホストとのポートマッピングがあるかと思います。
9200:9200
9201:9200
と、実際にはポートをわけてアクセス先を分けることになるのではないでしょうか?
ホストにマッピングして使うような場合ならば、クラスタ名を分けずとも、ポートで分けられるかもしれません。
http://localhost:9200/
←本番用
http://localhost:9201/
←テスト用
のイメージです。
参考になりましたら、幸いです。
tame_tame
(tame tame)
June 26, 2019, 4:11pm
3
tsgkdt さん、詳細なご返答ありがとうございます。
cluster.nameを別々のを指定して、その上で9200のポートに対して別々のポートを割り振ればよかったんですね。
ありがとうございます、理解できました。
system
(system)
Closed
July 24, 2019, 4:16pm
4
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.