Elasticsearch® 별칭(alias)은 인덱스 관리를 한층 유연하게 만들어 주는 강력한 기능입니다. 이 글에서는 ObjectRocket 호스팅 Curator 구현 환경에서 새롭게 지원되는 Alias 액션을 맞이하여, Elasticsearch 별칭의 개념과 장점, 그리고 실전 활용 방법을 자세히 살펴봅니다.
Elasticsearch 별칭 소개
2017년 8월 24일 ObjectRocket.com/blog에 처음 게시됨
훌륭한 Elasticsearch 운영 습관 중 하나는 과도한 데이터를 담고 있는 대형 인덱스를 피하는 것입니다. 하지만 데이터가 여러 인덱스에 분산된 후에는 이들을 효율적으로 검색할 방법이 필요해집니다. 바로 이럴 때 별칭이 큰 힘을 발휘합니다.
Elasticsearch에서 별칭은 이름 그대로 하나 이상의 인덱스를 가리키는 보조 이름이며, 필요에 따라 필터링 조건까지 포함할 수 있습니다. 이 글에서는 별칭을 활용하는 다양하고 유용한 방법과 함께, ObjectRocket Elasticsearch 클러스터에서 별칭 Curator 작업을 빠르고 쉽게 설정하는 절차까지 안내해 드립니다.
별칭으로 수행하는 CRUD(생성, 조회, 수정, 삭제)
간단한 예제를 통해 별칭이 어떻게 동작하는지 살펴보겠습니다. _cat API를 사용하면 각 별칭-인덱스 연결 정보와 필터링 또는 라우팅 적용 여부를 한 줄씩 확인할 수 있습니다:
GET _cat/aliases?v
alias index filter routing.index routing.search
atest test1 – – –
atest test2 – – –
atest2 test2 * – –
또는 /_alias 엔드포인트로 전체 별칭을, /index/_alias 엔드포인트로 특정 인덱스의 별칭만 조회할 수 있습니다. 인덱스 생성 시점에 인덱스 템플릿을 통해 별칭을 추가하거나, PUT 명령으로 직접 설정할 수도 있습니다:
PUT /test2
{
“aliases” : {
“atest” : {},
“atest2” : {
“filter” : {
“term” : {“user” : “objectrocket” }
}
}
}
}
이후에는 /_aliases 엔드포인트를 사용해 인덱스와 별칭을 지정하여 별칭을 추가하거나 제거할 수 있습니다.
POST /_aliases
{
“actions” : [
{ “add” : { “index” : “test1”, “alias” : “atest” } },
{ “remove” : { “index” : “test3”, “alias” : “atest” } }
] }
이렇게 설정한 후에는 쿼리에서 인덱스 이름 대신 별칭 이름을 사용할 수 있습니다. 단, 문서를 색인할 때는 별칭이 단일 인덱스만 가리켜야 한다는 점에 유의하세요. 별칭에는 공식 문서에서 확인할 수 있는 더 많은 심화 기능이 있지만, 이 정도면 별칭 작업에 대한 감을 잡기에 충분할 것입니다.
별칭, 왜 중요한가?
지금까지의 내용이 꽤 간단해 보이고 이미 매력을 느꼈을 수도 있지만, 아직 확신이 서지 않는다면 별칭이 실질적인 도움을 주는 대표적인 사례 두 가지를 소개하겠습니다.
무중단 재인덱싱(Reindex)
Elasticsearch에서 가장 유용한 기능 중 하나가 Reindex API입니다. 하지만 재인덱싱 후에는 여전히 기존 인덱스에서 새 인덱스로 전환(cutover)하는 작업을 관리해야 합니다. 별칭을 사용하면 다운타임 없이 이 전환을 수행할 수 있습니다. 절차는 다음과 같습니다:
-
oldIndex라는 인덱스가 있고 이를newIndex로 재인덱싱하려 한다고 가정합니다. -
별칭
myalias를 생성하여oldIndex에 추가합니다. -
애플리케이션이
oldIndex가 아닌myalias를 가리키도록 설정합니다. -
newIndex를 생성하고oldIndex의 데이터를 재인덱싱하기 시작합니다. -
newIndex를myalias에 추가하고oldIndex를 제거합니다. 이 작업은 반드시 단일 명령으로 수행해야 합니다. 변경은 원자적으로 적용되므로 전환 과정에서 문제가 발생하지 않습니다. -
별칭을 통해 기대한 결과가 나오는지 확인한 뒤, 준비가 되면
oldIndex를 삭제합니다.
애플리케이션의 읽기나 쿼리에 별칭을 사용하는 것이 좋은 습관입니다. 불필요한 추가 작업을 피할 수 있기 때문입니다.
시간 기반 인덱스 범위 조회
Logstash®나 Beats®를 사용하고 있다면 something-yyyy.mm.dd 형식의 인덱스 이름이 익숙할 것입니다. 이러한 명명 규칙은 데이터 관리와 큐레이션을 매우 쉽게 만들어 줍니다. 하지만 와일드카드나 인덱스 목록은 원하는 만큼 유연하지 못할 때가 있으며, 특히 날짜 범위에 걸쳐 검색할 때 그렇습니다. 별칭은 이런 경우에 손쉬운 해결책을 제공합니다. 일별 Logstash 인덱스가 있고 로그를 30일간 보관한다고 가정해 보겠습니다. 그런데 특정 유형의 쿼리에서는 최근 7일치 데이터만 필요할 수 있습니다. 별칭과 Curator를 사용하면 이를 비교적 쉽게 구현할 수 있습니다.
-
lastSevenDays와 같은 별칭을 생성합니다. -
인덱스 템플릿을 설정하여 새 인덱스가 기본적으로 해당 별칭에 추가되도록 합니다.
-
Elasticsearch Curator의 별칭 액션과 age/pattern 필터를 사용하거나 간단한 스크립트로, 7일이 지난 인덱스를 제거하는 반복 작업을 설정합니다.
-
이후
lastSevenDays로 실행되는 모든 검색은 최근 7일 내에 생성된 인덱스만 대상으로 합니다.
고객 사례
실제 고객 사례를 통해 마무리하겠습니다. 한 고객사는 성능 저하 문제를 겪고 있었습니다. 검토 결과, 자주 사용되던 쿼리 중 하나가 클러스터의 전체 날짜 범위를 대상으로 검색하고 있다는 사실을 발견했습니다. 이 쿼리는 앞서 설명한 시나리오와 매우 유사했고 실제로는 최근 7일치 데이터만 필요했기 때문에, 최근 7일간의 인덱스를 가리키도록 주기적으로 갱신되는 별칭으로 관리하기에 완벽한 대상이었습니다. 아래 그래프에서 클러스터 성능에 미친 영향이 얼마나 놀라운지 확인할 수 있습니다:
이 별칭이 자주 쿼리되었기 때문에 변경 효과를 뚜렷하게 확인할 수 있었습니다. 그래프를 보면 모든 노드에서 CPU 사용량이 50% 이상 감소했고, 쿼리 캐시 축출(eviction) 횟수는 약 75% 감소했습니다. 물론 쿼리 빈도와 인덱스 크기에 따라 이만큼 극적인 결과가 나오지 않을 수 있지만, 검색 범위를 적절히 관리하는 것이 얼마나 중요한지 잘 보여주는 사례입니다.
요약
별칭은 Elasticsearch 도구 상자에 있는 또 하나의 강력한 도구로, 클러스터를 일상적으로 더 쉽게 관리하고 활용할 수 있게 해줍니다. 이 글이 모든 내용을 다루지는 않지만, Elasticsearch 환경에서 별칭을 어디에 어떻게 활용할 수 있을지 감을 잡는 데 도움이 되기를 바랍니다.
ObjectRocket을 통한 별칭 Curator 작업 설정 방법
ObjectRocket의 Elasticsearch 클러스터는 이미 별칭을 지원하지만, 새로운 Alias Curator 작업 기능을 사용하면 정기적인 별칭 유지 관리를 훨씬 간편하게 설정할 수 있습니다. 지정한 기준에 따라 정해진 주기로 별칭에 인덱스를 추가하거나 제거하는 필터를 구성할 수 있기 때문입니다.
설명을 위해 앞서 언급한 lastSevenDays 별칭 예제를 활용해 보겠습니다. 간단하게 진행하기 위해 첫 번째 Curator 작업 실행 시 별칭이 자동으로 설정되도록 하겠습니다. Curator 작업에서 기존 별칭을 참조할 수도 있으므로, 더 세밀한 커스텀 설정이 필요하다면 별칭을 별도로 구성할 수도 있습니다.
이 별칭을 관리하려면 최근 7일 이내에 생성된 인덱스만 포함되도록 항상 최신 상태를 유지해야 합니다. 별칭 Curator 작업을 추가할 클러스터의 인스턴스 상세 페이지에서 시작합니다:
이제 Curator 탭을 선택하여 현재 Curator 작업 목록을 확인합니다:
이미 몇 개의 Curator 작업이 등록되어 있는 것을 볼 수 있습니다. 이번에는 별칭 Curator 작업을 하나 더 만들어 보겠습니다. Add Task(작업 추가)를 선택합니다:
이제 Alias 작업 유형을 선택합니다:
작업 이름을 지정한 후 별칭 이름을 입력해야 합니다. 이 예제에서는 lastSevenDays를 사용하겠습니다. Add(추가)와 Remove(제거) 옵션도 확인할 수 있습니다. 이 옵션들을 사용하면 별칭에 추가하거나 제거할 인덱스에 대한 필터를 지정할 수 있습니다. lastSevenDays의 경우 일부 인덱스는 추가하고 다른 인덱스는 제거해야 하므로 두 옵션을 모두 선택합니다:
원하는 필터는 7일 이내에 생성된 모든 인덱스를 추가하고 7일이 지난 인덱스는 제거하는 것입니다. 필터를 입력하면 다음 예제와 같이 표시됩니다:
작업 실행 주기는 기본값(5분)으로 두어 별칭이 항상 최신 상태를 유지하도록 합니다. Save Task(작업 저장)를 선택하면 끝! 이제 5분마다 작업이 실행되어 Elasticsearch 별칭이 자동으로 갱신됩니다.
Rackspace DBA Services에 대해 자세히 알아보세요.
피드백 탭을 통해 의견을 남기거나 질문할 수 있습니다. 또한 Sales Chat을 클릭하여 지금 바로 상담을 시작할 수 있습니다.