기록하는 습관

Elasticsearch (1) - alias 본문

개발/Elasticsearch

Elasticsearch (1) - alias

로그뉴 2022. 3. 12. 16:54

** Elasticsearch를 공부하며 정리한 글입니다.

 

[ 색인 이중화 ] 참고

검색 서비스 운영 중에 실수로 색인을 잘못 만들어 검색결과에 일부 데이터가 누락된 일이 있다면?

  1. 원본 색인(some-index)의 문제로 인한 장애를 발견한다.
  2. 새로운 색인(some-index-new)을 만든다.
  3. 스냅샷 또는 원본 데이터 저장소로부터 데이터를 추출하여 새로 만든 색인(some-index-new)에 색인한다.
  4. 검색 클라이언트 코드 내에 하드코딩되어 있는 색인명(some-index)을 새로 만든 색인명(some-index-new)으로 변경하고 배포한다.

여기에는 두 가지 문제점이 있다.

첫번째는 위 과정이 완료될 때까지 장애가 서비스에 그대로 노출된다는 점이다.

색인하는 것은 검색 서비스에서 가장 많은 시간이 소요되는 부분 중 하나이다. 이러한 긴 시간동안 장애가 노출되는 것을 피하기 위해서는 별개의 2차 색인을 미리 만들어 이중화 해 두는게 좋다. 1차 색인에 문제가 생기면 미리 만들어 두었던 2차 색인으로 교체하면 된다.

 

두번째는 서빙하는 색인을 변경할 때 마다 검색 클라이언트 코드도 함께 변경해야 한다는 점이다.

색인에 별명을 미리 붙여두고 검색 클라이언트 코드에는 실제 색인명이 아닌 별명을 사용하도록 하면 검색 클라이언트 코드와 무관하게 서빙중인 색인을 교체할 수 있다. 원본 색인에 문제가 생기면 별명의 타겟을 2차 색인으로 교체하기만 하면 된다.

 

[ alias 공식문서 정리 ]

# ADD alias

alias1 이름을 test1에 적용하기

index alias date math도 제공한다.

) <logs_{now/M}>  logs_2021.07.06 과 같이 변환된다.

참고: date-math-index-names

 

# REMOVE alias

alias1 이름을 가진 alias 삭제

# RENAME alias

alias1 alias2로 이름 변경하기.

* 이름 변경 프로세스가 remove -> add 이다. 공식 문서에서는 이 과정이 자동이므로, 짧은 순간에 인덱스를 가리키고 있지 않는 것은 걱정하지 말라고 적혀있다.

 

# ADD multiple alias

두개 이상 인덱스에 alias를 적용할 때 사용한다.

alias1 test1, test2에 적용한다.

 

# ADD multiple alias (using indices)

다음과 같이 indices를 사용해서 한 줄로 쿼리를 날릴 수도 있다.

 

# ADD multiple alias (using globe pattern)

globe pattern을 사용해서 인덱스 이름을 공통화 하여 alias를 설정할 수도 있다.

 

# swap index

인덱스를 하나의 alias로 변경하는 것은 원자적으로 가능하다. , 클러스터 상태에선 alias가 인덱스를 가리키지 않는 시간이 없다는 뜻이다. 그러나, 인덱싱 및 검색에는 여러 단계가 포함되므로 일시적으로 존재하지 않는 인덱스로 인해 진행 중이거나 대기중인 요청이 실패할 수 있다.

  1. 실수로 추가 한 색인(test)
  2. 추가해야 할 색인(test_2)
  3. 인덱스 삭제(test)

 

# Write Index

alias, 하나의 인덱스만 쓰기를 진행할 수 있다.

아래 예시는 “alias1”에 대한 index test, test2로 총 2개가 있는데 test 에 대해서만 is_write_index 옵션을 true로 설정했다.

그러면 다음과 같은 쿼리를 날리면 test doc write 된다.

[ 추가 alias 정리 ]

# alias 조회

 

# alias를 이용한 index 변경

alias를 변경할 때 주의해야할 점이 한 가지 있다.

아래와 같이 alias를 add 하고 remove 하는 두 가지 작업을 동시에 진행해야 한다!!!

  1. add -> remove 하기: 동일한 별명을 가진 색인이 2개가 되므로 거의 동일한 검색결과가 2건씩 나오게 됨
  2. remove -> add 하기: 해당 별명이 없으므로 오류 발생

 

[ alias 추가 개념 ]

  1. alias는 하나 이상의 index와 매핑될 수 있다.
    1. alias의 목적은 검색 시, 필터링된 결과를 자동 반환할 수 있는 것이다.
    2. 불필요한 shard가 실행되는 것을 막도록 routing도 사용할 수 있다.
    3. 또한 search할 때 자동으로 적용되는 filter, routing values를 설정할 수 있다.
  2. index와 같은 이름을 사용할 수 없다.
 
Comments