Elasticsearch 업그레이드

원본 보기

Elasticsearch 업그레이드

이 가이드에서는 자체 관리형 Elasticsearch 클러스터를 이전 버전에서 이후 버전으로 업그레이드하는 자세한 단계를 설명합니다.

Elastic Cloud 플랫폼은 클러스터 관리와 업그레이드를 자동으로 처리하므로, Elastic Cloud on Kubernetes, Elastic Cloud Hosted, Elastic Cloud Enterprise 또는 Elastic Cloud Serverless와 같은 클라우드 배포에서는 이 가이드의 단계를 따를 필요가 없습니다.

이러한 자동화된 플랫폼 기능을 사용하려면 사용 가능한 클라우드 배포 방식 중 하나를 사용하여 Elasticsearch 클러스터를 배포하는 것을 고려하세요. 기존 자체 관리형 클러스터를 Elastic 관리형으로 이전하려면 데이터 마이그레이션을 참조하세요.

롤링 업그레이드 절차를 시작하기 전에 업그레이드를 계획하고 업그레이드 준비 단계를 수행하세요.

9.0.0-rc1과 같은 릴리스 후보 빌드에서의 업그레이드는 지원되지 않습니다. 시험판은 임시 환경에서 테스트하는 용도로만 사용하세요.

Elasticsearch는 이전 버전으로의 다운그레이드를 지원하지 않습니다. 혼합 버전 클러스터는 롤링 업그레이드 중에만 유효합니다. 하나 이상의 노드가 대상 버전을 실행하면 클러스터에서 롤백할 수 없는 업데이트를 수행할 수 있으므로, 마지막 노드까지 동일한 업그레이드를 완료해야 합니다.

모든 노드의 롤링 업그레이드를 완료할 수 없다면 업그레이드를 시작하지 마세요. 업그레이드 도중 중단해야 하는 경우 기존 클러스터를 이전 버전으로 되돌릴 수 없습니다. 대신 이전 버전의 빈 클러스터를 다시 구축하고 스냅샷에서 복원할 수 있습니다.

클러스터 업그레이드는 다음 방식으로 수행할 수 있습니다.

  • (권장) 롤링 재시작

    이 옵션을 사용하면 서비스를 중단하지 않고 한 번에 하나의 노드씩 클러스터를 업그레이드할 수 있습니다. 업그레이드된 노드의 샤드를 이전 버전을 실행하는 노드로 복제할 수 없으므로, 업그레이드 기간이 지난 뒤에도 동일한 클러스터에서 여러 Elasticsearch 버전을 실행하는 것은 지원되지 않습니다. 동일한 클러스터에서 세 가지 이상의 Elasticsearch 버전을 실행하는 것도 지원되지 않습니다.

  • 전체 재시작

    이 옵션을 사용하려면 클러스터를 오프라인으로 전환하여 모든 노드를 조율된 방식으로 업그레이드해야 합니다. 모든 노드를 중지하고 업그레이드한 다음 함께 시작합니다. 중단 시간 동안 고가용성이 없으면 업그레이드 프로세스가 제대로 관리되지 않을 경우 데이터가 손실될 수 있습니다.

다음 가이드에서는 프로덕션 환경의 기본 방식인 롤링 재시작을 주요 업그레이드 경로로 설명합니다. 모든 노드를 동시에 업그레이드한다는 점을 제외하면 전체 재시작 업그레이드에도 동일한 워크플로를 사용할 수 있습니다.

롤링 업그레이드를 수행할 때는 아래 노드 역할 그룹 순서에 따라 한 번에 하나의 노드를 업그레이드하세요. 한 노드에 여러 노드 역할이 할당된 경우 목록에서 가장 먼저 해당하는 그룹에 속합니다. 이렇게 하면 다음이 보장됩니다.

  • ILM 및 transform과 같은 기본 제공 플러그인이 오류 없이 계속 데이터를 처리할 수 있습니다.
  • 업그레이드 중 모든 노드가 클러스터에 참여할 수 있습니다. 업그레이드된 노드는 이전 버전의 master가 있는 클러스터에 참여할 수 있지만, 이전 버전 노드는 업그레이드된 master가 있는 클러스터에 항상 참여할 수 있는 것은 아닙니다.

