ElasticSearch 클러스터 검색

3705 단어 elasticsearch

ElasticSearch 클러스터 검색


수평 확장 통증


수평으로 확장할 때 노드 수는 무한히 증가할 수 없습니다.
집단의 메타 정보(노드, 인덱스, 집단 상태)가 너무 많으면 업데이트 압력이 커지기 때문이다.
단일 Active Master가 성능 병목이 되어 전체 클러스터가 제대로 작동하지 않습니다.

클러스터 간 Cross Cluster 검색


초기 버전은 Tribe Node를 통해 다중 집단 접근 수요를 실현했지만 문제가 있습니다. 현재는 Deprecated로 되어 있습니다.
5.3 버전은 클러스터 간 검색 기능을 도입했습니다.
모든 노드가federated 노드 역할을 할 수 있도록 합니다. 경량의 방식으로 검색 요청을 에이전트합니다.Client Node 형식으로 다른 클러스터에 가입할 필요가 없습니다.

클러스터 간 검색 구현

  • 여러 집단을 가동한다
    bin/elasticsearch -E node.name=cluster0node -E cluster.name=cluster0 -E path.data=cluster0_data -E discovery.type=single-node -E http.port=9200 -E transport.port=9300
    bin/elasticsearch -E node.name=cluster1node -E cluster.name=cluster1 -E path.data=cluster1_data -E discovery.type=single-node -E http.port=9201 -E transport.port=9301
    bin/elasticsearch -E node.name=cluster2node -E cluster.name=cluster2 -E path.data=cluster2_data -E discovery.type=single-node -E http.port=9202 -E transport.port=9302
  • 각 집단에서 다음 명령을 실행하고 정보를 설정합니다
    PUT _cluster/settings
    {
      "persistent": {
        "cluster": {
          "remote": {
            "cluster0": {
              "seeds": [
                "127.0.0.1:9300"
              ],
              "transport.ping_schedule": "30s"
            },
            "cluster1": {
              "seeds": [
                "127.0.0.1:9301"
              ],
              "transport.compress": true,
              "skip_unavailable": true
            },
            "cluster2": {
              "seeds": [
                "127.0.0.1:9302"
              ]
            }
          }
        }
      }
    }
  • 테스트 데이터를 생성합니다
    curl -XPOST "http://localhost:9200/users/_doc" -H 'Content-Type: application/json' -d'
    {"name":"user1","age":10}'
    
    curl -XPOST "http://localhost:9201/users/_doc" -H 'Content-Type: application/json' -d'
    {"name":"user2","age":20}'
    
    curl -XPOST "http://localhost:9202/users/_doc" -H 'Content-Type: application/json' -d'
    {"name":"user3","age":30}'
  • 조회
    GET /users,cluster1:users,cluster2:users/_search
    {
      "query": {
        "range": {
          "age": {
            "gte": 20,
            "lte": 40
          }
        }
      }
    }

  • 다중 집단 검색 작업 원리

  • 네트워크 왕복 최소화 네트워크 왕복 최소화 기본적으로 Elasticsearch는 원격 군집 간의 네트워크 왕복 횟수를 줄일 수 있습니다.이것은 네트워크 지연이 검색 속도에 미치는 영향을 감소시켰다.그러나 Elasticsearch는 스크롤이나 내부 적중력 검색 요청과 같은 대형 검색 요청의 네트워크 왕복을 줄일 수 없습니다
  • 스크롤이나 내부 적중력을 포함하는 검색 요청에 대해 네트워크 왕복을 최소화하지 마십시오. Elasticsearch는 원격 군집마다 여러 개의 전송과 진입 요청을 보냅니다.검색 API의 ccs_minimize_roundtrips 매개 변수는false로 설정하여 이 옵션을 선택하십시오.비록 통상적으로 비교적 느리지만, 이런 방법은 낮은 지연의 네트워크에 적용될 수 있다

  • 네트워크 왕복 작업 최소화 원리

  • 클러스터 간 검색 요청을 로컬 클러스터로 보냅니다.이 집단의 조율 노드가 이 요청을 수신하고 해석합니다..
  • 조정 노드는 각 군집에 자신의 군집을 포함한 단일 검색 요청을 보낸다.각 클러스터는 독립적으로 검색 요청을 수행합니다..
  • 모든 원격 집단은 검색 결과를 조율 노드로 보냅니다
  • 각 클러스터에서 결과를 수집하면 조정 노드가 클러스터 간 검색 응답에서 최종 결과를 반환합니다

  • 네트워크 왕복을 최소화하지 마라

  • 클러스터 간 검색 요청을 로컬 클러스터로 보냅니다.이 집단의 조율 노드가 이 요청을 수신하고 해석합니다..
  • 조정 노드는 모든 원격 그룹에 검색 분할 API 요청을 보냅니다
  • 모든 원격 집단은 그 응답을 조율 노드로 보낸다.이 응답에는 클러스터 간 검색 요청을 수행할 인덱스 및 슬라이스에 대한 정보가 포함되어 있습니다
  • 조정 노드는 각 블록에 검색 요청을 보내는데 그 자체의 블록을 포함한다.각 조각마다 독립적으로 검색 요청을 수행합니다.
  • 각 조각마다 검색 결과를 조율 노드로 보냅니다
  • 각 클러스터에서 결과를 수집하면 조정 노드가 클러스터 간 검색 응답에서 최종 결과를 반환합니다

  • 부록

  • 아바루 블로그
  • 공식 문서
  • 좋은 웹페이지 즐겨찾기