본문 바로가기

프로젝트/여행지 오픈 API

[ElasticSearch] 8. 클러스터와 노드의 구조

목차

    기본 개념

     

    클러스터(Cluster)

    일반적으로 컴퓨터 시스템에서의 클러스터는 여러 컴퓨터를 병렬로 연결하여 하나의 시스템으로 묶는다는 개념으로 쓰인다. 이렇게 하면 시스템 장애를 대비해 고가용성을 챙기며, 시스템 성능도 높일 수 있기 때문이다. (하나가 고장나도 다른 컴퓨터가 이를 대체하며, 병렬 처리를 가능하게 한다.)

     

    ElasticSearch에서는 여러 노드들의 집합을 의미한다.

    클러스터는 하나의 유니크한 이름으로 식별되며, 이 이름은 클러스터에 참여하는 노드들이 연결될 때 사용된다.

     

    노드(Node)

    엘라스틱 서치에서 클러스터의 일부로 동작하는 인스턴스.

    일반적으로 한 개의 컴퓨터(혹은 서버)에 하나의 노드를 구성한다. 이는 물리적/가상적 단위로도 구분되기도 한다.

     

    데이터의 저장과 색인, 검색 작업을 수행한다. 노드도 하나의 이름으로 식별되며, 클러스터 이름에 연결되어 클러스터의 일부가 된다.

    노드에는 다음과 같은 종류가 있다.

    • Master Node: 클러스터는 반드시 하나의 마스터 노드를 가진다. 주로 클러스터의 관리와 제어를 담당한다. 클러스터의 상태 정보를 관리하며, 노드 추가/제거와 같은 클러스터 재구성 작업을 처리한다.

    • Data Node: 인덱싱된 실제 데이터(도큐먼트)를 샤드 형태로 저장하며, 데이터 관련 작업(검색, 색인)을 수행한다.

    • Client Node: 검색 요청과 같은 클라이언트 작업을 처리하며, 실제 데이터를 저장하지 않는다.

    • Ingest Node: 데이터가 색인되기 전에 전처리를 수행하는 노드다.

     

    HTTP 계층과 전송 계층

    노드에는 두 가지의 통신모듈이 존재한다. 전송 모듈과 HTTP 모듈이다.

     

    전송 모듈 :

    - 주로 클러스터 내부에서 노드간 통신에 사용

    - 노드 간 데이터를 분산처리할 경우 사용

    - 기본 포트 : 9300 ~ 9399

     

    HTTP 모듈 :

    - REST API를 통해 주로 노드 - 외부 클라이언트 연동에 사용한다.

    - 기본 포트 : 9200 ~ 9299

    그외

     

    샤딩(Sharding)

    하나의 인덱스를 여러 부분으로 나누는 것을 말한다. 이렇게 나누어진 각 부분을 샤드라고 부른다.

    샤딩의 주요 목적은 데이터의 확장성을 향상시키는 것이다.

    즉, 하나의 인덱스의 데이터가 너무 많아 한 노드에 저장하기 어려울 때 데이터를 여러 노드에 분산하여 저장하기 위해 사용한다.

     

    데이터 분할의 기준:

    • 샤딩: 하나의 인덱스를 여러 샤드로 나눈다. 이렇게 나누어진 샤드는 클러스터 내의 여러 노드에 분산 저장될 수 있다. 샤딩은 주로 수평적 확장을 위해 사용되며, 데이터의 증가에 따라 추가적인 노드를 클러스터에 추가할 수 있다.
    • 레플리카(Replica):
      샤드의 복제본을 의미한다.
      레플리카는 고가용성을 위해 사용된다. 복제본(레플리카)은 원본 데이터와 동일한 내용을 담았지만 고장나거나 데이터가 손상되어도 카피본이기에 상관이 없다는 것.
      어떤 노드가 실패할 경우 해당 노드에 저장된 샤드의 데이터를 복구하기 위해 사용된다. 레플리카는 원본 샤드와 다른 노드에 위치해야 한다.