在 Amazon OpenSearch 服務中進行配置更改 - Amazon OpenSearch 服務

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Amazon OpenSearch 服務中進行配置更改

Amazon OpenSearch 服務在更新網域時使用藍色/綠色部署程序。藍/綠部署會為複製生產環境的網域更新建立閒置環境,並在這些更新完成後將使用者路由至新環境。在藍/綠部署中,藍色環境是目前的生產環境。綠色環境是閒置的環境。

資料會從藍色環境移轉至綠色環境。當新環境準備就緒時, OpenSearch Service 會在環境中切換,以提升綠色環境成為新的生產環境。切換發生,沒有數據丟失。此作法可將停機時間降至最低,並在部署至新環境失敗的情況下維護原始環境。

通常會導致藍/綠部署的變更

以下操作會造成藍/綠部署:

  • 變更執行個體類型

  • 啟用精細存取控制

  • 執行服務軟體更新

  • 啟用或停用專用主節點

  • 啟用或停用異地同步備份 (無待命

  • 變更儲存類型、磁碟區類型或磁碟區大小

  • 選擇不同的 VPC 子網路

  • 新增或移除 VPC 安全群組

  • 啟用或停用儀表板的 Amazon Cognito 身份驗證 OpenSearch

  • 選擇不同的 Amazon Cognito 使用者集區或身分集區

  • 修改進階設定

  • 升級至新 OpenSearch 版本 (在部分或全部升級期間,OpenSearch 儀表板可能無法使用)

  • 啟用靜態或加密資料的 node-to-node 加密

  • 啟用或禁用 UltraWarm 或冷存儲

  • 停用自動調整並還原其變更

  • 將可選插件與域關聯並將可選插件與域分離

  • 增加具有兩個專用主節點的異地同步備份網域的專用主節點計數

  • 減少 EBS 磁碟區大小

  • 變更 EBS 磁碟區大小、IOPS 或輸送量 (如果您上次所做的變更正在進行中或發生時間少於 6 小時)

  • 啟用將稽核記錄發佈至 CloudWatch。

對於具備待命網域的異地同步備份,您一次只能提出一個變更請求。如果變更已在進行中,則會拒絕新請求。您可以使用 DescribeDomainChangeProgress API 檢查當前更改的狀態。

通常不會導致藍/綠部署的變更

大多數情況下,以下操作不會造成藍/綠部署:

  • 修改存取原則

  • 修改自訂端點

  • 變更傳輸層安全性 (TLS) 原則

  • 變更自動快照時間

  • 啟用或停用 Require HTTPS (需要使用 HTTPS)

  • 啟用自動調整,或停用且不還原其變更

  • 如果您的網域有專用主節點,請變更資料節點或 UltraWarm 節點計數

  • 如果您的網域有專用主節點,請變更專用主要執行個體類型或計數 (具有兩個專用主節點的異地同步備份網域除外)

  • 啟用或停用錯誤記錄檔或慢速記錄檔的發佈 CloudWatch

  • 將稽核記錄檔的發佈停用 CloudWatch

  • 將磁碟區大小增加至每個資料節點最多 3 TiB,變更磁碟區類型、IOPS 或輸送量

  • 新增或移除標籤

注意

視您的服務軟體版本而定,有一些例外情況。如果您想要確定變更不會造成藍/綠部署,請在更新網域之前執行乾式執行 (如果此選項可用)。某些更改不提供乾運行選項。我們通常建議您在流量尖峰時段之外對叢集進行變更。

判斷變更是否會導致藍/綠部署

您可以測試某些類型的規劃組態變更,以判斷這些變更是否會造成藍/綠部署,而不需要認可這些變更。在您啟動組態變更前,請使用主控台或 API 執行驗證檢查,以確保網域符合更新資格。

Console
若要驗證組態變更
  1. 瀏覽至 Amazon OpenSearch 服務主控台,位於https://console.aws.amazon.com/aos/

  2. 在左側導覽窗格中選擇 Domains (網域)。

  3. 選取您要進行組態變更的網域。這會開啟網域詳細資訊頁面。選取 Actions (動作) 下拉式功能表,然後選擇 Edit cluster configuration (編輯叢集組態)。

  4. Edit cluster configuration (編輯叢集組態) 頁面上,您可以變更執行個體類型、節點數目以及任何其他組態。在摘要面板中確認變更後,請選擇 Run (執行)。

  5. 試轉完成後,結果將自動顯示在頁面底部,並附有試轉 ID。這些結果會通知您變更屬於哪個類別:

    • 啟動藍/綠部署

    • 不需要藍/綠部署

    • 包含您需要解決的驗證錯誤,解決後才能儲存變更

    請注意,每次試轉都會覆寫之前的試轉。若要查看稍後每個試轉的詳細資訊,請確保儲存試轉 ID。每個試轉可供使用的天數為 90 天,或直到您進行組態更新為止。

  6. 若要繼續進行組態更新,請選擇 Save changes (儲存變更)。否則,請選擇 Cancel (取消)。任一選項都會帶您返回 Cluster configuration (叢集組態) 標籤。在此標籤上,您可以選擇 Dry run details (試轉詳細資訊) 以查看最新試轉的詳細資訊。此頁面還包括乾式運行之前的配置和乾運行配置之間的 side-by-side 比較。

API

您也可以透過組態 API 執行試轉驗證。若要使用 API 測試變更,請將 DryRun 設定為 true,以及將 DryRunMode 設定為 Verbose。詳細資訊模式除了判斷變更是否會啟動藍/綠部署之外,還會執行驗證檢查。例如,此UpdateDomainConfig要求會測試啟用下列項目所產生的部署類型 UltraWarm:

POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config { "ClusterConfig": { "WarmCount": 3, "WarmEnabled": true, "WarmType": "ultrawarm1.large.search" }, "DryRun": true, "DryRunMode": "Verbose" }

請求會執行驗證檢查並傳回變更將造成之部署類型,但實際上不會執行更新:

{ "ClusterConfig": { ... }, "DryRunResults": { "DeploymentType": "Blue/Green", "Message": "This change will require a blue/green deployment." } }

可能的部署類型包括:

  • Blue/Green:變更將導致藍/綠部署。

  • DynamicUpdate:變更不會導致藍/綠部署。

  • Undetermined:網域仍處於處理狀態,因此無法判斷部署類型。

  • None:無設定變更。

如果驗證失敗,其會傳回驗證失敗的清單。

{ "ClusterConfig":{ "..." }, "DryRunProgressStatus":{ "CreationDate":"2023-01-12T01:14:33.847Z", "DryRunId":"db00ca39-48b2-4774-bbd3-252cf094d205", "DryRunStatus":"failed", "UpdateDate":"2023-01-12T01:14:33.847Z", "ValidationFailures":[ { "Code":"Cluster.Index.WriteBlock", "Message":"Cluster has index write blocks." } ] } }

如果狀態仍然存在pending,您可以在後續DescribeDryRunProgress呼叫的 UpdateDomainConfig 回應中使用乾運行 ID 來檢查驗證狀態。

GET https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/dryRun?dryRunId=my-dry-run-id { "DryRunConfig": null, "DryRunProgressStatus": { "CreationDate": "2023-01-12T01:14:42.998Z", "DryRunId": "db00ca39-48b2-4774-bbd3-252cf094d205", "DryRunStatus": "succeeded", "UpdateDate": "2023-01-12T01:14:49.334Z", "ValidationFailures": null }, "DryRunResults": { "DeploymentType": "Blue/Green", "Message": "This change will require a blue/green deployment." } }

若要在不進行驗證檢查的情況下執行試轉分析,請在使用組態 API 時將 DryRunMode 設定為 Basic

Python

下面的 Python 代碼使用 UpdateDomainConfigAPI 來執行乾運行驗證檢查,如果檢查成功,則在沒有空運行的情況下調用相同的 API 以開始更新。如果檢查失敗,指令碼會列印錯誤並停止。

import time import boto3 client = boto3.client('opensearch') response = client.UpdateDomainConfig( ClusterConfig={ 'WarmCount': 3, 'WarmEnabled': True, 'WarmCount': 123, }, DomainName='test-domain', DryRun=True, DryRunMode='Verbose' ) dry_run_id = response.DryRunProgressStatus.DryRunId retry_count = 0 while True: if retry_count == 5: print('An error occured') break dry_run_progress_response = client.DescribeDryRunProgress('test-domain', dry_run_id) dry_run_status = dry_run_progress_response.DryRunProgressStatus.DryRunStatus if dry_run_status == 'succeeded': client.UpdateDomainConfig( ClusterConfig={ 'WarmCount': 3, 'WarmEnabled': True, 'WarmCount': 123, }) break elif dry_run_status == 'failed': validation_failures_list = dry_run_progress_response.DryRunProgressStatus.ValidationFailures for item in validation_failures_list: print(f"Code: {item['Code']}, Message: {item['Message']}") break retry_count += 1 time.sleep(30)

啟動和追蹤組態變更

注意

您可以一次要求一個組態變更。您也可以在單一要求中分組多個組態變更。請先等待網域狀態變更,Active然後再要求任何其他組態變更。

您可以在 Amazon Ser OpenSearch vice 主控台中檢視網域處理狀 Config 和組態變更狀態欄位,以追蹤網域和組態變更。您也可以透過 API 回應中的和ConfigChangeStatus參數追蹤網域DomainProcessingStatus和組態變更。如需詳細資訊,請參閱 OpenSearch 服務 API 參考資DomainStatus料中的資料類型。

網域處理狀態可見性:您可以查看主控台中的 [網域處理狀態] 欄位,輕鬆判斷網域的組態狀態。同樣,DomainProcessingStatusAPI 參數可用於識別狀態。下列值為網域的處理狀態:

  • Active:未進行任何組態變更。您可以提交新的組態變更請求。

  • Creating:正在建立網域。

  • Modifying:正在進行組態變更,例如新增資料節點、EBS、gp3、IOPS 佈建或設定 KMS 金鑰。

    注意

    您可能會看到狀態,就像Modifying在域需要分片移動才能完成配置更改的情況下。為了向後兼容,Processing參數的行為在 API 響應中保持不變,並且在核心配置更改完成後立即設置為 false,而無需等待碎片移動完成。

  • Upgrading Engine Version:正在進行引擎版本升級。

  • Updating Service Software: 正在進行服務軟體更新。

  • Deleting:正在刪除網域。

  • Isolated:網域已暫停。

組態狀態可見性:設定變更可由操作員啟動 (例如新增資料節點、執行個體類型變更) 或由服務啟動 (例如,自動調整和離峰時間更新)。您可以在 Amazon Ser OpenSearch vice 主控台的「組態變更狀態」欄位和 ConfigChangeStatus API 回應中找到最新組態變更的狀態詳細資訊。下列值表示網域的組態狀態:

  • Pending:已提交組態變更請求。

  • Initializing:服務正在初始化組態變更要求。

  • Validating:服務正在驗證請求的更改和所需的資源。

  • Awaiting user inputs:當運算子預期進行某些組態變更 (例如執行個體類型變更) 時適用。您可以編輯組態變更。

  • Applying changes:服務正在套用要求的組態變更。

  • Cancelled:已取消組態變更。如果您收到驗證失敗狀態,可以按一下主控台中的「取消」或呼叫 CancelDomainConfigChange API 作業。如果執行此操作,則會復原所有套用的變更。

  • Completed:要求的組態變更已成功完成。

  • Validation Failed:請求的變更驗證失敗。不會套用任何組態變更。

    注意

    驗證失敗可能是因為您的網域中存在紅色索引、選擇的執行個體類型無法使用或磁碟空間不足所造成。如需驗證錯誤的清單,請參閱對驗證錯誤進行疑難排解。在驗證失敗事件期間,您可以取消、重試或編輯組態變更。

API 摘要:您可以使用DescribeDomainDescribeDomainChangeProgress、和 DescribeDomainConfig API 作業取得詳細的組態更新狀態。此外,您可以使CancelDomainConfigChange用在驗證失敗時取消更新。如需詳細資訊,請參閱OpenSearch 服務 API 文件

當組態變更完成時,網域狀態會變回Active

您可以檢閱叢集運作狀態和 Amazon CloudWatch 指標,並在網域更新時看到叢集中的節點數目暫時增加 (通常是翻倍)。在下圖中,您可以看到在組態變更期間節點數量從 11 加倍到 22,而在更新完成時恢復回 11。

網域組態變更期間節點數從 11 加倍到 22。

此暫時增加可能形成叢集專用主節點的負擔,突然可能會有許多節點需要管理。當 OpenSearch Service 將資料從舊叢集複製到新叢集時,也會增加搜尋和索引延遲。在叢集務必維持足夠的容量,以處理與這些藍/綠部署相關的負荷。

重要

組態變更和服務維護期間,您需要支付任何額外費用。您也只需要針對您為叢集請求的節點數付費。如需詳細規格,請參閱組態變更的費用

為了防止專用主節點過載,您可以使用 Amazon CloudWatch 指標監控使用情況。如需建議的最大值,請參閱推薦的 Amazon 服 OpenSearch 務 CloudWatch 警報

組態變更的階段

啟動組態變更後, OpenSearch 服務會執行一系列步驟來更新您的網域。您可以在主控台的 [組態變更狀態] 下檢視組態變更進度。更新會經歷的確切步驟依您正在執行的變更類型而定。您也可以使用 DescribeDomainChangeProgressAPI 作業監視設定變更。

以下是更新在組派變更過程中可能會經歷的階段:

階段名稱 描述

驗證

驗證網域是否有資格進行更新,並在必要時顯示驗證問題

建立新環境

完成必要的先決條件並建立所需資源,以開始進行藍/綠部署。

佈建新節點

在新環境中建立一組新的執行個體。

新節點上的流量路由

將流量重新引導至新建立的資料節點。

舊節點上的流量路由

停用舊資料節點上的流量。

準備要移除的節點

準備移除節點。僅在您縮減網域時 (例如,從 8 個節點減少至 6 個節點),系統才會執行此步驟。

將碎片複製到新節點

將碎片從舊節點移動至新節點。

終止節點

在移除碎片後,終止和刪除舊節點。

刪除舊資源

刪除與舊環境 (例如負載平衡器) 相關聯的資源。

動態更新

已在更新無需藍/綠部署且可動態套用更新時顯示。

套用專屬的主要相關變更

當專用主要執行個體類型或計數變更時顯示。

套用磁碟區相關變更

當磁碟區大小、類型、IOPS 和輸送量變更時顯示。

藍/綠部署的效能影響

在藍/綠部署期間,您的 Amazon OpenSearch 服務叢集可用於傳入的搜尋和索引請求。不過,您可能會遇到下列效能問題:

  • 由於叢集有更多要管理的節點,導線節點的使用量暫時增加。

  • 隨著 OpenSearch Service 將資料從舊節點複製到新節點,因此增加了搜尋和索引延遲。

  • 隨著叢集負載在藍/綠部署期間增加而增加,對傳入要求的拒絕次數增加。

  • 若要避免延遲問題和要求拒絕,您應該在叢集狀態良好且網路流量低時執行藍/綠部署。

組態變更的費用

如果您變更網域的組態, OpenSearch Service 會依照中的說明建立新叢集在 Amazon OpenSearch 服務中進行配置更改。在將舊的遷移到新的期間,您需要支付以下費用:

  • 如果您變更執行個體類型,會收取兩個叢集第一個小時的費用。在第一個小時後,則只會收取新叢集的費用。EBS 磁碟區不會收取兩次費用,因為它們是叢集的一部分,因此它們的計費會按執行個體計費。

    範例:您將組態從三個 m3.xlarge 執行個體變更為四個 m4.large 執行個體。對於第一個小時,您會被收取兩個叢集 (3 * m3.xlarge + 4 * m4.large) 的費用。在第一個小時後,則只會收取新叢集 (4 * m4.large) 的費用。

  • 如果您不變更執行個體類型,您只會被收取最大叢集第一個小時的費用。在第一個小時後,則只會收取新叢集的費用。

    範例:您將組態從六個 m3.xlarge 執行個體變更為三個 m3.xlarge 執行個體。對於第一個小時,您會被收取最大叢集 (6 * m3.xlarge) 的費用。在第一個小時後,則只會收取新叢集 (3 * m3.xlarge) 的費用。

對驗證錯誤進行疑難排解

當您啟動組態變更或執行 OpenSearch 或 Elasticsearch 版本升級時, OpenSearch Service 會先執行一系列的驗證檢查,以確保您的網域符合更新資格。如果其中任何一項檢查失敗,您會在主控台中收到通知,其中包含您必須在更新網域之前解決的特定問題。下表列出 OpenSearch Service 可能出現的可能網域問題,以及解決這些問題的步驟。

問題 錯誤代碼 疑難排解步驟
找不到安全群組 SecurityGroupNotFound

與您的 OpenSearch 服務網域相關聯的安全性群組不存在。若要解決此問題,請使用指定的名稱建立安全群組

找不到子網 SubnetNotFound

與您的 OpenSearch 服務網域相關聯的子網路不存在。若要解決此問題,在您的 VPC 中建立子網

未設定服務連結角色 SLRNotConfigured 未設定服務的服 OpenSearch 務連結角色。服務連結角色由 OpenSearch Service 預先定義,包含服務代表您呼叫其他服 AWS 務所需的所有權限。如果角色不存在,則可能需要手動建立
IP 地址不足 InsufficientFreeIPsForSubnets

一個或多個 VPC 子網沒有足夠的 IP 地址來更新您的網域。若要計算您需要多少 IP 地址,請參閱 在 VPC 子網路中保留 IP 地址

Cognito 使用者集區不存在 CognitoUserPoolNotFound

OpenSearch 服務找不到 Amazon Cognito 使用者集區。確認您已建立一個且具有正確的 ID。若要尋找 ID,您可以使用 Amazon Cognito 主控台或以下 AWS CLI 命令:

aws cognito-idp list-user-pools --max-results 60 --region us-east-1
Cognito 身分集區不存在 CognitoIdentityPoolNotFound

OpenSearch 服務找不到 Cognito 身分識別集區。確認您已建立一個且具有正確的 ID。若要尋找 ID,您可以使用 Amazon Cognito 主控台或以下 AWS CLI 命令:

aws cognito-identity list-identity-pools --max-results 60 --region us-east-1
找不到使用者集區的 Cognito 網域 CognitoDomainNotFound

使用者集區沒有網域名稱。您可以使用 Amazon Cognito 主控台或下列 AWS CLI 命令來設定一個主控台:

aws cognito-idp create-user-pool-domain --domain my-domain --user-pool-id id
未設定 Cognito 角色 CognitoRoleNotConfigured

未設定 IAM 角色,授予 OpenSearch 服務權限以設定 Amazon Cognito 使用者和身分識別集區,以及將其用於身分驗證。使用適當的許可集合和信任關係來設定角色。您可以使用主控台來為您建立預設CognitoAccessForAmazonOpenSearch角色,也可以使用 AWS CLI 或 AWS SDK 手動設定角色。

無法描述使用者集區 UserPoolNotDescribable 指定的 Amazon Cognito 角色沒有許可,無法描述與您的網域相關聯之使用者集區。請確定角色許可政策允許 cognito-identity:DescribeUserPool 動作。請參閱 關於 CognitoAccessForAmazonOpenSearch角色 了解完整的許可政策。
無法描述身分集區 IdentityPoolNotDescribable 指定的 Amazon Cognito 角色沒有許可,無法描述與您的網域相關聯之身分集區。請確定角色許可政策允許 cognito-identity:DescribeIdentityPool 動作。請參閱 關於 CognitoAccessForAmazonOpenSearch角色 了解完整的許可政策。
無法描述使用者集區和身分集區 CognitoPoolsNotDescribable 指定的 Amazon Cognito 角色沒有許可,無法描述與您的網域相關聯之使用者集區和身分集區。請確定角色許可政策允許 cognito-identity:DescribeIdentityPoolcognito-identity:DescribeUserPool 動作。請參閱 關於 CognitoAccessForAmazonOpenSearch角色 了解完整的許可政策。
未啟用 KMS 金鑰 KMSKeyNotEnabled

用來加密網域的 AWS Key Management Service (AWS KMS) 金鑰已停用。立即重新啟用金鑰

自訂憑證未處於 ISSUED (已發行) 狀態 InvalidCertificate

如果您的網域使用自訂端點,您可以在 AWS Certificate Manager (ACM) 中產生 SSL 憑證或匯入您自己的端點來保護它。憑證狀態必須為 Issued (已發佈)。如果您收到此錯誤,在 ACM 主控台中檢查憑證的狀態。如果狀態為 Expired (已過期)、Failed (失敗)、Inactive (非作用中) 或者 Pending validation (待定驗證),請參閱 ACM 疑難排解文件以解決該問題。

沒有足夠的容量來啟動選擇的執行個體類型 InsufficientInstanceCapacity

請求的執行個體類型容量不可用。例如,您可能已請求五個i3.16xlarge.search節點,但 OpenSearch Service 沒有足夠的可用i3.16xlarge.search主機,因此無法滿足要求。在 OpenSearch Service 中檢查支援的執行個體類型,並選擇不同的執行個體類型。

叢集中的紅色索引 RedCluster

叢集中的一個或多個索引具有紅色狀態,這導致整體紅色叢集狀態。若要進行疑難排解並修正此問題,請參閱 紅色叢集狀態

對記憶體斷路器的請求太多 TooManyRequests

您的網域有太多搜尋和寫入要求,因此 OpenSearch Service 無法更新其設定。您可以減少請求數量,將執行個體垂直擴展到 64 GiB 的 RAM,或者透過新增執行個體進行水平擴展。

新組態無法存放資料 (磁碟空間不足) InsufficientStorageCapacity

設定的儲存空間大小無法存放您網域上的所有資料。若要解決此問題,請選擇更大的磁碟區刪除未使用的索引或增加叢集中的節點數目,以立即釋放磁碟空間。

固定到特定節點的碎片 ShardMovementBlocked

網域中的一個或多個索引會連接至特定節點,且無法重新指派。這很可能是因為您已設定碎片分配篩選,這可讓您指定允許哪些節點託管特定索引的碎片。

若要解決此問題,請從所有受影響的索引中移除碎片分配篩選條件:

PUT my-index/_settings { "settings": { "index.routing.allocation.require._name": null } }
新組態無法存放所有碎片 (碎片計數) TooManyShards 網域上的碎片計數太高,這會導致 OpenSearch Service 無法將它們移至新的組態。若要解決此問題,請新增與目前叢集節點相同的組態類型的節點,以便水平擴展您的網域。請注意,EBS 磁碟區大小上限取決於節點的執行個體類型。

若要避免將來發生此問題,請參閱 選擇碎片數 並定義適用於您的使用案例的碎片策略。

與您的網域相關聯的子網路不支援 IPv4 位址

ResultCodeIPv4BlockNotExists

若要解決此問題,請根據網域的設定 IP 位址類型,建立子網路或更新 VPC 中的現有子網路。如果您的網域僅使用 IPv4 位址類型,請使用僅限 IPv4 的子網路。如果您的網域使用雙堆疊模式,請使用雙堆疊子網路。

與您的網域相關聯的子網路不支援 IPv6 位址

ResultCodeIPv6BlockNotExists

若要解決此問題,請根據網域的設定 IP 位址類型,建立子網路或更新 VPC 中的現有子網路。如果您的網域僅使用 IPv4 位址類型,請使用僅限 IPv4 的子網路。如果您的網域使用雙堆疊模式,請使用雙堆疊子網路。