4 min read

Upgrading from 8.x to 9.x Indexing(indexesV2) solution

먼저

Jira 8.x버전에서 9.x버전으로 업그레이드 되며 가장 큰 문제가 발생합니다.

인덱싱 방식이 변경되며 cache 디렉토리 안의 indexesV1대신 indexesV2를 사용하게 됩니다.

Jira 9.x버전에서 indexesV1에 들어가있는 인덱싱 정보는 완전히 소실되고 업그레이드 시 인덱싱을 하지 않으면 검색기능이 불가능합니다.

9.x버전으로 업그레이드하고난 후 Full re-index를 해야하며 그 시간동안은 검색 기능을 전혀 사용할 수 없는 그야말로 초 비상 사태라고할 수 있겠습니다.

이에 복잡하지만 해결가능한 솔루션을 공유합니다.


1. 스테이징 노드 생성

2. 스테이징 노드 업그레이드

3. 스테이징 노드 Full re-index 수행

4. 스테이징 노드의 indexesV2 디렉토리를 운영 노드에 복사

5. 운영 노드 업그레이드

6. 운영 노드 점검

7. 운영 노드 중 1개 노드 Full re-index 수행


Jira Data Center 버전을 사용할 때 기동(Start)시 index파일이 존재하지 않으면 shared-home에서 index snapshot을 가져오게됩니다.
(Jira 8.19 버전 이전에는 Jira에서 Index snapshot을 수동으로 생성 및 활성화 해야합니다.)

이를 활용하여 Staging 환경에서 생성한 indexesV2 디렉토리의 인덱싱 스냅샷을 가져와 다운타임을 최소화 하거나 Staging 환경의 indexesV2 디렉토리를 가져오는 방법이 있습니다.

8. 업그레이드 이후

업그레이드 이후 indexesV2가 없는 Node에서 실행할 JVM(Java Virtual Machine) ARG(Argument)들 입니다.

JVM_SUPPORT_RECOMMENDED_ARGS="${JVM_SUPPORT_RECOMMENDED_ARGS} -Dcom.atlassian.jira.startup.rebuild.local.index=false"
JVM_SUPPORT_RECOMMENDED_ARGS="${JVM_SUPPORT_RECOMMENDED_ARGS} -Dcom.atlassian.jira.startup.pick.indexsnapshot.from.shared=false"
JVM_SUPPORT_RECOMMENDED_ARGS="${JVM_SUPPORT_RECOMMENDED_ARGS} -Dcom.atlassian.jira.startup.max.age.of.usable.index.snapshot.in.hours=178" 
맨 아래 index shanpshot을 가져오는 최대 시간이 정의 되어있습니다.

기본적으로 index 파일이 존재하지 않으면 index rebuild 작업을 시작하게 됩니다.
이때 indexing이 시간 소요가 많을 경우 해당 첫번째 JVM ARG를 입력하여 index build 과정을 건너 뜁니다.

두번째 줄의 JVM ARG는 Node에서 index 파일이 없을경우 shared-home에서 index snapshot을 가져오는 것을 비활성화 하는 옵션입니다.
이는 Staging 환경에서 생성한 indexesV2 디렉토리를 그대로 가져올 경우 사용하는 방법에 적합한 것입니다.

따라서 적합한 환경에 따라 두 가지 방법 중 한 가지를 선택하여 다운타임을 최소화 하시면 됩니다.

두 가지 선택지를 어떻게 선택하는게 좋을까 하는 결론은 Disk I/O 성능에 따라 갈라집니다.

  • Disk I/O 성능이 뛰어남: Staging 환경에서 indexesV2를 그대로 가져옴
  • Disk I/O 성능이 뛰어나지 않음: Staging 환경의 shared-home에 존재하는 indes snapshot을 가져옴
💡
Index를 성공적으로 이동 및 복구 시킨 후, JVM ARG를 주석 처리해야합니다.

마지막으로 Jira 시작(Startup) 전, reindex를 방지하는 JVM ARG를 넣고 기동해줍니다.

JVM_SUPPORT_RECOMMENDED_ARGS="${JVM_SUPPORT_RECOMMENDED_ARGS} -Dcom.atlassian.jira.startup.allow.full.reindex=false"
JVM_SUPPORT_RECOMMENDED_ARGS="${JVM_SUPPORT_RECOMMENDED_ARGS} -Dcom.atlassian.jira.startup.rebuild.local.index=false"
JVM_SUPPORT_RECOMMENDED_ARGS="${JVM_SUPPORT_RECOMMENDED_ARGS} -Dcom.atlassian.jira.startup.pick.indexsnapshot.from.shared=false"