Elasticsearch 노드의 권장 업그레이드 순서는 다음과 같습니다.

  1. 먼저 data 노드를 다음 순서대로 티어별로 업그레이드합니다.

    1. data_frozen 티어.
    2. data_cold 티어.
    3. data_warm 티어.
    4. data_hot 티어.
    5. 데이터 티어에 속하지 않는 기타 모든 data 노드(예: data_content 티어).
  2. master 적격 노드도 data 노드도 아닌 나머지 모든 노드를 업그레이드합니다. 이 그룹 내 순서는 중요하지 않습니다. 여기에는 다음 역할의 노드가 포함됩니다.

  3. 마지막으로 mastervoting_only master 적격 노드를 업그레이드합니다.

노드 정보 조회 API를 사용하여 특정 노드 역할의 노드 목록을 가져올 수 있습니다. 예를 들어 data_frozen에는 다음 요청을 사용합니다.

				GET /_nodes/data_frozen:true/_none
		

실수로 지정된 그룹 순서보다 먼저 노드를 업그레이드하면 여러 오류가 발생할 수 있으며, 이러한 오류는 모든 노드의 롤링 업그레이드가 완료될 때까지 계속될 수 있습니다.

data 노드 하위 그룹 내에서는 여러 샤드 할당 오류가 발생할 수 있으며, 이러한 오류는 해당 하위 그룹의 노드가 더 많이 업그레이드될 때까지 계속될 수 있습니다. 예를 들면 다음과 같이 표시될 수 있습니다.

cannot allocate replica shard to a node with version [x.x.x] since this is older than the primary version [y.y.y]
		

