본문 바로가기
WIKI 기술 지식 베이스

Rolling upgrade lab

원문 보기 위키 갱신

출처: 문서

본문

Rolling upgrade lab

여러분의 호환 가능한 호스트에서 이 단계를 따라 하면 OpenSearch 프로젝트가 rolling upgrades 테스트에 사용한 것과 동일한 클러스터 상태를 재현할 수 있어요. 이 실습은 개발 환경에서 업그레이드 과정을 테스트해 보고 싶을 때 유용해요.

이 실습에서 사용된 단계는 임의로 선택한 Amazon Elastic Compute Cloud (Amazon EC2) t2.large 인스턴스에서 Amazon Linux 2 커널 버전 Linux 5.10.162-141.675.amzn2.x86_64와 Docker 버전 20.10.17, build 100c701을 사용하여 검증되었어요. 인스턴스에는 20GiB gp2 Amazon EBS 루트 볼륨이 연결되어 제공되었어요. 이 사양은 참고용으로 포함된 것이며 OpenSearch 또는 OpenSearch Dashboards의 하드웨어 요구 사항을 나타내지 않아요.

이 절차에서 호스트 머신의 $HOME 경로에 대한 참조는 물결표 문자("~")로 표시되어 있어요. 이렇게 하면 지침을 더 이식하기 쉽게 만들 수 있어요. 절대 경로를 지정하고 싶다면 upgrade-demo-cluster.sh에 정의된 볼륨 경로를 수정하고 이 문서의 관련 명령어 전체에서 사용하여 여러분의 환경을 반영하세요.

환경 설정하기

이 문서의 단계를 따라가면서 여러분은 제공된 스크립트를 사용하여 컨테이너, 볼륨, 전용 Docker 네트워크를 포함한 여러 Docker 리소스를 정의하게 될 거예요. 과정을 다시 시작하고 싶다면 다음 명령어로 환경을 정리할 수 있어요.

docker container stop $(docker container ls -aqf name=os-); \
	docker container rm $(docker container ls -aqf name=os-); \
	docker volume rm -f $(docker volume ls -q | egrep 'data-0|repo-0'); \
	docker network rm opensearch-dev-net

{% include copy.html %}

이 명령어는 정규 표현식 os-*와 일치하는 컨테이너 이름, data-0* 및 repo-0*와 일치하는 데이터 볼륨, 그리고 opensearch-dev-net이라는 Docker 네트워크를 제거해요. 호스트에서 다른 Docker 리소스가 실행 중이라면 다른 리소스를 의도치 않게 제거하지 않도록 명령어를 검토하고 수정해야 해요. 이 명령어는 메모리 스와핑 동작과 같은 호스트 구성 변경 사항을 되돌리지 않아요. {: .warning}

