[ElasticSearch] ES 시스템 구조

donghyeok·2022년 12월 19일

ElasticSearch

목록 보기
2/8

인덱스와 샤드

  • ES에서 단일 데이터 단위를 도큐먼트(document)라고 하며 이 도큐먼트를 모아놓은 집합을 인덱스(index)라고 한다.
  • 인덱스는 기본적으로 샤드(shard) 단위로 분리되고 각 노드에 분산되어 저장된다.

프라이머리 샤드와 레플리카

  • 처음 생성된 샤드는 프라이머리 샤드, 복제본은 레플리카라고 부른다.
  • 각 프라이머리 샤드와 레플리카들은 노드가 여러개일 경우 전체 노드에 골고루 분배되어 저장된다.
  • 샤드와 복제본은 동일한 데이터를 담고 있기 때문에 반드시 서로 다른 노드에 저장 된다.
  • 하나의 클러스터에서 노드 장애 상황에 대한 샤드와 복제본 대처는 다음과 같다.
	1. 노드3가 다운되면 0,4번 샤드가 유실되지만 다른 노드에 남아 있어 유실없이 사용 가능
    2. 타임아웃이 지나 노드3이 복구되지 않으면 1개만 남은 0, 4번 샤드를 다른 노드에 복제한다.
  • 위와 같은 시퀀스로 인해 ES는 운영 중에 노드가 유실되어도 데이터를 잃지 않는다.

샤드 개수 설정

  • 샤드의 개수는 인덱스를 처음 생성할 때 지정된다.
  • 인덱스를 재색인 하지 않는 이상 바꿀 수 없다.

마스터 노드와 데이터 노드

마스터 노드

  • 클러스터의 마스터 노드는 인덱스의 메타 데이터, 샤드의 위치, 클러스터 상태 정보를 관리하는 역할을 수행한다.
  • 마스터 노드의 역할을 수행할 수 있는 노드가 없다면 클러스터는 작동이 정지되므로 마스터 후보 노드를 두어 관리한다.
  • 마스터 후보 노드들은 마스터 노드의 정보를 모두 공유하므로 노드가 많아지면 후보 노드를 따로 두고 관리하는 것이 좋다.

데이터 노드

  • 실제로 색인된 데이터를 저장하고 있는 노드이다.
  • 마스터 노드와 데이터 노드를 분리할수도, 안할수도 있다. (node.master, node.data 설정)

Split Brain

  • 위처럼 만약 5개의 노드로 구성된 클러스터에서 네트워크가 단절되면 왼쪽 클러스터에서는 2개가 다운되었다고 생각하여 클러스터를 유지하고 오른쪽 클러스터에서는 3개가 다운되었다고 생각하여 클러스터를 유지한다.
  • 이런 상황에서 네트워크가 복구되고 하나의 클러스터로 합쳐졌을 때 데이터 정합성이 깨지고 데이터 무결성이 유지될 수 없게되는데 이를 Split Brain이라 한다.
  • 이런 상황을 방지하기 위해서는 마스터 후보 노드를 홀수개로 두고, 마스터노드가 n/2+1개 이상인 클러스터만 동작하고 나머지는 동작을 멈추게하면 된다.

출처 : ref. https://esbook.kimjmin.net/

0개의 댓글