아빠는 개발자

[es] data node 6개의 서버 primary shard 3, replica 1인 상황에서 검색쿼리가 유입되었을때 샤드 검색 순서는? - 이론편 본문

카테고리 없음

[es] data node 6개의 서버 primary shard 3, replica 1인 상황에서 검색쿼리가 유입되었을때 샤드 검색 순서는? - 이론편

father6019 2024. 7. 28. 19:41
728x90
반응형

Elasticsearch에서 검색 쿼리가 유입되었을 때, 샤드 검색 순서는 다음과 같은 단계로 진행됩니다:

  1. 쿼리 수신: 클라이언트가 검색 쿼리를 보내면, 해당 쿼리는 클러스터의 코디네이터 노드(요청을 받은 노드)로 전달됩니다. 이 노드는 검색 요청을 처리할 책임을 집니다.
  2. 샤드 선택: 코디네이터 노드는 검색해야 할 샤드를 선택합니다. Elasticsearch는 프라이머리 샤드와 레플리카 샤드 중 하나를 선택하여 검색을 수행할 수 있습니다. 기본적으로 Elasticsearch는 프라이머리 샤드와 레플리카 샤드 간에 부하를 균등하게 분산시키기 위해 라운드 로빈 방식으로 샤드를 선택합니다.
  3. 쿼리 분산: 코디네이터 노드는 검색 쿼리를 선택된 샤드로 분산시킵니다. 이 샤드는 프라이머리 샤드일 수도 있고, 레플리카 샤드일 수도 있습니다. 각 샤드가 검색 쿼리를 처리합니다.
  4. 병렬 처리: 선택된 샤드들이 병렬로 검색 쿼리를 처리합니다. 각각의 샤드에서 검색 결과가 생성되면, 이 결과는 코디네이터 노드로 반환됩니다.
  5. 결과 집계: 코디네이터 노드는 각 샤드에서 반환된 검색 결과를 집계합니다. 이는 결과를 정렬하거나, 페이징 처리를 하거나, 집계 결과를 계산하는 등의 작업을 포함할 수 있습니다.
  6. 결과 반환: 최종적으로 코디네이터 노드는 집계된 검색 결과를 클라이언트에게 반환합니다.

예시

6개의 데이터 노드가 있는 클러스터에서 프라이머리 샤드가 3개, 레플리카 샤드가 1개인 상황을 가정해보겠습니다.

  • Primary Shard 0: Node 1
  • Primary Shard 1: Node 2
  • Primary Shard 2: Node 3
  • Replica Shard 0: Node 4
  • Replica Shard 1: Node 5
  • Replica Shard 2: Node 6

이 경우, 쿼리가 유입되었을 때의 샤드 검색 순서는 다음과 같습니다:

  1. 쿼리 수신: 예를 들어 Node 1이 코디네이터 노드가 되어 검색 쿼리를 수신합니다.
  2. 샤드 선택: Node 1은 프라이머리 샤드와 레플리카 샤드 중에서 라운드 로빈 방식으로 샤드를 선택합니다.
  3. 쿼리 분산:
    • Shard 0: Node 1 (Primary Shard 0) 또는 Node 4 (Replica Shard 0)
    • Shard 1: Node 2 (Primary Shard 1) 또는 Node 5 (Replica Shard 1)
    • Shard 2: Node 3 (Primary Shard 2) 또는 Node 6 (Replica Shard 2)
    예를 들어, 이번 쿼리는 Node 4, Node 5, Node 6의 레플리카 샤드에서 처리된다고 가정할 수 있습니다.
  4. 병렬 처리: Node 4, Node 5, Node 6에서 병렬로 검색 쿼리를 처리합니다.
  5. 결과 집계: Node 4, Node 5, Node 6에서 반환된 검색 결과가 Node 1로 집계됩니다.
  6. 결과 반환: Node 1은 최종 검색 결과를 클라이언트에게 반환합니다.

결론

검색 쿼리가 유입되면, Elasticsearch는 프라이머리 샤드와 레플리카 샤드 간에 부하를 균등하게 분산시키기 위해 라운드 로빈 방식을 사용하여 샤드를 선택합니다. 이를 통해 검색 쿼리는 클러스터 내 여러 샤드에 분산되어 병렬로 처리되고, 최종 검색 결과는 코디네이터 노드를 통해 클라이언트에게 반환됩니다.

 

 

728x90
반응형