使用 Neptune 藍/綠解決方案執行藍綠更新 - Amazon Neptune

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

使用 Neptune 藍/綠解決方案執行藍綠更新

Amazon Neptune 引擎升級可能需要應用程式停機,因為在安裝和驗證更新時無法使用資料庫。無論它們是手動還是自動啟動,都是如此。

Neptune 提供藍/綠部署解決方案,您可以使用 AWS CloudFormation 堆疊執行此解決方案,從而大幅減少此類停機時間。它會建立與您的藍色生產環境同步的綠色預備環境。然後,您可以更新該預備環境,以執行次要或主要引擎版本升級、圖形資料模型變更,或作業系統更新,並測試結果。最後,您可以快速將其切換為您的生產環境,停機時間很短。

Neptune 藍/綠解決方案經過兩個階段,如下圖所示:

藍綠部署策略的高階流程圖

第 1 階段會建立與生產叢集相同的綠色資料庫叢集

此解決方案會建立一個資料庫叢集,其具有唯一的藍/綠部署識別符,並具有與生產叢集相同的叢集拓撲。也就是說,它具有相同的資料庫執行個體數量和大小、相同的參數群組,以及與生產 (藍色) 資料庫叢集相同的組態,不同之處在於它已升級至您指定的目標引擎版本,但此版本必須高於您目前的 (藍色) 引擎版本。您可以指定目標的次要和主要引擎版本。如有必要,解決方案會執行任何所需的中繼升級,以達到指定的目標引擎版本。這個新叢集會成為綠色預備環境。

第 2 階段會設定連續資料同步

在綠色環境完全準備好之後,解決方案會使用 Neptune 串流,在來源 (藍色) 叢集與目標 (綠色) 叢集之間設定連續複寫。當它們之間的複寫差異達到零時,預備環境就可以進行測試。此時,您必須暫停寫入至藍色叢集,以避免任何進一步的複寫延遲。

您的目標引擎版本可能具有會影響應用程式的新功能或相依性。檢查引擎版本下的目標引擎版本頁面和介入引擎版本頁面,以查看自目前引擎版本以來發生了哪些變更。在將您的應用程式提升至生產環境之前,最好先在綠色叢集上執行整合測試或手動驗證該應用程式。

在測試並限定了綠色叢集中的變更之後,只要將應用程式中的資料庫端點從藍色叢集切換為綠色叢集即可。

轉換後,Neptune 藍/綠解決方案不會刪除舊的藍色生產環境。如果需要,您仍然可以存取它,以進行其他驗證和測試。標準帳單費用會確實套用至其執行個體,直到您刪除它們為止。藍色/綠色解決方案還會使用其他 AWS 服務,其費用按正常價格計費。清除一節中涵蓋了在完成解決方案後將其刪除的詳細資訊。

執行 Neptune 藍/綠堆疊的必要條件

啟動 Neptune 藍/綠堆疊之前:

  • 務必在生產 (藍色) 叢集上啟用 Neptune 串流

  • 藍色叢集中的所有執行個體都必須處於可用狀態。您可以在 Neptune 主控台中,或使用 describe-db-instances API 來檢查執行個體狀態。

  • 所有執行個體也必須與資料庫叢集參數群組同步。

  • Neptune 藍/綠解決方案需要 VPC 中藍色叢集所在的 DynamoDB VPC 端點。請參閱使用 Amazon VPC 端點來存取 DynamoDB

  • 選擇在藍色生產資料庫叢集上的寫入工作負載盡可能輕時執行解決方案。例如,避免在大量載入發生時,或是在由於任何其他原因而可能有大量寫入操作時執行解決方案。

使用 AWS CloudFormation 範本執行 Neptune 藍/綠解決方案

您可以使用 AWS CloudFormation 部署 Neptune 藍/綠解決方案。CloudFormation 範本會在與您的藍色來源 Neptune 資料庫相同的 VPC 中建立 Amazon EC2 執行個體、在該處安裝解決方案,然後執行它。您可以在 CloudWatch 日誌中監控其進度,如監控進度中所述。

您可以使用這些連結來檢閱解決方案範本,或選取啟動堆疊按鈕,在 AWS CloudFormation 主控台中啟動它:

在主控台中,從視窗右上角的下拉式清單中選擇要執行解決方案的 AWS 區域。

設定堆疊參數,如下所示:

  • DeploymentID – 每個 Neptune 藍/綠部署獨有的識別符。

    其會用作綠色資料庫叢集識別符,以及用作字首以命名在部署期間建立的新資源。

  • NeptuneSourceClusterId – 您要升級之藍色資料庫叢集的識別符。

  • NeptuneTargetClusterVersion: – 您要將藍色資料庫叢集升級到的 Neptune 引擎版本

    此版本必須高於目前藍色資料庫叢集的引擎版本。

  • DeploymentMode – 指示這是新部署還是繼續先前部署的嘗試。當您使用與先前部署相同的 DeploymentID 時,請將 DeploymentMode 設定為 resume

    有效值為:new (預設值) 和 resume

  • GraphQueryType – 資料庫的圖形資料類型。

    有效值為:propertygraph (預設值) 和 rdf

  • SubnetId – 來自藍色資料庫叢集所在之相同 VPC 的子網路 ID。(請參閱從同一 VPC 中的 Amazon EC2 執行個體連線至 Neptune 資料庫叢集)。

    如果您想要透過 EC2 Connect 使用 SSH 連線至執行個體,請提供公有子網路的 ID。

  • InstanceSecurityGroup – Amazon EC2 執行個體的安全群組。

    安全群組必須有權存取藍色資料庫叢集,而且您必須能夠使用 SSH 連線至執行個體。請參閱 使用VPC主控台建立安全群組