클러스터를 업그레이드하려면 모든 노드에 대해 다음 단계를 완료하세요.

  1. (선택 사항) 샤드 할당 비활성화

    data 노드를 종료하면 할당 프로세스는 해당 노드의 샤드를 클러스터의 다른 노드로 복제하기 전에 index.unassigned.node_left.delayed_timeout(기본값 1분) 동안 대기하며, 이로 인해 많은 I/O가 발생할 수 있습니다. 노드는 곧 다시 시작될 예정이므로 이 I/O는 불필요합니다. replica 할당을 비활성화한 뒤 data 노드를 종료하여 시간에 쫓기는 상황을 피할 수 있습니다.

    				PUT _cluster/settings
    					{
      "persistent": {
        "cluster.routing.allocation.enable": "primaries"
      }
    }
    		
  2. (선택 사항) 필수적이지 않은 인덱싱 중지 및 flush 수행

    업그레이드 중에도 인덱싱을 계속할 수 있지만, 필수적이지 않은 인덱싱을 일시적으로 중지하고 flush를 수행하면 샤드 복구가 훨씬 빨라집니다.

    				POST /_flush
    		
  3. (선택 사항) 활성 머신 러닝 작업 및 datafeed와 연결된 태스크를 일시적으로 중지

    업그레이드 중에 머신 러닝 작업을 계속 실행할 수 있지만 클러스터 부하가 증가합니다. 머신 러닝 노드를 종료하면 해당 작업은 자동으로 다른 노드로 이동하고 모델 상태를 복원합니다.

    참고

    8.x 이전에 생성된 모든 머신 러닝 인덱스는 업그레이드하기 전에 다시 인덱싱해야 하며, 8.19의 Upgrade Assistant에서 시작할 수 있습니다.

    • 업그레이드 모드 설정 API를 사용하여 머신 러닝 작업 및 datafeed와 연결된 태스크를 일시적으로 중지하고 새 작업이 열리지 않도록 합니다.

      				POST _ml/set_upgrade_mode?enabled=true
      		

      업그레이드 모드를 비활성화하면 작업은 자동으로 저장된 마지막 모델 상태를 사용하여 재개됩니다. 이 옵션은 업그레이드 중 활성 작업을 관리하는 오버헤드를 피할 수 있으며, datafeed를 명시적으로 중지하고 작업을 닫는 것보다 빠릅니다.

    • 모든 datafeed를 중지하고 모든 작업을 닫습니다. 이 옵션은 닫는 시점의 모델 상태를 저장합니다. 업그레이드 후 작업을 다시 열면 정확히 동일한 모델을 사용합니다. 하지만 최신 모델 상태를 저장하는 데는 업그레이드 모드를 사용하는 것보다 오래 걸리며, 작업이 많거나 모델 상태가 큰 작업이 있는 경우 특히 그렇습니다.

  4. 단일 노드 종료

    단일 노드를 종료하는 방법은 현재 Elasticsearch를 실행하는 방식에 따라 달라집니다. 예를 들어 systemd 또는 SysV init을 사용하는 경우 아래 명령을 실행합니다.

    • systemd로 Elasticsearch를 실행하는 경우:

      sudo systemctl stop elasticsearch.service
      		
    • SysV init으로 Elasticsearch를 실행하는 경우:

      sudo -i service elasticsearch stop
      		
  5. 종료한 노드의 버전 업그레이드

    Debian 또는 RPM 패키지를 사용하여 업그레이드하려면 다음을 수행합니다.

    • rpm 또는 dpkg를 사용하여 새 패키지를 설치합니다. 모든 파일은 운영 체제에 적합한 위치에 설치되며 Elasticsearch 구성 파일은 덮어쓰지 않습니다.

    zip 또는 압축된 tarball을 사용하여 업그레이드하려면 다음을 수행합니다.

    1. zip 또는 tarball을 디렉터리에 추출합니다. 외부 configdata 디렉터리를 사용하지 않는 경우 특히 중요합니다.

    2. ES_PATH_CONF 환경 변수를 설정하여 외부 config 디렉터리와 jvm.options 파일의 위치를 지정합니다. 외부 config 디렉터리를 사용하지 않는 경우 이전 구성을 새 설치 위치로 복사합니다.

    3. path.dataconfig/elasticsearch.yml에서 외부 데이터 디렉터리를 가리키도록 설정합니다. 외부 data 디렉터리를 사용하지 않는 경우 이전 데이터 디렉터리를 새 설치 위치로 복사합니다.

      중요

      모니터링 기능을 사용하는 경우 Elasticsearch를 업그레이드할 때 데이터 디렉터리를 재사용하세요. 모니터링은 데이터 디렉터리에 저장된 영구 UUID를 사용하여 고유한 Elasticsearch 노드를 식별합니다.

    4. path.logsconfig/elasticsearch.yml에서 로그를 저장하려는 위치를 가리키도록 설정합니다. 이 설정을 지정하지 않으면 아카이브를 추출한 디렉터리에 로그가 저장됩니다.

    zip 또는 tarball 패키지를 추출하면 elasticsearch-{{bare_version}} 디렉터리에 Elasticsearch config, datalogs 디렉터리가 포함됩니다.

    Elasticsearch를 업그레이드할 때 이러한 디렉터리가 삭제될 가능성이 없도록 Elasticsearch 디렉터리 밖으로 옮기는 것이 좋습니다. 새 위치를 지정하려면 ES_PATH_CONF 환경 변수와 path.datapath.logs 설정을 사용합니다. 자세한 내용은 중요 Elasticsearch 구성을 참조하세요.

    Debian 및 RPM 패키지는 각 운영 체제에 적합한 위치에 이러한 디렉터리를 배치합니다. 프로덕션에서는 deb 또는 rpm 패키지를 사용하는 것이 좋습니다.

  6. 종료한 노드의 구성 재정의 병합

    업그레이드 대상 버전에 맞게 구성을 조정하려면 필요한 Elasticsearch 구성 변경 사항을 적용합니다. 검토해야 할 가장 일반적인 설정은 다음과 같습니다.

    • cluster.initial_master_nodes를 롤링 업그레이드 수행 시 elasticsearch.yml에서 설정하지 않은 상태로 둡니다. 업그레이드된 각 노드는 기존 클러스터에 참여하므로 클러스터 부트스트래핑이 필요하지 않습니다. 모든 노드에 discovery.seed_hosts 또는 discovery.seed_providers 중 하나를 구성해야 합니다.
    • Elasticsearch는 버전에 따라 변경될 수 있는 권장 JVM 설정jvm.options에 포함하여 제공합니다. 구성 차이가 발생하지 않도록 모든 재정의가 업데이트된 버전의 jvm.options.d 파일에 복사되었는지 확인합니다.
    • Elasticsearch는 버전에 따라 변경될 수 있는 권장 로깅 설정log4j2.properties에 포함하여 제공합니다. 구성 차이가 발생하지 않도록 모든 재정의가 업데이트된 버전의 파일에 복사되었는지 확인합니다.
    • 노드 간 OS 수준 시스템 설정의 차이를 방지합니다. 노드를 추가하거나 다시 구축하면서 OS가 이전 OS의 복사본이 아닌 경우 이런 차이가 발생할 가능성이 가장 큽니다. 일반적인 설정과 적용 방법은 시스템 설정 구성 방법을 참조하세요.
  7. 종료한 노드의 모든 플러그인 업그레이드

    elasticsearch-plugin 스크립트를 사용하여 설치된 각 Elasticsearch 플러그인의 업그레이드 버전을 설치합니다. 노드를 업그레이드할 때 모든 플러그인도 업그레이드해야 합니다.

  8. 업그레이드된 노드 시작

    새로 업그레이드된 노드를 시작하고, 로그 파일을 확인하거나 _cat/nodes 요청을 제출하여 클러스터에 참여했는지 확인합니다.

    				GET _cat/nodes
    		
  9. 샤드 할당 다시 활성화

    data 노드의 경우 노드가 클러스터에 참여한 후 cluster.routing.allocation.enable 설정을 제거하여 샤드 할당을 활성화하고 노드 사용을 시작합니다.

    				PUT _cluster/settings
    					{
      "persistent": {
        "cluster.routing.allocation.enable": null
      }
    }
    		
  10. 노드 복구 대기

    다음 노드를 업그레이드하기 전에 클러스터가 status: green을 보고하여 샤드 할당을 완료할 때까지 기다립니다. 클러스터 상태 API를 제출하여 진행 상황을 확인할 수 있습니다.

    				GET _cluster/health
    		

    flush되지 않은 샤드는 복구하는 데 더 오래 걸릴 수 있습니다. CAT recovery API를 사용하여 개별 샤드의 복구 상태를 모니터링할 수 있습니다.

    				GET _cat/recovery?v=true&expand_wildcards=all&active_only=true
    		

    인덱싱을 중지했다면 복구가 완료되는 즉시 안전하게 인덱싱을 재개할 수 있습니다.

  11. 머신 러닝 작업 재시작

    머신 러닝 작업과 연결된 태스크를 일시적으로 중지했다면 업그레이드 모드 설정 API를 사용하여 활성 상태로 되돌립니다.

    				POST _ml/set_upgrade_mode?enabled=false
    		

    업그레이드 전에 모든 머신 러닝 작업을 닫았다면 Kibana에서 또는 작업 열기datafeed 시작 API를 사용하여 작업을 열고 datafeed를 시작합니다.

노드를 빠르게 연속해서 업그레이드할 계획이라면 전체 업그레이드 프로세스 동안 인덱싱을 중지하고 머신 러닝 작업과 feed를 일시 중지한 상태로 둘 수 있습니다. 각 노드를 재시작한 후에는 샤드 할당을 다시 활성화해야 합니다.

업그레이드된 노드를 모니터링하려면 CAT nodes API를 사용합니다.

				GET _cat/nodes?v=true&h=name,ip,role,master,version,uptime&s=uptime
		

롤링 업그레이드 중 문제가 발생하면 업그레이드 문제 해결을 참조하세요.

대상 버전에서 사용되지 않는 더 이상 사용되지 않는 클러스터 또는 인덱스 설정을 사용하는 Elasticsearch 클러스터를 업그레이드하면 해당 설정은 보관됩니다. 업그레이드 후 보관된 모든 설정을 제거해야 합니다. 자세한 내용은 보관된 설정을 참조하세요.

Elasticsearch 업그레이드에 성공했다면 나머지 Elastic Stack 구성 요소를 계속 업그레이드하세요.