Rolling upgrade
출처: 문서
본문
롤링 업그레이드
롤링 업그레이드는 "노드 교체 업그레이드"라고도 불리며, 실행 중인 클러스터에 거의 다운타임 없이 수행할 수 있어요. 노드를 개별적으로 중지하고 그 자리에서 업그레이드하는 방식이에요. 또는 새 버전을 실행하는 호스트로 노드를 하나씩 중지하고 교체할 수도 있어요. 이 과정 동안에도 클러스터에서 데이터 색인과 쿼리를 계속할 수 있어요.
이 문서는 롤링 업그레이드 절차에 대한 플랫폼에 종속되지 않는 개요를 다뤄요. 명령어, 스크립트, 설정 파일의 구체적인 예시는 롤링 업그레이드 랩을 참고하세요.
업그레이드 준비
OpenSearch 클러스터를 변경하기 전에 설정 파일을 백업하고 클러스터 상태와 인덱스의 스냅샷을 생성하는 것을 강력히 권장해요.
중요: OpenSearch 노드는 다운그레이드할 수 없어요. 업그레이드를 되돌려야 한다면 OpenSearch를 새로 설치하고 스냅샷에서 클러스터를 복원해야 해요. 업그레이드 절차를 시작하기 전에 스냅샷을 생성해서 원격 저장소에 보관하세요. 롤링 업그레이드는 인접한 메이저 버전 사이에서만 지원돼요. 예를 들어 OpenSearch 1.x에서 2.x로는 가능하지만 1.x에서 3.x로는 안 돼요. {: .important}
중요: 3.x.x로 업그레이드하려면 클러스터 버전이 최소 2.19.0이어야 해요. {: .important}
크로스 클러스터 복제
클러스터에서 크로스 클러스터 복제를 사용한다면 업그레이드할 때 다음 가이드라인을 따르세요:
- 단방향 복제: 팔로워 클러스터를 먼저 업그레이드하고, 그다음 리더 클러스터를 업그레이드하세요.
- 양방향 복제: 한 방향의 복제를 중지한 다음 두 클러스터를 모두 업그레이드하세요. 계속 활성 상태로 남아 있는 복제는 팔로워 클러스터를 먼저 업그레이드하고 그다음 리더 클러스터를 업그레이드하세요. 두 클러스터의 업그레이드가 끝나면 중지했던 복제를 재개하세요.
업그레이드 수행
-
시작하기 전에 OpenSearch 클러스터의 상태를 확인하세요. 데이터가 보존되도록 업그레이드 전에 인덱스나 샤드 할당 문제를 해결해야 해요. green 상태는 모든 프라이머리 샤드와 레플리카 샤드가 할당되었다는 뜻이에요. 자세한 내용은 클러스터 상태를 참고하세요. 다음 명령어는
_cluster/healthAPI 엔드포인트를 조회해요:GET "/_cluster/health?pretty"응답은 다음 예시와 비슷하게 나타나요:
{ "cluster_name":"opensearch-dev-cluster", "status":"green", "timed_out":false, "number_of_nodes":4, "number_of_data_nodes":4, "active_primary_shards":1, "active_shards":4, "relocating_shards":0, "initializing_shards":0, "unassigned_shards":0, "delayed_unassigned_shards":0, "number_of_pending_tasks":0, "number_of_in_flight_fetch":0, "task_max_waiting_in_queue_millis":0, "active_shards_percent_as_number":100.0 } -
노드를 오프라인으로 전환하는 동안 샤드 레플리카가 생성되지 않도록 샤드 복제를 비활성화하세요. 이렇게 하면 클러스터 내 노드에서 Lucene 인덱스 세그먼트 이동이 멈춰요.
_cluster/settingsAPI 엔드포인트를 조회해서 샤드 복제를 비활성화할 수 있어요:PUT "/_cluster/settings?pretty" { "persistent": { "cluster.routing.allocation.enable": "primaries" } }응답은 다음 예시와 비슷하게 나타나요:
{ "acknowledged" : true, "persistent" : { "cluster" : { "routing" : { "allocation" : { "enable" : "primaries" } } } }, "transient" : { } } -
트랜잭션 로그 항목을 Lucene 인덱스에 커밋하도록 클러스터에 flush 작업을 수행하세요:
POST "/_flush?pretty"응답은 다음 예시와 비슷하게 나타나요:
{ "_shards" : { "total" : 4, "successful" : 4, "failed" : 0 } } -
클러스터를 살펴보고 먼저 업그레이드할 노드를 정하세요. 노드는 다음 순서로 업그레이드해야 해요:
- 데이터 노드
- ingest/머신 러닝(ML)/코디네이팅 노드
- 클러스터 매니저 노드
클러스터 매니저 자격이 있는 노드는 마지막에 업그레이드해야 해요. OpenSearch 노드는 구버전을 실행하는 클러스터 매니저 노드가 있는 클러스터에는 합류할 수 있지만, 모든 클러스터 매니저 노드가 신버전을 실행하는 클러스터에는 합류할 수 없기 때문이에요. {: .important}
-
_cat/nodes엔드포인트를 조회해서 어떤 노드가 클러스터 매니저로 승격되었는지 확인하세요. 다음 명령어는 name, version, node.role, master 헤더만 요청하는 추가 쿼리 파라미터를 포함해요. OpenSearch 1.x 버전에서는 "master"라는 용어를 사용하는데, 이 용어는 더 이상 사용되지 않으며 OpenSearch 2.x 이상에서는 "cluster_manager"로 대체되었어요.GET "/_cat/nodes?v&h=name,version,node.role,master" | column -t응답은 다음 예시와 비슷하게 나타나요:
name version node.role master os-node-01 7.10.2 dimr - os-node-04 7.10.2 dimr - os-node-03 7.10.2 dimr - os-node-02 7.10.2 dimr * -
업그레이드하려는 노드를 중지하세요. Docker에서 실행 중이라면 컨테이너를 삭제할 때 컨테이너와 연결된 볼륨을 삭제하지 마세요. 새 OpenSearch 컨테이너가 기존 볼륨을 사용해요. 볼륨을 삭제하면 데이터가 손실돼요.
-
_cat/nodesAPI 엔드포인트를 조회해서 해당 노드가 클러스터에서 빠졌는지 확인하세요:GET "/_cat/nodes?v&h=name,version,node.role,master" | column -t응답은 다음 예시와 비슷하게 나타나요:
name version node.role master os-node-02 7.10.2 dimr * os-node-04 7.10.2 dimr - os-node-03 7.10.2 dimr -컨테이너가 중지되고 삭제되었기 때문에
os-node-01은 더 이상 목록에 나타나지 않아요. -
노드를 업그레이드하세요:
- Docker에서 실행 중이라면 원하는 버전의 OpenSearch를 실행하는 새 컨테이너를 배포하고, 삭제한 컨테이너와 같은 볼륨에 매핑하세요.
- Debian이나 RPM 패키지로 업그레이드한다면
rpm,yum,dpkg로 OpenSearch를 설치하고 서비스를 시작하세요. 위치와 파일이 보존되기 때문에 추가 설정은 필요 없어요. - Tarball로 업그레이드한다면 다음 작업이 필요해요:
jvm.options,opensearch.yml, 인증서,data폴더를 백업하세요.- 새 tarball의 압축을 풀어요.
- 기존
data디렉터리를 새data디렉터리로 복사하세요. 그렇지 않으면 데이터가 손실돼요. - 기존
opensearch.yml파일을 새config/opensearch.yml파일로 복사하세요. - 기존
jvm.options파일을 새config/jvm.options파일로 복사하세요. opensearch.yml파일에 나열된 TLS 인증서를./config/디렉터리로 복사하세요.- OpenSearch를 시작하세요.
-
새 노드에서 OpenSearch가 실행된 후
_cat/nodes엔드포인트를 조회해서 클러스터에 합류했는지 확인하세요:GET "/_cat/nodes?v&h=name,version,node.role,master" | column -t응답은 다음 예시와 비슷하게 나타나요:
name version node.role master os-node-02 7.10.2 dimr * os-node-04 7.10.2 dimr - os-node-01 7.10.2 dimr - os-node-03 7.10.2 dimr -예시 출력에서 새 OpenSearch 노드는 클러스터에 실행 버전을
7.10.2로 보고해요. 이것은compatibility.override_main_response_version의 결과인데, 버전을 확인하는 레거시 클라이언트로 클러스터에 연결할 때 사용돼요. 다음 명령어처럼/_nodesAPI 엔드포인트를 호출해서 노드 버전을 직접 확인할 수 있어요.<nodeName>을 여러분 노드의 이름으로 바꾸세요. 자세한 내용은 Nodes API를 참고하세요.GET "/_nodes/{nodeName}?pretty=true" | jq -r '.nodes | .[] | "\(.name) v\(.version)"'응답은 다음 예시와 비슷하게 나타나요:
os-node-01 v1.3.7 -
샤드 복제를 다시 활성화하세요:
PUT "/_cluster/settings?pretty" { "persistent": { "cluster.routing.allocation.enable": "all" } }응답은 다음 예시와 비슷하게 나타나요:
{ "acknowledged" : true, "persistent" : { "cluster" : { "routing" : { "allocation" : { "enable" : "all" } } } }, "transient" : { } } -
클러스터가 정상인지 확인하세요:
GET "/_cluster/health?pretty"응답은 다음 예시와 비슷하게 나타나요:
{ "cluster_name" : "opensearch-dev-cluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 4, "number_of_data_nodes" : 4, "discovered_master" : true, "active_primary_shards" : 1, "active_shards" : 4, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 } -
클러스터의 각 노드에 대해 2~11단계를 반복하세요. 클러스터 매니저 자격이 있는 노드는 마지막에 업그레이드하는 것을 잊지 마세요. 마지막 노드를 교체한 후
_cat/nodes엔드포인트를 조회해서 모든 노드가 클러스터에 합류했는지 확인하세요. 이제 클러스터는 새 버전의 OpenSearch로 부트스트랩되었어요._cat/nodesAPI 엔드포인트를 조회해서 클러스터 버전을 확인할 수 있어요:GET "/_cat/nodes?v&h=name,version,node.role,master" | column -t응답은 다음 예시와 비슷하게 나타나요:
name version node.role master os-node-04 1.3.7 dimr - os-node-02 1.3.7 dimr * os-node-01 1.3.7 dimr - os-node-03 1.3.7 dimr - -
이제 업그레이드가 완료되었으니 최신 기능과 수정 사항을 사용하기 시작할 수 있어요.
롤링 재시작
롤링 재시작은 실제 노드를 업그레이드한다는 점만 빼면 롤링 업그레이드와 같은 단계별 절차를 따라요. 롤링 재시작 중에는 노드를 한 번에 하나씩 재시작하는데, 보통 설정 변경을 적용하거나 인증서를 갱신하거나 시스템 수준 유지 보수를 수행하기 위해서예요. 클러스터 가용성은 끊기지 않아요.
롤링 재시작을 수행하려면 OpenSearch 바이너리나 컨테이너 이미지를 업그레이드하는 단계를 제외하고 업그레이드 수행에 나온 단계를 따르세요:
-
클러스터 상태 확인
클러스터 상태가 green이고 모든 샤드가 할당되었는지 확인하세요.
(롤링 업그레이드 절차의 1단계 참고) -
샤드 할당 비활성화
노드가 오프라인인 동안 OpenSearch가 샤드를 다시 할당하려 시도하지 않도록 하세요.
(롤링 업그레이드 절차의 2단계 참고) -
트랜잭션 로그 flush
복구 시간을 줄이기 위해 최근 작업을 Lucene에 커밋하세요.
(롤링 업그레이드 절차의 3단계 참고) -
다음에 재시작할 노드 확인
현재 클러스터 매니저 노드는 반드시 마지막에 재시작하세요.
(롤링 업그레이드 절차의 4단계 참고) -
현재 클러스터 매니저인 노드 확인
_cat/nodesAPI를 사용해서 현재 활성 클러스터 매니저가 어떤 노드인지 파악하세요.
(롤링 업그레이드 절차의 5단계 참고) -
노드 중지
노드를 정상적으로 종료하세요. 연결된 데이터 볼륨은 삭제하지 마세요.
(롤링 업그레이드 절차의 6단계 참고) -
노드가 클러스터를 떠났는지 확인
_cat/nodes로 더 이상 목록에 없는지 확인하세요.
(롤링 업그레이드 절차의 7단계 참고) -
노드 재시작
같은 노드(같은 바이너리/버전/설정)를 시작해서 클러스터에 다시 합류시키세요.
(롤링 업그레이드 절차의 8단계 참고 — 바이너리 업그레이드는 제외) -
재시작한 노드가 다시 합류했는지 확인
_cat/nodes를 확인해서 노드가 목록에 있고 정상인지 확인하세요.
(롤링 업그레이드 절차의 9단계 참고) -
샤드 할당 다시 활성화
샤드 이동 기능을 완전히 복원하세요.
(롤링 업그레이드 절차의 10단계 참고) -
클러스터 상태가 green인지 확인
다음 노드를 재시작하기 전에 안정성을 검증하세요.
(롤링 업그레이드 절차의 11단계 참고) -
나머지 모든 노드에 대해 반복
각 노드를 한 번에 하나씩 재시작하세요. 클러스터 매니저 역할이 가능한 노드는 마지막에 재시작하세요.
(롤링 업그레이드 절차의 12단계 참고 — 이번에도 업그레이드 단계는 없어요)
쿼럼을 유지하면서 노드를 순차적으로 재시작하기 때문에 롤링 재시작은 다운타임 없이 데이터 연속성까지 완전히 보장해요.
관련 문서
- 롤링 업그레이드 랩 -- 테스트 환경에서 롤링 업그레이드를 연습할 수 있는 단계별 안내가 담긴 실습 랩이에요.
- OpenSearch 구성
- Performance Analyzer
- OpenSearch Dashboards 설치 및 구성
- OpenSearch의 보안