# 一つのサーバに2つのClusterを作る方法

**URL:** <https://discuss.elastic.co/t/2-cluster/187534>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [June 26, 2019, 9:52am UTC](https://discuss.elastic.co/t/2-cluster/187534 "2019-06-26T09:52:20Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![tame\_tame](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tame_tame/32/47466_2.png) [@tame\_tame](https://discuss.elastic.co/u/tame_tame)\
**Post date:** [June 26, 2019, 9:52am UTC](https://discuss.elastic.co/t/2-cluster/187534/1 "2019-06-26T09:52:20Z")

</div>

現在、自分はElasticSearchを使うRailsアプリケーションを開発しています。  
Mac内部にdocker\_composeを使い`docker.elastic.co/elasticsearch/elasticsearch:6.8.0`のイメージを使用して、環境を構築しています。

その際rspecでテストを行う為にdevelop環境とは別のElasticSearchを用意したくなりました。

自分はあまりElasticSearchに詳しくない為、間違っている可能性はあるのですが、この場合はtest用とdevelopment用の二つのClusterを建てれば良いはず、と考察しました。  
しかしどの様なconfigを掛けば同一サーバに二つのClusterを用意できるかわかりませんでした。

そこで質問なのですがどの様なconfigを書けば良いでしょうか？  
また、そもそも私の選択した手法は合っているでしょうか？

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [June 26, 2019, 1:30pm UTC](https://discuss.elastic.co/t/2-cluster/187534/2 "2019-06-26T13:30:08Z")

</div>

Elasticsearchの、というよりはdockerの知識よりになるかと思いますが、  
Elasticsearchのdockerで動かす際のマニュアルの記載が参考になるかと思います。

[https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docker.html](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docker.html)

```auto
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 |

このときの設定がこちらになりました。

```auto
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台と分けて作れていることが確認できました。

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/8/6/865b4e7ae2bebfe7438c5047ee182676cf8c67c0.png)

現実的にはMacで動作させられるとのことなので、ホストとのポートマッピングがあるかと思います。

- 9200:9200
- 9201:9200  
と、実際にはポートをわけてアクセス先を分けることになるのではないでしょうか？

ホストにマッピングして使うような場合ならば、クラスタ名を分けずとも、ポートで分けられるかもしれません。

`http://localhost:9200/` ←本番用  
`http://localhost:9201/` ←テスト用

のイメージです。

参考になりましたら、幸いです。

---

<div class="post-metadata">

**Author:** ![tame\_tame](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tame_tame/32/47466_2.png) [@tame\_tame](https://discuss.elastic.co/u/tame_tame)\
**Post date:** [June 26, 2019, 4:11pm UTC](https://discuss.elastic.co/t/2-cluster/187534/3 "2019-06-26T16:11:41Z")

</div>

[tsgkdt](https://discuss.elastic.co/u/tsgkdt)さん、詳細なご返答ありがとうございます。  
cluster.nameを別々のを指定して、その上で9200のポートに対して別々のポートを割り振ればよかったんですね。  
ありがとうございます、理解できました。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 24, 2019, 4:16pm UTC](https://discuss.elastic.co/t/2-cluster/187534/4 "2019-07-24T16:16:49Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