호스트를 선택한 후 실습을 시작할 수 있어요:

  1. Linux 배포판과 시스템 아키텍처에 맞는 Docker Engine 버전을 설치하세요.

  2. 호스트에서 중요한 시스템 설정을 구성하세요:

    1. 성능 향상을 위해 호스트에서 메모리 페이징 및 스와핑을 비활성화하세요:
      sudo swapoff -a
      
      {% include copy.html %}
    2. OpenSearch에서 사용할 수 있는 메모리 맵의 수를 늘리세요. sysctl 구성 파일을 편집하기 위해 여세요. 이 예제 명령어는 vim 텍스트 편집기를 사용하지만, 사용 가능한 아무 텍스트 편집기나 사용할 수 있어요:
      sudo vim /etc/sysctl.conf
      
      {% include copy.html %}
    3. /etc/sysctl.conf에 다음 줄을 추가하세요:
      vm.max_map_count=262144
      
      {% include copy.html %}
    4. 저장하고 종료하세요. vi 또는 vim 텍스트 편집기를 사용하는 경우 명령 모드로 전환하여 :wq! 또는 ZZ를 입력하면 저장하고 종료할 수 있어요.
    5. 구성 변경 사항을 적용하세요:
      sudo sysctl -p
      
      {% include copy.html %}
  3. 홈 디렉터리에 deploy라는 새 디렉터리를 만들고 이동하세요. 배포 스크립트, 구성 파일 및 TLS 인증서의 경로에 ~/deploy를 사용할 거예요:

    mkdir ~/deploy && cd ~/deploy
    

    {% include copy.html %}

  4. OpenSearch 프로젝트 documentation-website 리포지토리에서 upgrade-demo-cluster.sh를 다운로드하세요:

    wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/upgrade-demo-cluster.sh
    

    {% include copy.html %}

  5. 수정 없이 스크립트를 실행하여 OpenSearch를 실행하는 네 개의 컨테이너와 OpenSearch Dashboards를 실행하는 하나의 컨테이너를 사용자 정의 자체 서명 TLS 인증서와 미리 정의된 내부 사용자 세트로 배포하세요:

    sh upgrade-demo-cluster.sh
    

    {% include copy.html %}

  6. 컨테이너가 성공적으로 시작되었는지 확인하세요:

    docker container ls
    

    {% include copy.html %}

    응답은 다음과 유사하게 나타나야 해요:

    CONTAINER ID   IMAGE                                           COMMAND                  CREATED          STATUS          PORTS                                                                                                      NAMES
    6e5218c8397d   opensearchproject/opensearch-dashboards:1.3.7   "./opensearch-dashbo…"   24 seconds ago   Up 22 seconds   0.0.0.0:5601->5601/tcp, :::5601->5601/tcp                                                                  os-dashboards-01
    cb5188308b21   opensearchproject/opensearch:1.3.7              "./opensearch-docker…"   25 seconds ago   Up 24 seconds   9300/tcp, 9650/tcp, 0.0.0.0:9204->9200/tcp, :::9204->9200/tcp, 0.0.0.0:9604->9600/tcp, :::9604->9600/tcp   os-node-04
    71b682aa6671   opensearchproject/opensearch:1.3.7              "./opensearch-docker…"   26 seconds ago   Up 25 seconds   9300/tcp, 9650/tcp, 0.0.0.0:9203->9200/tcp, :::9203->9200/tcp, 0.0.0.0:9603->9600/tcp, :::9603->9600/tcp   os-node-03
    f894054a9378   opensearchproject/opensearch:1.3.7              "./opensearch-docker…"   27 seconds ago   Up 26 seconds   9300/tcp, 9650/tcp, 0.0.0.0:9202->9200/tcp, :::9202->9200/tcp, 0.0.0.0:9602->9600/tcp, :::9602->9600/tcp   os-node-02
    2e9c91c959cd   opensearchproject/opensearch:1.3.7              "./opensearch-docker…"   28 seconds ago   Up 27 seconds   9300/tcp, 9650/tcp, 0.0.0.0:9201->9200/tcp, :::9201->9200/tcp, 0.0.0.0:9601->9600/tcp, :::9601->9600/tcp   os-node-01
    
  7. OpenSearch가 클러스터를 초기화하는 데 필요한 시간은 기본 호스트의 성능에 따라 달라져요. 컨테이너 로그를 따라가면 부트스트랩 과정에서 OpenSearch가 무엇을 하고 있는지 볼 수 있어요:

    1. 터미널 창에서 컨테이너 os-node-01의 로그를 표시하려면 다음 명령어를 입력하세요:

      docker logs -f os-node-01
      

      {% include copy.html %}

    2. 노드가 준비되면 다음 예제와 유사한 로그 항목이 보일 거예요:

      다음은 예시예요:

      [INFO ][o.o.s.c.ConfigurationRepository] [os-node-01] Node 'os-node-01' initialized
      
    3. Ctrl+C를 눌러 컨테이너 로그 추적을 중지하고 명령 프롬프트로 돌아가세요.

  8. cURL을 사용하여 OpenSearch REST API를 쿼리하세요. 다음 명령어에서는 호스트 포트 9201로 요청을 보내 os-node-01을 쿼리하며, 이 포트는 컨테이너의 포트 9200에 매핑되어 있어요:

    curl -s "https://localhost:9201" -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 유사하게 나타나야 해요:

    {
        "name" : "os-node-01",
        "cluster_name" : "opensearch-dev-cluster",
        "cluster_uuid" : "g1MMknuDRuuD9IaaNt56KA",
        "version" : {
            "distribution" : "opensearch",
            "number" : "1.3.7",
            "build_type" : "tar",
            "build_hash" : "db18a0d5a08b669fb900c00d81462e221f4438ee",
            "build_date" : "2022-12-07T22:59:20.186520Z",
            "build_snapshot" : false,
            "lucene_version" : "8.10.1",
            "minimum_wire_compatibility_version" : "6.8.0",
            "minimum_index_compatibility_version" : "6.0.0-beta1"
        },
        "tagline" : "The OpenSearch Project: https://opensearch.org/"
    }
    

    팁: curl에 -s 옵션을 사용하면 진행률 표시기와 오류 메시지를 숨길 수 있어요. {: .tip}

데이터 추가 및 OpenSearch Security 구성

이제 OpenSearch 클러스터가 실행 중이니 데이터를 추가하고 일부 OpenSearch Security 설정을 구성할 차례예요. 추가한 데이터와 구성한 설정은 버전 업그레이드가 완료된 후에 다시 확인될 거예요.

이 섹션은 두 부분으로 나눌 수 있어요:

REST API로 데이터 인덱싱

  1. 샘플 필드 매핑 파일을 다운로드하세요:

    wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce-field_mappings.json
    

    {% include copy.html %}

  2. 다음으로, 이 인덱스에 수집할 벌크 데이터를 다운로드하세요:

    wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce.ndjson
    

    {% include copy.html %}

  3. Create index API를 사용하여 ecommerce-field_mappings.json에 정의된 매핑으로 인덱스를 생성하세요:

    curl -H "Content-Type: application/json" \
       -X PUT "https://localhost:9201/ecommerce?pretty" \
       --data-binary "@ecommerce-field_mappings.json" \
       -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 유사하게 나타나야 해요:

    {
       "acknowledged" : true,
       "shards_acknowledged" : true,
       "index" : "ecommerce"
    }
    
  4. Bulk API를 사용하여 ecommerce.ndjson에서 새 ecommerce 인덱스로 데이터를 추가하세요:

    curl -H "Content-Type: application/x-ndjson" \
       -X PUT "https://localhost:9201/ecommerce/_bulk?pretty" \
       --data-binary "@ecommerce.ndjson" \
       -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 유사하게 나타나야 해요 (일부 생략):

    {
       "took" : 3323,
       "errors" : false,
       "items" : [
          ...
          "index" : {
             "_index" : "ecommerce",
             "_type" : "_doc",
             "_id" : "4674",
             "_version" : 1,
             "result" : "created",
             "_shards" : {
                "total" : 2,
                "successful" : 2,
                "failed" : 0
             },
             "_seq_no" : 4674,
             "_primary_term" : 1,
             "status" : 201
          }
       ]
    }
    
  5. 검색 쿼리를 통해 데이터가 성공적으로 인덱싱되었는지 확인할 수도 있어요. 다음 쿼리는 키워드 `customer_first_name`이 `Sonya`인 문서의 수를 반환해요:

    ```bash curl -H 'Content-Type: application/json' \ -X GET "https://localhost:9201/ecommerce/_search?pretty=true&filter_path=hits.total" \ -d'{"query":{"match":{"customer_first_name":"Sonya"}}}' \ -ku admin: ``` {% include copy.html %}

    응답은 다음과 유사하게 나타나야 해요:

    {
       "hits" : {
          "total" : {
             "value" : 106,
             "relation" : "eq"
          }
       }
    }
    

OpenSearch Dashboards를 사용하여 데이터 추가

  1. 웹 브라우저를 열고 Docker 호스트의 포트 5601로 이동하세요 (예: https://<HOST_ADDRESS>:5601). OpenSearch Dashboards가 실행 중이고 브라우저 클라이언트에서 호스트에 네트워크 액세스가 가능하면 로그인 페이지로 리디렉션될 거예요.
    1. 웹 브라우저에서 TLS 인증서가 자체 서명되어 오류가 발생하면 브라우저의 인증서 확인을 우회해야 할 수도 있어요. 인증서 확인 우회에 대한 정보는 브라우저의 문서를 참조하세요. 각 인증서의 공통 이름(CN)은 클러스터 내 통신을 위해 컨테이너 및 노드 이름에 따라 생성되므로 브라우저에서 호스트에 연결해도 여전히 "유효하지 않은 CN" 경고가 표시될 거예요.
  2. 기본 사용자 이름(admin)과 비밀번호(admin)를 입력하세요.
  3. OpenSearch Dashboards 홈 페이지에서 Add sample data를 선택하세요.
  4. Sample web logs 아래에서 Add data를 선택하세요.
    1. 선택 사항: View data를 선택하여 [Logs] Web Traffic 대시보드를 검토하세요.
  5. 메뉴 버튼을 선택하여 탐색 창을 열고 Security > Internal users로 이동하세요.
  6. Create internal user를 선택하세요.
  7. 사용자 이름과 비밀번호를 입력하세요.
  8. Backend role 필드에 admin을 입력하세요.
  9. Create를 선택하세요.

중요한 파일 백업

클러스터를 변경하기 전에 항상 백업을 만들어 두세요, 특히 프로덕션 환경에서 실행 중인 경우에는 더욱 그래요.

이 섹션에서는 다음을 수행할 거예요:

스냅샷 리포지토리 등록

  1. upgrade-demo-cluster.sh에 의해 매핑된 볼륨을 사용하여 리포지토리를 등록하세요:

    curl -H 'Content-Type: application/json' \
       -X PUT "https://localhost:9201/_snapshot/snapshot-repo?pretty" \
       -d '{"type":"fs","settings":{"location":"/usr/share/opensearch/snapshots"}}' \
       -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 유사하게 나타나야 해요:

    {
       "acknowledged" : true
    }
    
  2. 선택 사항: 리포지토리가 성공적으로 생성되었는지 확인하기 위해 추가 확인을 수행하세요:

    curl -H 'Content-Type: application/json' \
       -X POST "https://localhost:9201/_snapshot/snapshot-repo/_verify?timeout=0s&master_timeout=50s&pretty" \
       -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 유사하게 나타나야 해요:

    {
       "nodes" : {
          "UODBXfAlRnueJ67grDxqgw" : {
             "name" : "os-node-03"
          },
          "14I_OyBQQXio8nmk0xsVcQ" : {
             "name" : "os-node-04"
          },
          "tQp3knPRRUqHvFNKpuD2vQ" : {
             "name" : "os-node-02"
          },
          "rPe8D6ssRgO5twIP00wbCQ" : {
             "name" : "os-node-01"
          }
       }
    }
    

스냅샷 생성

스냅샷은 클러스터의 인덱스와 상태에 대한 백업이에요. 자세한 내용은 Snapshots를 참조하세요.

  1. 모든 인덱스와 클러스터 상태를 포함하는 스냅샷을 생성하세요:

    curl -H 'Content-Type: application/json' \
       -X PUT "https://localhost:9201/_snapshot/snapshot-repo/cluster-snapshot-v137?wait_for_completion=true&pretty" \
       -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 유사하게 나타나야 해요:

    {
       "snapshot" : {
          "snapshot" : "cluster-snapshot-v137",
          "uuid" : "-IYB8QNPShGOTnTtMjBjNg",
          "version_id" : 135248527,
          "version" : "1.3.7",
          "indices" : [
             "opensearch_dashboards_sample_data_logs",
             ".opendistro_security",
             "security-auditlog-2023.02.27",
             ".kibana_1",
             ".kibana_92668751_admin_1",
             "ecommerce",
             "security-auditlog-2023.03.06",
             "security-auditlog-2023.02.28",
             "security-auditlog-2023.03.07"
          ],
          "data_streams" : [ ],
          "include_global_state" : true,
          "state" : "SUCCESS",
          "start_time" : "2023-03-07T18:33:00.656Z",
          "start_time_in_millis" : 1678213980656,
          "end_time" : "2023-03-07T18:33:01.471Z",
          "end_time_in_millis" : 1678213981471,
          "duration_in_millis" : 815,
          "failures" : [ ],
          "shards" : {
             "total" : 9,
             "failed" : 0,
             "successful" : 9
          }
       }
    }
    

보안 설정 백업

클러스터 관리자는 다음 방법 중 하나를 사용하여 OpenSearch Security 설정을 수정할 수 있어요:

  • YAML 파일을 수정하고 securityadmin.sh 실행
  • 관리자 인증서를 사용하여 REST API 요청
  • OpenSearch Dashboards로 변경

선택한 방법에 관계없이 OpenSearch Security는 구성 정보를 .opendistro_security라는 특수 시스템 인덱스에 기록해요. 이 시스템 인덱스는 업그레이드 과정에서 보존되며, 생성한 스냅샷에도 저장돼요. 하지만 시스템 인덱스를 복원하려면 admin 인증서가 부여하는 상승된 액세스 권한이 필요해요. 자세한 내용은 System indexes 및 Configuring TLS certificates를 참조하세요.

또한 OpenSearch 노드 중 하나에서 securityadmin.sh를 -backup 옵션과 함께 실행하여 OpenSearch Security 설정을 YAML 파일로 내보낼 수 있어요. 이 YAML 파일을 사용하여 기존 구성으로 .opendistro_security 인덱스를 다시 초기화할 수 있어요. 다음 단계에서는 이러한 백업 파일을 생성하고 호스트에 복사하여 저장하는 방법을 안내해 드릴게요.

  1. os-node-01과 대화형 의사 TTY 세션을 여세요:

    docker exec -it os-node-01 bash
    

    {% include copy.html %}

  2. backups라는 디렉터리를 만들고 이동하세요:

    mkdir /usr/share/opensearch/backups && cd /usr/share/opensearch/backups
    

    {% include copy.html %}

  3. securityadmin.sh를 사용하여 /usr/share/opensearch/backups/에 OpenSearch Security 설정의 백업을 생성하세요:

    /usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \
       -backup /usr/share/opensearch/backups \
       -icl \
       -nhnv \
       -cacert /usr/share/opensearch/config/root-ca.pem \
       -cert /usr/share/opensearch/config/admin.pem \
       -key /usr/share/opensearch/config/admin-key.pem
    

    {% include copy.html %}

    응답은 다음과 유사하게 나타나야 해요:

    Security Admin v7
    Will connect to localhost:9300 ... done
    Connected as CN=A,OU=DOCS,O=OPENSEARCH,L=PORTLAND,ST=OREGON,C=US
    OpenSearch Version: 1.3.7
    OpenSearch Security Version: 1.3.7.0
    Contacting opensearch cluster 'opensearch' and wait for YELLOW clusterstate ...
    Clustername: opensearch-dev-cluster
    Clusterstate: GREEN
    Number of nodes: 4
    Number of data nodes: 4
    .opendistro_security index already exists, so we do not need to create one.
    Will retrieve '/config' into /usr/share/opensearch/backups/config.yml 
       SUCC: Configuration for 'config' stored in /usr/share/opensearch/backups/config.yml
    Will retrieve '/roles' into /usr/share/opensearch/backups/roles.yml 
       SUCC: Configuration for 'roles' stored in /usr/share/opensearch/backups/roles.yml
    Will retrieve '/rolesmapping' into /usr/share/opensearch/backups/roles_mapping.yml 
       SUCC: Configuration for 'rolesmapping' stored in /usr/share/opensearch/backups/roles_mapping.yml
    Will retrieve '/internalusers' into /usr/share/opensearch/backups/internal_users.yml 
       SUCC: Configuration for 'internalusers' stored in /usr/share/opensearch/backups/internal_users.yml
    Will retrieve '/actiongroups' into /usr/share/opensearch/backups/action_groups.yml 
       SUCC: Configuration for 'actiongroups' stored in /usr/share/opensearch/backups/action_groups.yml
    Will retrieve '/tenants' into /usr/share/opensearch/backups/tenants.yml 
       SUCC: Configuration for 'tenants' stored in /usr/share/opensearch/backups/tenants.yml
    Will retrieve '/nodesdn' into /usr/share/opensearch/backups/nodes_dn.yml 
       SUCC: Configuration for 'nodesdn' stored in /usr/share/opensearch/backups/nodes_dn.yml
    Will retrieve '/whitelist' into /usr/share/opensearch/backups/whitelist.yml 
       SUCC: Configuration for 'whitelist' stored in /usr/share/opensearch/backups/whitelist.yml
    Will retrieve '/audit' into /usr/share/opensearch/backups/audit.yml 
       SUCC: Configuration for 'audit' stored in /usr/share/opensearch/backups/audit.yml
    
  4. 선택 사항: TLS 인증서를 위한 백업 디렉터리를 만들고 인증서 사본을 저장하세요. 고유한 TLS 인증서를 사용하는 경우 각 노드에 대해 이 작업을 반복하세요:

    mkdir /usr/share/opensearch/backups/certs && cp /usr/share/opensearch/config/*pem /usr/share/opensearch/backups/certs/
    

    {% include copy.html %}

  5. 의사 TTY 세션을 종료하세요:

    exit
    

    {% include copy.html %}

  6. 파일을 호스트로 복사하세요:

    docker cp os-node-01:/usr/share/opensearch/backups ~/deploy/
    

    {% include copy.html %}

업그레이드 수행하기

이제 클러스터가 구성되었고 중요한 파일과 설정을 백업했으니, 버전 업그레이드를 시작할 때예요.

이 섹션에 포함된 일부 단계(예: 샤드 복제 비활성화 및 트랜잭션 로그 플러시)는 클러스터 성능에 영향을 미치지 않아요. 이러한 단계는 모범 사례로 포함되었으며, 업그레이드 내내 클라이언트가 기존 데이터를 쿼리하거나 문서를 인덱싱하는 등 OpenSearch 클러스터와 계속 상호 작용하는 상황에서 클러스터 성능을 크게 향상시킬 수 있어요. {: .note}

  1. 샤드 복제를 비활성화하여 클러스터 내에서 Lucene 인덱스 세그먼트의 이동을 중지하세요:

    curl -H 'Content-type: application/json' \
       -X PUT "https://localhost:9201/_cluster/settings?pretty" \
       -d'{"persistent":{"cluster.routing.allocation.enable":"primaries"}}' \
       -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    {
       "acknowledged" : true,
       "persistent" : {
          "cluster" : {
             "routing" : {
                "allocation" : {
                   "enable" : "primaries"
                }
             }
          }
       },
       "transient" : { }
    }
    
  2. 트랜잭션 로그 항목을 Lucene 인덱스에 커밋하기 위해 클러스터에 플러시 작업을 수행하세요:

    curl -X POST "https://localhost:9201/_flush?pretty" -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    {
       "_shards" : {
          "total" : 20,
          "successful" : 20,
          "failed" : 0
       }
    }
    
  3. 업그레이드할 노드를 선택하세요. 이 데모 클러스터의 모든 노드는 클러스터 관리자 자격이 있으므로 노드를 어떤 순서로든 업그레이드할 수 있어요. 다음 명령은 마운트된 데이터 볼륨을 제거하지 않고 컨테이너 os-node-01을 중지하고 제거해요:

    docker stop os-node-01 && docker container rm os-node-01
    

    {% include copy.html %}

  4. 원래 컨테이너와 동일한 매핑된 볼륨을 사용하여 opensearchproject/opensearch:2.5.0 이미지로 os-node-01이라는 새 컨테이너를 시작하세요:

    docker run -d \
       -p 9201:9200 -p 9601:9600 \
       -e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \
       --ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \
       -v data-01:/usr/share/opensearch/data \
       -v repo-01:/usr/share/opensearch/snapshots \
       -v ~/deploy/opensearch-01.yml:/usr/share/opensearch/config/opensearch.yml \
       -v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \
       -v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \
       -v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \
       -v ~/deploy/os-node-01.pem:/usr/share/opensearch/config/os-node-01.pem \
       -v ~/deploy/os-node-01-key.pem:/usr/share/opensearch/config/os-node-01-key.pem \
       --network opensearch-dev-net \
       --ip 172.20.0.11 \
       --name os-node-01 \
       opensearchproject/opensearch:2.5.0
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    d26d0cb2e1e93e9c01bb00f19307525ef89c3c3e306d75913860e6542f729ea4
    
  5. 선택 사항: 클러스터를 쿼리하여 어떤 노드가 클러스터 관리자 역할을 하는지 확인하세요. 프로세스 중 언제든지 이 명령을 실행하여 새 클러스터 관리자가 선출되는 시점을 확인할 수 있어요:

    curl -s "https://localhost:9201/_cat/nodes?v&h=name,version,node.role,master" \
       -ku admin:<custom-admin-password> | column -t
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    name        version  node.role  master
    os-node-01  2.5.0    dimr       -
    os-node-04  1.3.7    dimr       *
    os-node-02  1.3.7    dimr       -
    os-node-03  1.3.7    dimr       -
    
  6. 선택 사항: 노드가 제거되고 교체됨에 따라 샤드 할당이 어떻게 변경되는지 확인하기 위해 클러스터를 쿼리하세요. 프로세스 중 언제든지 이 명령을 실행하여 샤드 상태가 어떻게 변경되는지 확인할 수 있어요:

    curl -s "https://localhost:9201/_cat/shards" \
       -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    security-auditlog-2023.03.06           0 p STARTED       53 214.5kb 172.20.0.13 os-node-03
    security-auditlog-2023.03.06           0 r UNASSIGNED                           
    .kibana_1                              0 p STARTED        3  14.5kb 172.20.0.12 os-node-02
    .kibana_1                              0 r STARTED        3  14.5kb 172.20.0.13 os-node-03
    ecommerce                              0 p STARTED     4675   3.9mb 172.20.0.12 os-node-02
    ecommerce                              0 r STARTED     4675   3.9mb 172.20.0.14 os-node-04
    security-auditlog-2023.03.07           0 p STARTED       37 175.7kb 172.20.0.14 os-node-04
    security-auditlog-2023.03.07           0 r UNASSIGNED                           
    .opendistro_security                   0 p STARTED       10  67.9kb 172.20.0.12 os-node-02
    .opendistro_security                   0 r STARTED       10  67.9kb 172.20.0.13 os-node-03
    .opendistro_security                   0 r STARTED       10  64.5kb 172.20.0.14 os-node-04
    .opendistro_security                   0 r UNASSIGNED                           
    security-auditlog-2023.02.27           0 p STARTED        4  80.5kb 172.20.0.12 os-node-02
    security-auditlog-2023.02.27           0 r UNASSIGNED                           
    security-auditlog-2023.02.28           0 p STARTED        6 104.1kb 172.20.0.14 os-node-04
    security-auditlog-2023.02.28           0 r UNASSIGNED                           
    opensearch_dashboards_sample_data_logs 0 p STARTED    14074   9.1mb 172.20.0.12 os-node-02
    opensearch_dashboards_sample_data_logs 0 r STARTED    14074   8.9mb 172.20.0.13 os-node-03
    .kibana_92668751_admin_1               0 r STARTED       33  37.3kb 172.20.0.13 os-node-03
    .kibana_92668751_admin_1               0 p STARTED       33  37.3kb 172.20.0.14 os-node-04
    
  7. os-node-02를 중지하세요:

    docker stop os-node-02 && docker container rm os-node-02
    

    {% include copy.html %}

  8. 원래 컨테이너와 동일한 매핑된 볼륨을 사용하여 opensearchproject/opensearch:2.5.0 이미지로 os-node-02라는 새 컨테이너를 시작하세요:

    docker run -d \
       -p 9202:9200 -p 9602:9600 \
       -e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \
       --ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \
       -v data-02:/usr/share/opensearch/data \
       -v repo-01:/usr/share/opensearch/snapshots \
       -v ~/deploy/opensearch-02.yml:/usr/share/opensearch/config/opensearch.yml \
       -v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \
       -v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \
       -v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \
       -v ~/deploy/os-node-02.pem:/usr/share/opensearch/config/os-node-02.pem \
       -v ~/deploy/os-node-02-key.pem:/usr/share/opensearch/config/os-node-02-key.pem \
       --network opensearch-dev-net \
       --ip 172.20.0.12 \
       --name os-node-02 \
       opensearchproject/opensearch:2.5.0
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    7b802865bd6eb420a106406a54fc388ed8e5e04f6cbd908c2a214ea5ce72ac00
    
  9. os-node-03를 중지하세요:

    docker stop os-node-03 && docker container rm os-node-03
    

    {% include copy.html %}

  10. 원래 컨테이너와 동일한 매핑된 볼륨을 사용하여 opensearchproject/opensearch:2.5.0 이미지로 os-node-03라는 새 컨테이너를 시작하세요:

    docker run -d \
       -p 9203:9200 -p 9603:9600 \
       -e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \
       --ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \
       -v data-03:/usr/share/opensearch/data \
       -v repo-01:/usr/share/opensearch/snapshots \
       -v ~/deploy/opensearch-03.yml:/usr/share/opensearch/config/opensearch.yml \
       -v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \
       -v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \
       -v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \
       -v ~/deploy/os-node-03.pem:/usr/share/opensearch/config/os-node-03.pem \
       -v ~/deploy/os-node-03-key.pem:/usr/share/opensearch/config/os-node-03-key.pem \
       --network opensearch-dev-net \
       --ip 172.20.0.13 \
       --name os-node-03 \
       opensearchproject/opensearch:2.5.0
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    d7f11726841a89eb88ff57a8cbecab392399f661a5205f0c81b60a995fc6c99d
    
  11. os-node-04를 중지하세요:

    docker stop os-node-04 && docker container rm os-node-04
    

    {% include copy.html %}

  12. 원래 컨테이너와 동일한 매핑된 볼륨을 사용하여 opensearchproject/opensearch:2.5.0 이미지로 os-node-04라는 새 컨테이너를 시작하세요:

    docker run -d \
       -p 9204:9200 -p 9604:9600 \
       -e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \
       --ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \
       -v data-04:/usr/share/opensearch/data \
       -v repo-01:/usr/share/opensearch/snapshots \
       -v ~/deploy/opensearch-04.yml:/usr/share/opensearch/config/opensearch.yml \
       -v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \
       -v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \
       -v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \
       -v ~/deploy/os-node-04.pem:/usr/share/opensearch/config/os-node-04.pem \
       -v ~/deploy/os-node-04-key.pem:/usr/share/opensearch/config/os-node-04-key.pem \
       --network opensearch-dev-net \
       --ip 172.20.0.14 \
       --name os-node-04 \
       opensearchproject/opensearch:2.5.0
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    26f8286ab11e6f8dcdf6a83c95f265172f9557578a1b292af84c6f5ef8738e1d
    
  13. 클러스터가 새 버전을 실행 중인지 확인하세요:

    curl -s "https://localhost:9201/_cat/nodes?v&h=name,version,node.role,master" \
       -ku admin:<custom-admin-password> | column -t
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    name        version  node.role  master
    os-node-01  2.5.0    dimr       *
    os-node-02  2.5.0    dimr       -
    os-node-04  2.5.0    dimr       -
    os-node-03  2.5.0    dimr       -
    
  14. 마지막으로 업그레이드해야 할 구성 요소는 OpenSearch Dashboards 노드예요. 먼저 이전 컨테이너를 중지하고 제거하세요:

    docker stop os-dashboards-01 && docker rm os-dashboards-01
    

    {% include copy.html %}

  15. 대상 버전의 OpenSearch Dashboards를 실행하는 새 컨테이너를 생성하세요:

    docker run -d \
       -p 5601:5601 --expose 5601 \
       -v ~/deploy/opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml \
       -v ~/deploy/root-ca.pem:/usr/share/opensearch-dashboards/config/root-ca.pem \
       -v ~/deploy/os-dashboards-01.pem:/usr/share/opensearch-dashboards/config/os-dashboards-01.pem \
       -v ~/deploy/os-dashboards-01-key.pem:/usr/share/opensearch-dashboards/config/os-dashboards-01-key.pem \
       --network opensearch-dev-net \
       --ip 172.20.0.10 \
       --name os-dashboards-01 \
       opensearchproject/opensearch-dashboards:2.5.0
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    310de7a24cf599ca0b39b241db07fa8865592ebe15b6f5fda26ad19d8e1c1e09
    
  16. OpenSearch Dashboards 컨테이너가 제대로 시작되었는지 확인하세요. 다음과 같은 명령을 사용하여 https://<HOST_ADDRESS>:5601에 대한 요청이 /app/login?으로 리디렉션되는지(HTTP 상태 코드 302) 확인할 수 있어요:

    curl https://localhost:5601 -kI
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    HTTP/1.1 302 Found
    location: /app/login?
    osd-name: opensearch-dashboards-dev
    cache-control: private, no-cache, no-store, must-revalidate
    set-cookie: security_authentication=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure; HttpOnly; Path=/
    content-length: 0
    Date: Wed, 08 Mar 2023 15:36:53 GMT
    Connection: keep-alive
    Keep-Alive: timeout=120
    
  17. 복제본 샤드 할당을 다시 활성화하세요:

    curl -H 'Content-type: application/json' \
       -X PUT "https://localhost:9201/_cluster/settings?pretty" \
       -d'{"persistent":{"cluster.routing.allocation.enable":"all"}}' \
       -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    {
       "acknowledged" : true,
       "persistent" : {
          "cluster" : {
             "routing" : {
                "allocation" : {
                   "enable" : "all"
                }
             }
          }
       },
       "transient" : { }
    }
    

업그레이드 확인하기

보안 OpenSearch 클러스터를 성공적으로 배포하고, 데이터를 인덱싱하고, 샘플 데이터로 채워진 대시보드를 생성하고, 새 내부 사용자를 생성하고, 중요한 파일을 백업하고, 클러스터를 버전 1.3.7에서 2.5.0으로 업그레이드했어요. OpenSearch 및 OpenSearch Dashboards를 계속 탐색하고 실험하기 전에 업그레이드 결과를 확인해야 해요.

이 클러스터의 경우 업그레이드 후 확인 단계에는 다음 확인이 포함될 수 있어요:

새 실행 버전 확인하기

  1. OpenSearch 노드의 현재 실행 버전을 확인하세요:

    curl -s "https://localhost:9201/_cat/nodes?v&h=name,version,node.role,master" \
       -ku admin:<custom-admin-password> | column -t
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    name        version  node.role  master
    os-node-01  2.5.0    dimr       *
    os-node-02  2.5.0    dimr       -
    os-node-04  2.5.0    dimr       -
    os-node-03  2.5.0    dimr       -
    
  2. OpenSearch Dashboards의 현재 실행 버전을 확인하세요:

    1. 옵션 1: 웹 인터페이스에서 OpenSearch Dashboards 버전을 확인하세요.
      1. 웹 브라우저를 열고 Docker 호스트의 포트 5601로 이동하세요(예: https://<HOST_ADDRESS>:5601).
      2. 기본 사용자 이름(admin)과 기본 비밀번호(admin)로 로그인하세요.
      3. 오른쪽 상단의 도움말 버튼을 선택하세요. 버전이 팝업 창에 표시돼요.
      4. 도움말 버튼을 다시 선택하여 팝업 창을 닫으세요.
    2. 옵션 2: manifest.yml을 검사하여 OpenSearch Dashboards 버전을 확인하세요.
      1. 명령줄에서 OpenSearch Dashboards 컨테이너와 대화형 pseudo-TTY 세션을 여세요:

        docker exec -it os-dashboards-01 bash
        

        {% include copy.html %}

      2. 버전을 확인하려면 manifest.yml을 확인하세요:

        head -n 5 manifest.yml 
        

        {% include copy.html %}

        응답은 다음과 비슷하게 나타나야 해요:

        ---
        schema-version: '1.1'
        build:
           name: OpenSearch Dashboards
           version: 2.5.0
        
      3. pseudo-TTY 세션을 종료하세요:

        exit
        

        {% include copy.html %}

클러스터 상태 및 샤드 할당 확인하기

  1. 클러스터 상태 API 엔드포인트를 쿼리하여 클러스터 상태에 대한 정보를 확인하세요. 모든 기본 샤드와 복제본 샤드가 할당되었음을 나타내는 green 상태가 표시되어야 해요:

    curl -s "https://localhost:9201/_cluster/health?pretty" -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    {
       "cluster_name" : "opensearch-dev-cluster",
       "status" : "green",
       "timed_out" : false,
       "number_of_nodes" : 4,
       "number_of_data_nodes" : 4,
       "discovered_master" : true,
       "discovered_cluster_manager" : true,
       "active_primary_shards" : 16,
       "active_shards" : 36,
       "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. CAT 샤드 API 엔드포인트를 쿼리하여 업그레이드 후 샤드가 어떻게 할당되었는지 확인하세요:

    curl -s "https://localhost:9201/_cat/shards" -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    security-auditlog-2023.02.27           0 r STARTED     4  80.5kb 172.20.0.13 os-node-03
    security-auditlog-2023.02.27           0 p STARTED     4  80.5kb 172.20.0.11 os-node-01
    security-auditlog-2023.03.08           0 p STARTED    30  95.2kb 172.20.0.13 os-node-03
    security-auditlog-2023.03.08           0 r STARTED    30 123.8kb 172.20.0.11 os-node-01
    ecommerce                              0 p STARTED  4675   3.9mb 172.20.0.12 os-node-02
    ecommerce                              0 r STARTED  4675   3.9mb 172.20.0.13 os-node-03
    .kibana_1                              0 p STARTED     3   5.9kb 172.20.0.12 os-node-02
    .kibana_1                              0 r STARTED     3   5.9kb 172.20.0.11 os-node-01
    .kibana_92668751_admin_1               0 p STARTED    33  37.3kb 172.20.0.13 os-node-03
    .kibana_92668751_admin_1               0 r STARTED    33  37.3kb 172.20.0.11 os-node-01
    opensearch_dashboards_sample_data_logs 0 p STARTED 14074   9.1mb 172.20.0.12 os-node-02
    opensearch_dashboards_sample_data_logs 0 r STARTED 14074   9.1mb 172.20.0.14 os-node-04
    security-auditlog-2023.02.28           0 p STARTED     6  26.2kb 172.20.0.11 os-node-01
    security-auditlog-2023.02.28           0 r STARTED     6  26.2kb 172.20.0.14 os-node-04
    .opendistro-reports-definitions        0 p STARTED     0    208b 172.20.0.12 os-node-02
    .opendistro-reports-definitions        0 r STARTED     0    208b 172.20.0.13 os-node-03
    .opendistro-reports-definitions        0 r STARTED     0    208b 172.20.0.14 os-node-04
    security-auditlog-2023.03.06           0 r STARTED    53 174.6kb 172.20.0.12 os-node-02
    security-auditlog-2023.03.06           0 p STARTED    53 174.6kb 172.20.0.14 os-node-04
    .kibana_101107607_newuser_1            0 r STARTED     1   5.1kb 172.20.0.13 os-node-03
    .kibana_101107607_newuser_1            0 p STARTED     1   5.1kb 172.20.0.11 os-node-01
    .opendistro_security                   0 r STARTED    10  64.5kb 172.20.0.12 os-node-02
    .opendistro_security                   0 r STARTED    10  64.5kb 172.20.0.13 os-node-03
    .opendistro_security                   0 r STARTED    10  64.5kb 172.20.0.11 os-node-01
    .opendistro_security                   0 p STARTED    10  64.5kb 172.20.0.14 os-node-04
    .kibana_-152937574_admintenant_1       0 r STARTED     1   5.1kb 172.20.0.12 os-node-02
    .kibana_-152937574_admintenant_1       0 p STARTED     1   5.1kb 172.20.0.14 os-node-04
    security-auditlog-2023.03.07           0 r STARTED    37 175.7kb 172.20.0.12 os-node-02
    security-auditlog-2023.03.07           0 p STARTED    37 175.7kb 172.20.0.14 os-node-04
    .kibana_92668751_admin_2               0 p STARTED    34  38.6kb 172.20.0.13 os-node-03
    .kibana_92668751_admin_2               0 r STARTED    34  38.6kb 172.20.0.11 os-node-01
    .kibana_2                              0 p STARTED     3     6kb 172.20.0.13 os-node-03
    .kibana_2                              0 r STARTED     3     6kb 172.20.0.14 os-node-04
    .opendistro-reports-instances          0 r STARTED     0    208b 172.20.0.12 os-node-02
    .opendistro-reports-instances          0 r STARTED     0    208b 172.20.0.11 os-node-01
    .opendistro-reports-instances          0 p STARTED     0    208b 172.20.0.14 os-node-04
    

데이터 일관성 확인하기

샘플 데이터가 여전히 존재하는지 확인하려면 e-commerce 인덱스를 다시 쿼리해야 해요:

  1. 이 쿼리에 대한 응답을 REST API로 데이터 인덱싱의 마지막 단계에서 받은 응답과 비교하세요:

    curl -H 'Content-Type: application/json' \
       -X GET "https://localhost:9201/ecommerce/_search?pretty=true&filter_path=hits.total" \
       -d'{"query":{"match":{"customer_first_name":"Sonya"}}}' \
       -ku admin:<custom-admin-password>
    

    {% include copy.html %}

    응답은 다음과 비슷하게 나타나야 해요:

    {
       "hits" : {
          "total" : {
             "value" : 106,
             "relation" : "eq"
          }
       }
    }
    
  2. 웹 브라우저를 열고 Docker 호스트의 포트 5601로 이동하세요(예: https://<HOST_ADDRESS>:5601).

  3. 기본 사용자 이름(admin)과 비밀번호(admin)를 입력하세요.

  4. OpenSearch Dashboards 홈 페이지에서 웹 인터페이스 왼쪽 상단의 메뉴 버튼을 선택하여 탐색 창을 여세요.

  5. 대시보드를 선택하세요.

  6. [Logs] Web Traffic을 선택하여 프로세스 초기에 샘플 데이터를 추가할 때 생성된 대시보드를 여세요.

  7. 대시보드 검토를 마치면 프로필 버튼을 선택하세요. 다른 사용자로 로그인할 수 있도록 로그아웃을 선택하세요.

  8. 업그레이드 전에 생성한 사용자 이름과 비밀번호를 입력한 다음 로그인을 선택하세요.

다음 단계

OpenSearch 작동 방식에 대해 자세히 알아보려면 다음 리소스를 검토하세요:

더 알아보기 (Learn more)