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}
호스트를 선택한 후 실습을 시작할 수 있어요:
-
Linux 배포판과 시스템 아키텍처에 맞는 Docker Engine 버전을 설치하세요.
-
호스트에서 중요한 시스템 설정을 구성하세요:
- 성능 향상을 위해 호스트에서 메모리 페이징 및 스와핑을 비활성화하세요:
{% include copy.html %}sudo swapoff -a - OpenSearch에서 사용할 수 있는 메모리 맵의 수를 늘리세요.
sysctl구성 파일을 편집하기 위해 여세요. 이 예제 명령어는 vim 텍스트 편집기를 사용하지만, 사용 가능한 아무 텍스트 편집기나 사용할 수 있어요:
{% include copy.html %}sudo vim /etc/sysctl.conf /etc/sysctl.conf에 다음 줄을 추가하세요:
{% include copy.html %}vm.max_map_count=262144- 저장하고 종료하세요.
vi또는vim텍스트 편집기를 사용하는 경우 명령 모드로 전환하여:wq!또는ZZ를 입력하면 저장하고 종료할 수 있어요. - 구성 변경 사항을 적용하세요:
{% include copy.html %}sudo sysctl -p
- 성능 향상을 위해 호스트에서 메모리 페이징 및 스와핑을 비활성화하세요:
-
홈 디렉터리에
deploy라는 새 디렉터리를 만들고 이동하세요. 배포 스크립트, 구성 파일 및 TLS 인증서의 경로에~/deploy를 사용할 거예요:mkdir ~/deploy && cd ~/deploy{% include copy.html %}
-
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 %}
-
수정 없이 스크립트를 실행하여 OpenSearch를 실행하는 네 개의 컨테이너와 OpenSearch Dashboards를 실행하는 하나의 컨테이너를 사용자 정의 자체 서명 TLS 인증서와 미리 정의된 내부 사용자 세트로 배포하세요:
sh upgrade-demo-cluster.sh{% include copy.html %}
-
컨테이너가 성공적으로 시작되었는지 확인하세요:
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 -
OpenSearch가 클러스터를 초기화하는 데 필요한 시간은 기본 호스트의 성능에 따라 달라져요. 컨테이너 로그를 따라가면 부트스트랩 과정에서 OpenSearch가 무엇을 하고 있는지 볼 수 있어요:
-
터미널 창에서 컨테이너
os-node-01의 로그를 표시하려면 다음 명령어를 입력하세요:docker logs -f os-node-01{% include copy.html %}
-
노드가 준비되면 다음 예제와 유사한 로그 항목이 보일 거예요:
다음은 예시예요:
[INFO ][o.o.s.c.ConfigurationRepository] [os-node-01] Node 'os-node-01' initialized -
Ctrl+C를 눌러 컨테이너 로그 추적을 중지하고 명령 프롬프트로 돌아가세요.
-
-
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로 데이터 인덱싱
-
샘플 필드 매핑 파일을 다운로드하세요:
wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce-field_mappings.json{% include copy.html %}
-
다음으로, 이 인덱스에 수집할 벌크 데이터를 다운로드하세요:
wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce.ndjson{% include copy.html %}
-
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" } -
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 } ] } -
검색 쿼리를 통해 데이터가 성공적으로 인덱싱되었는지 확인할 수도 있어요. 다음 쿼리는 키워드 `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를 사용하여 데이터 추가
- 웹 브라우저를 열고 Docker 호스트의 포트
5601로 이동하세요 (예:https://<HOST_ADDRESS>:5601). OpenSearch Dashboards가 실행 중이고 브라우저 클라이언트에서 호스트에 네트워크 액세스가 가능하면 로그인 페이지로 리디렉션될 거예요.- 웹 브라우저에서 TLS 인증서가 자체 서명되어 오류가 발생하면 브라우저의 인증서 확인을 우회해야 할 수도 있어요. 인증서 확인 우회에 대한 정보는 브라우저의 문서를 참조하세요. 각 인증서의 공통 이름(CN)은 클러스터 내 통신을 위해 컨테이너 및 노드 이름에 따라 생성되므로 브라우저에서 호스트에 연결해도 여전히 "유효하지 않은 CN" 경고가 표시될 거예요.
- 기본 사용자 이름(
admin)과 비밀번호(admin)를 입력하세요. - OpenSearch Dashboards 홈 페이지에서 Add sample data를 선택하세요.
- Sample web logs 아래에서 Add data를 선택하세요.
- 선택 사항: View data를 선택하여 [Logs] Web Traffic 대시보드를 검토하세요.
- 메뉴 버튼을 선택하여 탐색 창을 열고 Security > Internal users로 이동하세요.
- Create internal user를 선택하세요.
- 사용자 이름과 비밀번호를 입력하세요.
- Backend role 필드에
admin을 입력하세요. - Create를 선택하세요.
중요한 파일 백업
클러스터를 변경하기 전에 항상 백업을 만들어 두세요, 특히 프로덕션 환경에서 실행 중인 경우에는 더욱 그래요.
이 섹션에서는 다음을 수행할 거예요:
스냅샷 리포지토리 등록
-
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 } -
선택 사항: 리포지토리가 성공적으로 생성되었는지 확인하기 위해 추가 확인을 수행하세요:
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를 참조하세요.
-
모든 인덱스와 클러스터 상태를 포함하는 스냅샷을 생성하세요:
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 인덱스를 다시 초기화할 수 있어요. 다음 단계에서는 이러한 백업 파일을 생성하고 호스트에 복사하여 저장하는 방법을 안내해 드릴게요.
-
os-node-01과 대화형 의사 TTY 세션을 여세요:docker exec -it os-node-01 bash{% include copy.html %}
-
backups라는 디렉터리를 만들고 이동하세요:mkdir /usr/share/opensearch/backups && cd /usr/share/opensearch/backups{% include copy.html %}
-
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 -
선택 사항: TLS 인증서를 위한 백업 디렉터리를 만들고 인증서 사본을 저장하세요. 고유한 TLS 인증서를 사용하는 경우 각 노드에 대해 이 작업을 반복하세요:
mkdir /usr/share/opensearch/backups/certs && cp /usr/share/opensearch/config/*pem /usr/share/opensearch/backups/certs/{% include copy.html %}
-
의사 TTY 세션을 종료하세요:
exit{% include copy.html %}
-
파일을 호스트로 복사하세요:
docker cp os-node-01:/usr/share/opensearch/backups ~/deploy/{% include copy.html %}
업그레이드 수행하기
이제 클러스터가 구성되었고 중요한 파일과 설정을 백업했으니, 버전 업그레이드를 시작할 때예요.
이 섹션에 포함된 일부 단계(예: 샤드 복제 비활성화 및 트랜잭션 로그 플러시)는 클러스터 성능에 영향을 미치지 않아요. 이러한 단계는 모범 사례로 포함되었으며, 업그레이드 내내 클라이언트가 기존 데이터를 쿼리하거나 문서를 인덱싱하는 등 OpenSearch 클러스터와 계속 상호 작용하는 상황에서 클러스터 성능을 크게 향상시킬 수 있어요. {: .note}
-
샤드 복제를 비활성화하여 클러스터 내에서 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" : { } } -
트랜잭션 로그 항목을 Lucene 인덱스에 커밋하기 위해 클러스터에 플러시 작업을 수행하세요:
curl -X POST "https://localhost:9201/_flush?pretty" -ku admin:<custom-admin-password>{% include copy.html %}
응답은 다음과 비슷하게 나타나야 해요:
{ "_shards" : { "total" : 20, "successful" : 20, "failed" : 0 } } -
업그레이드할 노드를 선택하세요. 이 데모 클러스터의 모든 노드는 클러스터 관리자 자격이 있으므로 노드를 어떤 순서로든 업그레이드할 수 있어요. 다음 명령은 마운트된 데이터 볼륨을 제거하지 않고 컨테이너
os-node-01을 중지하고 제거해요:docker stop os-node-01 && docker container rm os-node-01{% include copy.html %}
-
원래 컨테이너와 동일한 매핑된 볼륨을 사용하여
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 -
선택 사항: 클러스터를 쿼리하여 어떤 노드가 클러스터 관리자 역할을 하는지 확인하세요. 프로세스 중 언제든지 이 명령을 실행하여 새 클러스터 관리자가 선출되는 시점을 확인할 수 있어요:
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 - -
선택 사항: 노드가 제거되고 교체됨에 따라 샤드 할당이 어떻게 변경되는지 확인하기 위해 클러스터를 쿼리하세요. 프로세스 중 언제든지 이 명령을 실행하여 샤드 상태가 어떻게 변경되는지 확인할 수 있어요:
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 -
os-node-02를 중지하세요:docker stop os-node-02 && docker container rm os-node-02{% include copy.html %}
-
원래 컨테이너와 동일한 매핑된 볼륨을 사용하여
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 -
os-node-03를 중지하세요:docker stop os-node-03 && docker container rm os-node-03{% include copy.html %}
-
원래 컨테이너와 동일한 매핑된 볼륨을 사용하여
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 -
os-node-04를 중지하세요:docker stop os-node-04 && docker container rm os-node-04{% include copy.html %}
-
원래 컨테이너와 동일한 매핑된 볼륨을 사용하여
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 -
클러스터가 새 버전을 실행 중인지 확인하세요:
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 - -
마지막으로 업그레이드해야 할 구성 요소는 OpenSearch Dashboards 노드예요. 먼저 이전 컨테이너를 중지하고 제거하세요:
docker stop os-dashboards-01 && docker rm os-dashboards-01{% include copy.html %}
-
대상 버전의 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 -
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 -
복제본 샤드 할당을 다시 활성화하세요:
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를 계속 탐색하고 실험하기 전에 업그레이드 결과를 확인해야 해요.
이 클러스터의 경우 업그레이드 후 확인 단계에는 다음 확인이 포함될 수 있어요:
새 실행 버전 확인하기
-
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 - -
OpenSearch Dashboards의 현재 실행 버전을 확인하세요:
- 옵션 1: 웹 인터페이스에서 OpenSearch Dashboards 버전을 확인하세요.
- 웹 브라우저를 열고 Docker 호스트의 포트
5601로 이동하세요(예:https://<HOST_ADDRESS>:5601). - 기본 사용자 이름(
admin)과 기본 비밀번호(admin)로 로그인하세요. - 오른쪽 상단의 도움말 버튼을 선택하세요. 버전이 팝업 창에 표시돼요.
- 도움말 버튼을 다시 선택하여 팝업 창을 닫으세요.
- 웹 브라우저를 열고 Docker 호스트의 포트
- 옵션 2:
manifest.yml을 검사하여 OpenSearch Dashboards 버전을 확인하세요.-
명령줄에서 OpenSearch Dashboards 컨테이너와 대화형 pseudo-TTY 세션을 여세요:
docker exec -it os-dashboards-01 bash{% include copy.html %}
-
버전을 확인하려면
manifest.yml을 확인하세요:head -n 5 manifest.yml{% include copy.html %}
응답은 다음과 비슷하게 나타나야 해요:
--- schema-version: '1.1' build: name: OpenSearch Dashboards version: 2.5.0 -
pseudo-TTY 세션을 종료하세요:
exit{% include copy.html %}
-
- 옵션 1: 웹 인터페이스에서 OpenSearch Dashboards 버전을 확인하세요.
클러스터 상태 및 샤드 할당 확인하기
-
클러스터 상태 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 } -
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 인덱스를 다시 쿼리해야 해요:
-
이 쿼리에 대한 응답을 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" } } } -
웹 브라우저를 열고 Docker 호스트의 포트
5601로 이동하세요(예:https://<HOST_ADDRESS>:5601). -
기본 사용자 이름(
admin)과 비밀번호(admin)를 입력하세요. -
OpenSearch Dashboards 홈 페이지에서 웹 인터페이스 왼쪽 상단의 메뉴 버튼을 선택하여 탐색 창을 여세요.
-
대시보드를 선택하세요.
-
[Logs] Web Traffic을 선택하여 프로세스 초기에 샘플 데이터를 추가할 때 생성된 대시보드를 여세요.
-
대시보드 검토를 마치면 프로필 버튼을 선택하세요. 다른 사용자로 로그인할 수 있도록 로그아웃을 선택하세요.
-
업그레이드 전에 생성한 사용자 이름과 비밀번호를 입력한 다음 로그인을 선택하세요.
다음 단계
OpenSearch 작동 방식에 대해 자세히 알아보려면 다음 리소스를 검토하세요: