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


(Jongmin Kim) #1

여러개의 클러스터를 묶어서 검색하고자 할때 예전에는 Tribe Node를 사용했지만, Elasticsearch 5.3 부터는 Cross Cluster Search 기능의 사용이 가능합니다.
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 설정

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

es-6.0.0 설정

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 설정 파일만 위와 같이 설정 하면 검색은 가능합니다. 검색은 다음과 같이 하게 됩니다.

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

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

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

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

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

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

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

{
  "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 오류가 납니다.

GET /cluster_one:metricbeat/_mappings

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


(Mark Walkom) closed #3