엘라스틱서치 샤드 최적화
엘라스틱서치 실무 가이드 9.5장
클러스터에서 운영 중인 인덱스의 샤드 개수는 원칙적으로 수정이 불가하다. 데이터 크기가 최대 얼마까지 증가할 것인지를 사전에 계산해서 최초 인덱스 생성 시 샤드의 개수를 신중히 결정해야 한다.
프라이머리 샤드: 실제 서비스가 일어나는 샤드. 실질적인 CRUD를 제공하며 보통 “샤드”라고 줄여서 부른다.
레플리카 샤드: 프라이머리 샤드와 동일한 데이터를 가지고 있으며, 장애 복구를 위해 존재한다. 평소에는 읽기 분산에 사용된다.
운영 중에 샤드 개수를 수정하지 못하는 이유
루씬은 단일 머신 위에서만 동작하는 검색 엔진이다. 샤드 내부의 루씬 입장에서는 함께 인덱스를 구성하는 다른 샤드의 존재를 전혀 눈치 못 챈다. 프라이머리 샤드 개수를 변경한다는 말은, 루씬이 가지는 모든 데이터를 재조정한다는 의미다.
샤드의 개수를 변경해야한다면?
엘라스틱서치는 새로운 인덱스를 생성하고 재색인(reindexing)하도록 안내한다. ReIndex API를 사용할 수 있다.
// 인덱스 생성
// 재색인
POST _reindex
{
"source": {
"index": "movie"
},
"dest": {
"index": "new_movie"
}
}인덱스 크기에 비례해서 오래 걸린다. (수십 GB 이상이면 수 시간 가능)
레플리카 샤드의 복제본 수는 얼마가 적당할까
레플리카 샤드의 복제본 수는 운영 중에도 변경 가능하다. 기존 프라이머리 샤드를 단순이 복사만 하면 되기 때문이다. 장애 시 빠른 복구를 위해 최소 1개 이상의 복제본을 사용하는게 좋으며, 모든 프라이머리 샤드가 복제되므로 전체 샤드 개수를 고려해서 개수를 설정하는 것이 좋다.
레플리카가 많아질수록 색인 성능은 떨어지지만, 읽기 분산이 중요한 경우 늘리는 것을 권장한다.
복제본 개수를 언제든지 변경 가능하므로 최초 서비스를 오픈할 때는 복제본 수를 최소화해서 서비스 운영을 시작하고, 읽기 분산 모니터링을 통해 탄력적으로 복제본의 수를 조절하는 것이 좋다.
클러스터에서 운영 가능한 최대 샤드 수는?
인덱스당 기본적으로 프라이머리 샤드 1개, 레플리카 샤드 1개 생성된다. 이론상 인덱스 개수는 제한이 없지만, 인덱스당 설정 가능한 샤드의 수는 1024개로 제한되어 있다.
참고
Last updated