# Dec 6th, 2017: \[KR\]\[Elasticsearch\] Cross Cluster Search로 할 수 있는 것들

**URL:** <https://discuss.elastic.co/t/dec-6th-2017-kr-elasticsearch-cross-cluster-search/110077>\
**Category:** Advent Calendar\
**Created:** [December 5, 2017, 1:00pm UTC](https://discuss.elastic.co/t/dec-6th-2017-kr-elasticsearch-cross-cluster-search/110077 "2017-12-05T13:00:07Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![kimjmin](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kimjmin/32/15223_2.png) [@kimjmin](https://discuss.elastic.co/u/kimjmin)\
**Post date:** [December 5, 2017, 1:00pm UTC](https://discuss.elastic.co/t/dec-6th-2017-kr-elasticsearch-cross-cluster-search/110077/1 "2017-12-05T13:00:07Z")

</div>

여러개의 클러스터를 묶어서 검색하고자 할때 예전에는 Tribe Node를 사용했지만, Elasticsearch 5.3 부터는 [Cross Cluster Search](https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-cross-cluster-search.html) 기능의 사용이 가능합니다.  
Tribe Node와 비교하여 Cross Cluster Search 가 갖는 장점들은 다음과 같습니다.

- 클러스터간의 버전이 달라도 됩니다. 이는 5.X 버전과 6.X 버전을 묶어서 검색할 수 있습니다.
- 같은 이름의 인덱스도 중복해서 검색이 가능합니다.
- Cluster State 정보를 전부 업데이트 할 필요가 없어 마스터 노드의 부하가 적습니다.

ES 5.6.4 클러스터의 데이터를 6.0.0 클러스터에서 검색해 보겠습니다. 두 클러스터 모두 로컬호스트에서 각자 다른 포트로 실행시킨다고 가정 하고 6.0.0 에서 5.6.4에 있는 metricbeat 인덱스를 검색을 해 보도록 하겠습니다.  
각 클러스터의 `config/elasticsearch.yml` 파일을 다음과 같이 설정을 해 줍니다.

**es-5.6.4 설정**

```auto
cluster.name: es-5
http.port: 9201
transport.tcp.port: 9301

```

**es-6.0.0 설정**

```auto
cluster.name: es-6
http.port: 9202
transport.tcp.port: 9302
search:
  remote:
    cluster_one:
      seeds: 127.0.0.1:9301

```

es-6.0.0 에서 es-5.6.4 로 검색하는 경우 es-6.0.0 설정 파일만 위와 같이 설정 하면 검색은 가능합니다. 검색은 다음과 같이 하게 됩니다.

```auto
GET /cluster_one:metricbeat/_search
{
  "query": {
    "match_all": {}
  }
}

```

원격 클러스터와 현재 클러스터의 인덱스를 같이 묶어서 검색도 가능합니다.

```auto
GET /cluster_one:metricbeat,metricbeat/_search
{
  "query": {
    "match_all": {}
  }
}

```

그럼 Cross Cluster Search 로 불가능한 기능은 무엇이 있을까요? 결론부터 이야기하자면 \_search 외의 대부분 API는 동작을 하지 않습니다.

GET 을 이용한 단일 문서의 접근도 오류가 납니다.

```auto
GET /cluster_one:metricbeat/docs/AWAQ3bycH8X78-aeS7-b

```

위와 같이 실행하면 아래와 같이 `index_not_found_exception` 오류가 납니다.

```auto
{
  "error": {
    "root_cause": [
      {
        "type": "index_not_found_exception",
        "reason": "no such index",
        "resource.type": "index_expression",
        "resource.id": "cluster_one:metricbeat",
        "index_uuid": "_na_",
        "index": "cluster_one:metricbeat"
      }
    ],
    "type": "index_not_found_exception",
    "reason": "no such index",
    "resource.type": "index_expression",
    "resource.id": "cluster_one:metricbeat",
    "index_uuid": "_na_",
    "index": "cluster_one:metricbeat"
  },
  "status": 404
}

```

당연히 원격 클러스터 인덱스에 대한 `_mapping`, `_setting` 같은 옵션도 동작하지 않습니다. 모두 동일하게 `index_not_found_exception` 오류가 납니다.

```auto
GET /cluster_one:metricbeat/_mappings

```

Cross Cluster Search 는 여러 클러스터의 상태를 직접 관리하지 않고 원격 클러스터 데이터를 검색하는 기능만을 제공하기 때문에 쉽고 안전하게 사용이 가능합니다.

---

<div class="post-metadata">

**Author:** ![warkolm](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/warkolm/32/39224_2.png) [@warkolm](https://discuss.elastic.co/u/warkolm)\
**Post date:** [August 23, 2018, 8:31am UTC](https://discuss.elastic.co/t/dec-6th-2017-kr-elasticsearch-cross-cluster-search/110077/3 "2018-08-23T08:31:21Z")

</div>


