관리 메뉴

가끔 보자, 하늘.

Elasticsearch 7.x에서 8.x로 업그레이드 중 주의사항 본문

개발 이야기/개발 및 서비스

Elasticsearch 7.x에서 8.x로 업그레이드 중 주의사항

가온아 2023. 11. 24. 17:06

메이저 버전이 업그레이드 되면서 몇 가지 변경사항은 있는 법! 하지만 한 눈에 꼭 확인해야 하는 내용이 보이지는 않을 수 있습니다. 그렇다고 정식 메뉴얼을 꼼꼼히 보는게 쉽지 않고. (저처럼 소기업에서 1인 담당인 경우는 특히...) 가끔은 요약본이 필요하니 정리해 둡니다. 

elasticsearch.yml 의 수정사항

  • node.master(or data 등) 은 node.roles로 대체
    • node.roles: [master, data, data_content, data_hot, data_warm, data_cold, data_frozen, transform, ml, ingest, remote_cluster_client] 이중 필요한 기능만 설정하세요.
  • transport.tcp... 은 transport.으로 대체
    • transport.tcp.compress -> transport.compress
    • transport.tcp.port -> transport.port

es8 설치 후 설정을 마무리, 필요한 플러그인을 설치하세요.

그리고 기존 es7을 종료 후 es8을 재실행합니다. 이때 Elasticsearch 클러스터가 업그레이드 과정 중에 재조정(rebalancing) 및 재할당(reallocating) 작업이 진행하면서 할당된 샤드값이 0으로 조정되었다 다시 원래 수치로 회복합니다. 시간이 다수 걸릴 수 있으니 이 작업이 끝날때까지 다른 노드의 업그레이드는 대기해 주세요. Unassigned shards값이 0이 되면 그때 다음 노드 작업을 이어가시는게 안전합니다. 데이터 저장 디렉토리 구조가 변경되기 때문에 조금 시간이 걸릴수 있는 점 참고하세요. (저는 거의 10분 이후에야 수치가 0으로 내려간 후 다시 5분후에야 재할당 작업이 시작되었습니다. 시스템이 좀 구리긴 합니다. ^^a)

무사히 잘 실행되었다면 축하드립니다. 짝짝짝!!

하지만 저는 아니었습니다. -_-;;; 그랬다면 이 글을 적고 있지도 않았겠죠. 저의 경우 6.x 부터 사용했었는데 다음과 같은 오류가 발생했습니다.

Cannot start this node because it holds metadata for indices with version [6030099] with which this node of version [8.11.1] is incompatible. Revert this node to version [7.17.14] and delete any indices with versions earlier than [7000099] before upgrading to version [8.11.1]. If all such indices have already been deleted, revert this node to version [7.17.14] and wait for it to join the cluster to clean up any older indices from its metadata.

7.x 버전을 사용한지가 몇 년이 지났는데 6.x 버전의 데이터가 남아 있다는게 의아했습니다. 그래서 모든 인덱스의 버전을 살펴보았습니다.

devtool에서  "GET _settings?human"라고 검색하면 아래와 같은 포멧의 인덱스의 metadata를 볼 수 있습니다.

".reporting-2019.03.10" : { "settings" : { "index" : { "creation_date_string" : "2019-03-12T07:15:36.063Z", "number_of_shards" : "1", "auto_expand_replicas" : "0-1", "provided_name" : ".reporting-2019.03.10", "creation_date" : "1552374936063", "number_of_replicas" : "1", "uuid" : "oiuVphPWTquZmv4_-lKHww", "version" : { "created_string" : "6.3.0", "created" : "6030099", "upgraded" : "7110099" } } } },

워낙 많은 인덱스가 있었기에 눈으로 다 볼 수 는 없었고 그냥 api로 검색했습니다. (공식문서링크)

const { Client } = require('@elastic/elasticsearch');
const client = new Client({ node : ['http://localhost:9200'] });

const res  = await client.indices.getSettings({index:'*', include_defaults:true});
.
.

일부 6030099로 생성된 인덱스가 있었으나 모두 위 예처럼 upgraded되었다고 표기되어 있었습니다. 공식 포럼에도 유사한 이슈가 있어 롤백 후 일정 시간 후 다시 시도했으나 결과는.... -_-++

아무리 찾아봐도 metadata 상으로는 모두 업그레이드 되었다고 어쩔 수 없이 생성날짜가 6030099로 되어 있는 데이터들을 삭제해 보았습니다. 다행이(?) 시스템 인덱스기도 하고 중요한건 아니라 큰 문제는 없어 보입니다. 

결과는 성공적(?)!! 성공적이라고 하기는 좀 그러네요. 그냥 버그겠거니 하고 넘어가지만 찝찝하긴 합니다. 그래도 이런 훌륭한 솔루션을 무료로 쓸 수 있다는게 너무 감사할 따름이네요.

다들 무탈히 사용하시길... ^^ (저도 이제 그만 클라우드 쓰고 싶네요. ㅠ_ㅜ)

반응형