等到堆疊完成。一旦完成,解決方案就會啟動。然後,您可以使用 CloudWatch 日誌監控部署程序,如下一節所述。

監控 Neptune 藍/綠部署的進度

您可以前往 CloudWatch 主控台並查看 /aws/neptune/(Neptune Blue/Green deployment ID) CloudWatch 日誌群組中的日誌,以監控 Neptune 藍/綠解決方案的進度。您可以在解決方案的 AWS CloudFormation 堆疊輸出中找到 CloudWatch 日誌的連結:

藍色/綠色 AWS CloudFormation 堆疊輸出的螢幕擷取畫面

如果您提供了公有子網路做為堆疊參數,也可以使用 SSH 連線至作為堆疊一部分而建立的 Amazon EC2 執行個體,並參考 /var/log/cloud-init-output.log 中的日誌。

日誌會顯示 Neptune 藍/綠解決方案所採取的動作,如此螢幕擷取畫面所示:

Neptune 藍/綠日誌畫面的螢幕擷取畫面

日誌訊息會顯示藍色叢集與綠色叢集之間的同步狀態:

Neptune 藍/綠解決方案日誌訊息的螢幕擷取畫面

同步程序會檢查複寫延遲,方法是計算藍色叢集 eventID 上的最新串流與 DynamoDB 檢查點表格中存在的複寫檢查點之間的差異,這個表格是由 Neptune 對 Neptune 複寫堆疊所建立。使用這些訊息,您可以監控目前的複寫差異。

從生產藍色叢集切換至更新的綠色叢集

在將綠色叢集提升至生產之前,請確定藍色叢集與綠色叢集之間的遞交差異為零,然後停用藍色叢集的所有寫入流量。將資料庫端點切換至綠色叢集時,繼續寫入至藍色叢集,可能會因為將部分資料寫入這兩個叢集而導致資料損毀。您可能還不需要停用讀取流量。

如果您已在來源 (藍色) 叢集上啟用 IAM 身分驗證,請務必更新應用程式中使用的任何 IAM 政策,以指向綠色叢集 (如需這類政策的範例,請參閱此不受限制的存取政策)。

在停用寫入流量之後,請等待複寫完成,然後在綠色叢集上啟用寫入流量 (但不在藍色叢集上)。也會將讀取流量從藍色叢集切換到綠色叢集。

在 Neptune 藍/綠解決方案完成之後清除

將預備 (綠色) 叢集提升至生產之後,請清除 Neptune 藍/綠解決方案所建立的資源:

  • 刪除為了執行解決方案而建立的 Amazon EC2 執行個體。

  • 對於保持綠色叢集與藍色叢集同步的 Neptune 串流型複寫,刪除 AWS CloudFormation 範本。主要的一個具有您之前提供的堆疊名稱,另一個由後面跟著「-replication」的部署 ID 組成:亦即,(DeploymentID)-replication

刪除 AWS CloudFormation 範本並不會刪除叢集本身。一旦確認了綠色叢集如預期般運作,您就可以選擇性地建立快照,然後再手動刪除藍色叢集。

Neptune 藍/綠解決方案最佳實務

  • 在將綠色叢集切換至生產之前,值得徹底驗證其是否運作正常。檢查資料的一致性和資料庫的組態。有些新的引擎版本可能也需要用戶端升級。在升級之前檢查引擎版本備註。在生產中開始藍/綠升級之前,值得在開發、測試和生產前環境中測試這一切。

  • 最好在維護時段期間執行從藍色伺服器到綠色伺服器的切換。

  • 為了確保在升級和同步之後一切正常運作,值得在刪除原始叢集之前將其保留一段時間。如果引發不可預見的問題,它可能會很有用。

  • 執行 Neptune 藍/綠解決方案時,請避免大量寫入操作 (例如大量載入),因為這些操作可能會造成複寫延遲,帶來顯著的停機時間。理想情況下,關閉對藍色叢集的寫入與針對綠色叢集開啟它們之間的時間只是幾分鐘。

對 Neptune 藍/綠解決方案進行疑難排解

Neptune 藍/綠解決方引發的錯誤
  • Cluster with id = (blue_green_deployment_id) already exists – 有一個現有的叢集,其識別符為 blue_green_deployment_id

    如果叢集是在先前的 Neptune 藍/綠執行中建立,請提供新的部署 ID 或將部署模式設定為 resume

  • Streams should be enabled on the source Cluster for Blue Green Deployment – 在藍色 (來源) 叢集上啟用 Neptune 串流

  • No Bulkload should be in progress on source cluster: (cluster_id) – 如果 Neptune 藍/綠解決方案識別了大量載入正在進行,則其會終止。

    這是為了確保同步程序能夠跟上在進行的寫入。在啟動 Neptune 藍/綠解決方案之前,請避免或取消任何正在進行的大量載入。

  • Blue Green deployment requires instances to be in sync with db cluster parameter group – 叢集參數群組的任何變更都應在整個資料庫叢集中保持同步。請參閱 Amazon Neptune 參數群組

  • Invalid target engine version for Blue Green Deployment – 目標引擎版本必須在 Amazon Neptune 的引擎版本 中列示為作用中,且必須高於來源 (藍色) 叢集的目前引擎版本。