2026 03 18
2026-03-18
ES reindex 및 7.x -> 8.x 전환
- 색인 최적화
- _reindex 할 때,
number_of_replicas: 0, refresh_interval: -1
refresh_interval: -1
- 하드디스크에는 썼지만, 검색엔진(메모리)에는 올라가지 않음
- ES에서는 데이터를 받으면 세그먼트라는 파일로 디스크에 저장
refresh를 통해 메모리에 오픈하는 과정을 refresh
-1로 지정하면, 내가 수동으로 시키기 전까지 절 때 refresh 하지 않도록 설정하는 것!
- 따라서 해당 값이 -1로 설정되어 있다면, 키바나에서 ES에게 데이터 달라해도 새로고침 안해서 검색 가능한거 없어 라는 반응!
- 대신
refresh 설정이 CPU, I/O 자원 꽤 먹기에, 대량 이관시 이 과정 생략해야 복사 속도가 2~3배 개선된다고 함
number_of_replicas: 0
- 복사 속도를 2배로 올리고, 서버 부하를 절반으로 줄이기 위함
- ES에서는 Primary Shard가 깨질것을 대비해 똑같은 복사본을 다른 노드에 하나 더 만들어 둠.
- 상용 환경에서 1로 설정하면 원본 1개 + 복사본 1개 => 2벌 유지
- 이관 시 해당 값을 0으로 설정하게 된다면, 서버가 원본 쓰기에만 집중
- 이관 100% 완료되고 난 뒤, 0 -> 1로 올려 복제를 해주자!
- ES 7.x -> 8.x 인덱스 템플릿 마이그레이션
- ES 7.x 의 템플릿 구조 (Legacy Template)
PUT _template/{name} API 사용
- 하나의 인덱스 생성 시, 패턴이 매칭되는 여러 템플릿이 동시에 적용. order 순서로 mappings가 머지
- ES 8.x 에서는 legacy template이 안 됨
- composable template과 인프라 템플릿 등으로 인해...
- legacy template과 composable template의 패턴이 겹치면 legacy 등록을 거부
- 인프라 템플릿이 (a ~ z)로 사실상 모든 알파벳의 인덱스 점유 -> legacy template 등록 불가
- 따라서...
- 레고 조립하듯 component template 으로 각 매핑을 분리하고, index template에서 composed_of 배열로 조합
- priority: 100으로 줘서 인프라 템플릿 보다 먼저 보도록
- 하지만 관리가 부담스러움. 필요한 인덱스를 직접 _index_template 으로 생성하여 지정하도록 함.