🔍 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 클러스터의 운영을 담당하는 관리자 역할을 합니다. 마치 축구팀의 감독처럼, 클러스터 전체를 조율하고 상태를 관리하는 중요한 역할을 합니다.
📌 마스터 노드의 주요 기능
- 클러스터 상태 관리 🛠️
- 클러스터 내 모든 노드의 상태를 지속적으로 모니터링합니다.
- 특정 노드에 장애가 발생하면 이를 감지하고, 데이터 재배치를 수행합니다.
- 노드 할당 및 샤드(Shard) 재배치 🔄
- 데이터 저장 공간을 의미하는 샤드(Shard) 를 각 데이터 노드에 분배합니다.
- 노드가 추가되거나 삭제될 때, 자동으로 샤드를 재배치하여 부하를 분산합니다.
- 클러스터 설정 변경 반영 ⚙️
- 새로운 인덱스를 생성하거나 삭제할 때, 이를 모든 노드에 반영합니다.
- 사용자 역할(Role) 및 권한 설정을 관리합니다.
📌 마스터 노드는 몇 개 필요할까?
마스터 노드는 최소 3개 이상 구성하는 것이 일반적입니다. 이유는 Quorum(정족수) 유지 때문입니다.
예시: 마스터 노드가 3개일 경우, 2개 이상 살아있으면 클러스터가 정상 작동합니다. 하지만 1개만 남으면 클러스터가 비정상적으로 동작할 수 있습니다.
따라서 3개 이상의 마스터 노드가 있어야 장애 발생 시에도 안정적인 운영이 가능합니다.
📌 마스터 노드에 데이터 저장 가능할까?
일반적으로 마스터 전용 노드(Dedicated Master Node) 로 설정하여 데이터 저장을 하지 않습니다.
📌 마스터 노드 설정 (opensearch.yml 파일 예시)
node.roles: ["master"]
📦 데이터 노드 (Data Node)
✅ 역할: 데이터 저장 및 검색 쿼리 처리
데이터 노드는 OpenSearch에서 실제 데이터를 저장하고 검색 요청을 처리하는 노드입니다. 사용자가 검색 요청을 보내면, 데이터 노드가 해당 요청을 처리하여 결과를 반환합니다.
📌 데이터 노드의 주요 기능
- 데이터 저장 및 샤드 관리 📂
- OpenSearch의 인덱스 데이터 를 저장합니다.
- 샤드를 저장하고 관리하여 데이터 검색 속도를 높입니다.
- 검색 및 인덱싱 처리 🔍
- 사용자의 검색 요청을 실행하고 데이터를 반환합니다.
- 새로운 데이터를 색인(Indexing)하여 빠르게 검색할 수 있도록 저장합니다.
- 클러스터 부하 분산 ⚖️
- 여러 개의 데이터 노드가 있을 경우, 자동으로 검색 요청을 분산 처리하여 성능을 최적화합니다.
📌 데이터 노드는 몇 개 필요할까?
데이터 노드는 클러스터의 규모에 따라 다르게 구성됩니다. 예를 들어:
- 소규모 클러스터 (테스트용): 2~3개의 데이터 노드
- 중간 규모 (서비스 운영): 5~10개 이상의 데이터 노드
- 대규모 (빅데이터 처리): 10개 이상 + 추가적인 검색 전용 노드 활용
📌 데이터 노드 설정
📌 데이터 노드 설정 (opensearch.yml 파일 예시)
node.roles: ["data"]
🎯 마스터 노드 + 데이터 노드 구성 방법
노드 유형 역할 개수(추천)
마스터 노드 | 클러스터 관리 및 조정 | 최소 3개 |
데이터 노드 | 데이터 저장 및 검색 처리 | 데이터 크기에 따라 유동적 |
💡 Tip
1. 마스터 노드와 데이터 노드는 역할이 다르므로 분리하여 운영하는 것이 성능과 안정성 면에서 유리합니다.
2. 데이터가 많아질수록 데이터 노드를 추가하여 확장 가능합니다.
3. 클러스터 장애 발생 시 마스터 노드 3개가 살아있어야 정상 운영 가능합니다.
🔥 결론
- OpenSearch는 클러스터 기반으로 운영되며, 노드의 역할이 분리되어 있음
- 마스터 노드는 클러스터 전체를 관리하는 역할을 수행
- 데이터 노드는 데이터를 저장하고 검색 요청을 처리하는 역할을 수행
- 안정적인 운영을 위해 마스터 노드는 최소 3개, 데이터 노드는 서비스 규모에 맞춰 확장 가능
'BE 공부 > 검색엔진' 카테고리의 다른 글
[OpenSearch] k-NN 벡터 검색 적용하기 (2) | 2025.06.13 |
---|---|
[OpenSearch] FGAC(Fine-Grained Access Control)와 JWT 활용 (1) | 2025.01.22 |
[ElasticSearch] 낙관적 동시성 제어(Optimistic Concurrency Control, OCC) (0) | 2024.09.09 |
[OpenSearch] OpenSearch Dashboards를 활성화하지 않고 JWT 인증 설정하기 (0) | 2024.09.02 |
[OpenSearch] OpenSearch에서 JWT 인증 사용하기 (2) | 2024.09.02 |
댓글