본문 바로가기
BE 공부/검색엔진

[OpenSearch]클러스터 구성: 마스터 노드 + 데이터 노드

by 꼬질꼬질두부 2025. 3. 7.
반응형

🔍 OpenSearch란?

OpenSearch는 빠른 검색 기능을 제공하는 데이터베이스 시스템입니다.

대량의 데이터를 효과적으로 저장하고 검색할 수 있어, 로그 분석, 데이터 모니터링, 검색 엔진 구축 등에 사용됩니다.

 

OpenSearch는 단순한 데이터베이스가 아니라 클러스터(cluster) 라는 개념을 사용해 여러 개의 서버(노드)를 조합하여 동작합니다. 이때, 클러스터 내에서 각 노드는 마스터 노드(Master Node)데이터 노드(Data Node) 로 역할이 나뉩니다.

 

이 글에서는 OpenSearch 클러스터를 구성할 때 마스터 노드와 데이터 노드를 어떻게 배치하는지, 그리고 각각의 역할이 무엇인지 쉽게 설명하겠습니다.


🚀 OpenSearch 클러스터란?

📌 클러스터란 무엇일까?

단일 서버에서만 OpenSearch를 실행하면 성능이 제한적이고 장애가 발생했을 때 복구가 어렵습니다. 따라서 여러 개의 서버를 연결하여 클러스터(cluster)를 구성하고, 데이터 분산 및 장애 복구 기능을 강화합니다.

즉, 클러스터는 여러 대의 서버(노드)로 이루어진 하나의 거대한 OpenSearch 시스템이라고 할 수 있습니다.

📌 클러스터 내부 구조

OpenSearch 클러스터는 다양한 역할을 가진 노드(Node)들이 모여서 동작합니다. 대표적으로 다음과 같은 역할을 하는 노드들이 있습니다:

  • 마스터 노드 (Master Node) 🏛️: 클러스터의 운영을 담당하는 관리자 역할
  • 데이터 노드 (Data Node) 📦: 실제 데이터를 저장하고 검색 요청을 처리하는 역할
  • 검색 노드 (Coordinating Node) 🕵️: 클라이언트 요청을 받아 적절한 데이터 노드에 전달하는 역할
  • 인제스트 노드 (Ingest Node) 🔄: 데이터 처리 및 변환을 담당하는 노드

이 글에서는 마스터 노드와 데이터 노드에 집중해서 설명하겠습니다!


🏛️ 마스터 노드 (Master Node)

✅ 역할: 클러스터 운영 및 조정

마스터 노드는 OpenSearch 클러스터의 운영을 담당하는 관리자 역할을 합니다. 마치 축구팀의 감독처럼, 클러스터 전체를 조율하고 상태를 관리하는 중요한 역할을 합니다.

📌 마스터 노드의 주요 기능

  1. 클러스터 상태 관리 🛠️
    • 클러스터 내 모든 노드의 상태를 지속적으로 모니터링합니다.
    • 특정 노드에 장애가 발생하면 이를 감지하고, 데이터 재배치를 수행합니다.
  2. 노드 할당 및 샤드(Shard) 재배치 🔄
    • 데이터 저장 공간을 의미하는 샤드(Shard) 를 각 데이터 노드에 분배합니다.
    • 노드가 추가되거나 삭제될 때, 자동으로 샤드를 재배치하여 부하를 분산합니다.
  3. 클러스터 설정 변경 반영 ⚙️
    • 새로운 인덱스를 생성하거나 삭제할 때, 이를 모든 노드에 반영합니다.
    • 사용자 역할(Role) 및 권한 설정을 관리합니다.

📌 마스터 노드는 몇 개 필요할까?

마스터 노드는 최소 3개 이상 구성하는 것이 일반적입니다. 이유는 Quorum(정족수) 유지 때문입니다.

예시: 마스터 노드가 3개일 경우, 2개 이상 살아있으면 클러스터가 정상 작동합니다. 하지만 1개만 남으면 클러스터가 비정상적으로 동작할 수 있습니다.

 

따라서 3개 이상의 마스터 노드가 있어야 장애 발생 시에도 안정적인 운영이 가능합니다.

📌 마스터 노드에 데이터 저장 가능할까?

일반적으로 마스터 전용 노드(Dedicated Master Node) 로 설정하여 데이터 저장을 하지 않습니다.

📌 마스터 노드 설정 (opensearch.yml 파일 예시)

node.roles: ["master"]

📦 데이터 노드 (Data Node)

✅ 역할: 데이터 저장 및 검색 쿼리 처리

데이터 노드는 OpenSearch에서 실제 데이터를 저장하고 검색 요청을 처리하는 노드입니다. 사용자가 검색 요청을 보내면, 데이터 노드가 해당 요청을 처리하여 결과를 반환합니다.

📌 데이터 노드의 주요 기능

  1. 데이터 저장 및 샤드 관리 📂
    • OpenSearch의 인덱스 데이터 를 저장합니다.
    • 샤드를 저장하고 관리하여 데이터 검색 속도를 높입니다.
  2. 검색 및 인덱싱 처리 🔍
    • 사용자의 검색 요청을 실행하고 데이터를 반환합니다.
    • 새로운 데이터를 색인(Indexing)하여 빠르게 검색할 수 있도록 저장합니다.
  3. 클러스터 부하 분산 ⚖️
    • 여러 개의 데이터 노드가 있을 경우, 자동으로 검색 요청을 분산 처리하여 성능을 최적화합니다.

📌 데이터 노드는 몇 개 필요할까?

데이터 노드는 클러스터의 규모에 따라 다르게 구성됩니다. 예를 들어:

  • 소규모 클러스터 (테스트용): 2~3개의 데이터 노드
  • 중간 규모 (서비스 운영): 5~10개 이상의 데이터 노드
  • 대규모 (빅데이터 처리): 10개 이상 + 추가적인 검색 전용 노드 활용

📌 데이터 노드 설정

📌 데이터 노드 설정 (opensearch.yml 파일 예시)

node.roles: ["data"]

 


🎯 마스터 노드 + 데이터 노드 구성 방법

노드 유형 역할 개수(추천)

마스터 노드 클러스터 관리 및 조정 최소 3개
데이터 노드 데이터 저장 및 검색 처리 데이터 크기에 따라 유동적

 

💡 Tip
1. 마스터 노드와 데이터 노드는 역할이 다르므로 분리하여 운영하는 것이 성능과 안정성 면에서 유리합니다.
2. 데이터가 많아질수록 데이터 노드를 추가하여 확장 가능합니다.
3. 클러스터 장애 발생 시 마스터 노드 3개가 살아있어야 정상 운영 가능합니다.

🔥 결론

  • OpenSearch는 클러스터 기반으로 운영되며, 노드의 역할이 분리되어 있음
  • 마스터 노드는 클러스터 전체를 관리하는 역할을 수행
  • 데이터 노드는 데이터를 저장하고 검색 요청을 처리하는 역할을 수행
  • 안정적인 운영을 위해 마스터 노드는 최소 3개, 데이터 노드는 서비스 규모에 맞춰 확장 가능
반응형

댓글