출처:

https://esbook.kimjmin.net/03-cluster/3.2-index-and-shards

클러스터

image.png

물리적 구성과 상관없이 여러 노드가 하나의 클러스터로 묶이기 위해선 클러스터명 cluster.name 설정이 묶여질 모든 노드들이 동일해야 함. 같은 서버, 같은 네트워크 망 내부에 있어도 cluster.name 이 동일하지 않으면 논리적으로 서로 다른 클러스터로 실행이 됨.

하나의 서버에서 여러 클러스터를 실행할 수도 있다. 클러스터 명 다르게 해서 노드 실행하면 됨.

서로 다른 클러스터끼리는 데이터를 통신할 수 없음.

디스커버리

노드가 처음 실행될때, discovery.seed_hosts: [] 에 설정된 네트워크 상의 다른 노드들을 찾아 하나의 클러스터로 바인딩하는 과정을 디스커버리라고 함. 다음과 같은 과정으로 일어난다.

  1. discovery.seed_hosts 설정에 있는 주소 순서대로 노드 확인
    1. 있다면 cluster.name 확인
      1. 일치한다면 같은 클러스터로 바인딩 → 종료
      2. 일치하지 않는다면 1로 롤백
    2. 없다면 1로 돌아가 다음 주소 반복
  2. 네트워크 주소 끝날때까지 노드 못찾으면 스스로 새로운 클러스터 시작

도큐먼트와 인덱스, 샤드

단일 데이터 단위를 도큐먼트로 하고, 이 도큐먼트의 집합을 인덱스(Index)라고 한다. 인덱스라는 단어가 혼동을 줄 수 있으므로, 데이터 저장된위로써의 인덱스는 특별이 인디시즈(indices)라고 부르기도 함.

인덱스는 샤드(shard)라는 단위로 분리되고 각 노드에 분산되어 저장됨. 샤드는 원래 루씬의 단일 검색 인스턴스임. 다음은 하나의 인덱스가 5개의 샤드로 저장된 모습.

image.png