콘텐츠로 이동

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 으로 생성하여 지정하도록 함.