문제 상황
성능 테스트 과정에서 master node 의 스펙을 변경하였고, 3개의 마스터 노드중에서 2개를 종료한 뒤 새로운 스펙으로 2대를 띄웠습니다. 해당 과정을 진행 후 도큐먼트 조회 / 업데이트가 안 되었고, 아래 에러가 떴습니다.
{
"error" : {
"root_cause" : [
{
"type" : "master_not_discovered_exception",
"reason" : null
}
],
"type" : "master_not_discovered_exception",
"reason" : null
},
"status" : 503
}
원인
노드가 추가되거나 제거될 때 Elasticsearch는 새 마스터를 선택합니다. 일반적으로 클러스터의 마스터 후보 노드들이 해당 결정을 내리는 데 참여하고, 여기서 절반 이상의 노드들이 응답해야 마스터가 선출됩니다.
이 방식을 Quorum-based decision making이라고 합니다. 따라서 클러스터가 정상적으로 운영되려면, 투표 구성에 있는 노드 중 절반 이상을 동시에 중지해서는 안 됩니다. 절반 이상의 투표 노드를 사용할 수 있어야 클러스터는 계속해서 정상적으로 작동할 수 있습니다.
Tip: OpenSearh에서는 마스터 노드 1개로 구성하는 것이 불가능한 것으로 보입니다.
또한 클러스터에 짝수 개의 마스터 후보 노드가 있는 경우 OpenSearch 및 Elasticsearch 버전 7.x 이상에서는 투표 구성이 항상 홀수가 되도록 한 노드를 무시한다고 합니다.
결론
- 엘라스틱서치에서는 data 노드가 데이터를 보유하고 CRUD, 검색 등의 데이터 작업을 담당하기 때문에, 사실 성능 테스트에서 master는 중요하지 않은 부분이었습니다. (master는 잘 모르면 최대한 건들이지 않는 것으로..ㅠ)
- 함께 보면 좋을 내용 : split brain 현상
References
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-quorums.html
https://esbook.kimjmin.net/03-cluster/3.3-master-and-data-nodes
'Storage' 카테고리의 다른 글
[Elasticsearch] Shard Allocation 은 어떻게 결정될까? (0) | 2024.04.10 |
---|---|
[Elasticsearch] Near real-time search, Refresh (0) | 2024.02.15 |
[MySQL] 인덱스 정리 (0) | 2022.09.26 |