切換藍/綠部署 - Amazon Aurora

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

切換藍/綠部署

切換會在綠色環境中將資料庫叢集 (包括其資料庫執行個體) 提升為生產資料庫叢集。切換前,生產流量會路由到藍色環境中的叢集。切換後,生產流量會路由到綠色環境中的資料庫叢集。

切換逾時

您可以指定介於 30 秒與 3,600 秒(一小時) 之間的切換逾時期間。如果切換所花費的時間超過指定的持續時間,則會復原任何變更,且不會對任一環境進行任何變更。預設逾時期間為 300 秒 (五分鐘)。

切換防護機制

當您開始切換時,Amazon RDS 會執行一些基本檢查,以測試藍色和綠色環境是否準備好進行切換。這些檢查稱為切換防護機制。如果環境還沒有做好準備,這些切換防護機制可防止切換。因此,它們可避免超過預期的停機時間,並防止若切換開始,可能導致藍色和綠色環境之間遺失資料。

Amazon RDS 會在綠色環境上執行下列防護機制檢查:

  • 複寫運作狀態 – 檢查綠色資料庫叢集複寫狀態是否良好。綠色資料庫叢集是藍色資料庫叢集的複本。

  • 複寫延遲 – 檢查綠色資料庫叢集的複本延遲是否在轉換的允許限制內。允許的限制是以指定的逾時期間為基礎。複本延遲指出綠色資料庫叢集落後於其藍色資料庫叢集多遠。如需詳細資訊,請參閱適用於 Aurora MySQL診斷和解決僅供讀取複本之間的延遲,以及適用於 Aurora PostgreSQL 的 監控 Aurora PostgreSQL 複寫

  • 作用中寫入 – 確定綠色資料庫叢集上沒有作用中寫入。

Amazon RDS 會在藍色環境上執行下列防護機制檢查:

  • 外部複寫 — 對於 Aurora PostgreSQL 版 者)。如果是這樣,建議您將自我管理的複寫插槽和訂閱放置在藍色環境中的所有資料庫中,繼續進行轉換,然後重新建立它們以繼續複寫。對於適用於 MySQL 的 Aurora 的 RDS,請檢查藍色資料庫是否不是外部備份記錄檔複本。如果是,請確保它沒有主動複製。

  • 長時間執行的作用中寫入 – 確定藍色資料庫叢集上沒有長時間執行的作用中寫入,因為這些寫入可能會增加複本延遲。

  • 長時間執行的 DDL 陳述式 – 確定藍色資料庫叢集上沒有長時間執行的 DDL 陳述式,因為這些陳述式可能會增加複本延遲。

  • 不支援的 PostgreSQL 變更 – 對於 Aurora PostgreSQL 資料庫叢集,請確定沒有任何 DDL 變更,也未在藍色環境上執行大型物件的新增或修改。如需詳細資訊,請參閱 藍/綠部署的 PostgreSQL 邏輯複寫限制

    如果 Amazon RDS 偵測到不支援的 PostgreSQL 變更,其會將複寫狀態變更為 Replication degraded,並通知您無法對藍/綠部署進行轉換。若要繼續進行轉換,建議您刪除並重新建立藍/綠部署和所有綠色資料庫。若要這樣做,請選擇動作刪除綠色資料庫

切換動作

當您切換藍/綠部署時,RDS 會執行下列動作:

  1. 執行防護機制檢查,以驗證藍色和綠色環境是否已準備好進行切換。

  2. 在這兩個環境中停止資料庫叢集上的新寫入操作。

  3. 捨棄與這兩個環境中資料庫執行個體的連線,而且不允許新的連線。

  4. 等待複寫在綠色環境中趕上進度,以便綠色環境與藍色環境同步。

  5. 在這兩個環境中重新命名資料庫叢集和資料庫執行個體

    RDS 會重新命名綠色環境中的資料庫叢集和資料庫執行個體,以符合藍色環境中對應的資料庫叢集和資料庫執行個體。例如,假設藍色環境中資料庫執行個體的名稱為 mydb。也會假設綠色環境中對應資料庫執行個體的名稱為 mydb-green-abc123。在切換期間,綠色環境中資料庫執行個體的名稱會變更為 mydb

    RDS 會重新命名藍色環境中的資料庫叢集和資料庫執行個體,方法是將 -oldn 附加至目前名稱 (其中 n 是數字)。例如,假設藍色環境中資料庫執行個體的名稱為 mydb。切換後,資料庫執行個體名稱可能是 mydb-old1

    RDS 也會重新命名綠色環境中的端點,以符合藍色環境中的對應端點,以便不需要應用程式變更。

  6. 允許連線至這兩個環境中的資料庫。

  7. 在新的生產環境中允許資料庫叢集上的寫入操作。

    轉換之後,先前的生產叢集只允許讀取作業,為止。即使您停用資料庫叢集上的read_only參數,它仍會保持唯讀狀態,直到您刪除藍/綠部署為止。

您可以使用 Amazon 監控轉換的狀態。 EventBridge如需詳細資訊,請參閱 藍/綠部署事件

如果您已在藍色環境中配置標籤,則這些標籤會在切換期間移至新的生產環境。先前的生產環境也會保留這些標籤。如需標籤的詳細資訊,請參閱標記 Amazon RDS 資源

如果切換開始,然後在完成前由於任何原因而停止,則會復原任何變更,且不會對任一環境進行任何變更。

切換最佳實務

在您轉換之前,我們強烈建議您完成下列任務,以遵守最佳實務:

  • 徹底測試綠色環境中的資源。確保它們正常有效地執行。

  • 監控相關的 Amazon CloudWatch 指標。如需詳細資訊,請參閱 切換前驗證 CloudWatch 指標

  • 識別切換的最佳時間。

    切換期間,會中斷這兩種環境中資料庫的寫入。識別生產環境上流量最低的時間。長時間執行的交易 (例如作用中 DDL) 可能會增加您的切換時間,因而延長生產工作負載的停機時間。

    如果您的資料庫叢集和資料庫執行個體上有大量連線,請考慮在切換藍/綠部署之前,手動將其減少到應用程式所需的最低數量。達成此目標的方法之一是建立一項指令碼,用以監控藍/綠部署狀態,並在偵測到狀態變更至 SWITCHOVER_IN_PROGRESS 時開始清除連線。

  • 確定這兩個環境中的資料庫叢集和資料庫執行個體處於 Available 狀態。

  • 確定綠色環境中的資料庫叢集運作良好且複寫中。

  • 請確定您的網路和用戶端組態不會將 DNS 快取存留時間 (TTL) 增加到五秒以上,這是 Aurora DNS 區域的預設值。
 否則,應用程式會在切換之後繼續將寫入流量傳送至藍色環境。

  • 對於 Aurora 資料庫叢集 下列動作:

    • 檢閱邏輯複寫限制,並在切換之前採取任何必要的動作。如需詳細資訊,請參閱 藍/綠部署的 PostgreSQL 邏輯複寫限制

    • 執行 ANALYZE 操作以重新整理 pg_statistics 資料表。這樣可以降低轉換後發生效能問題的風險。

注意

切換期間,您無法修改切換中包含的任何資料庫叢集

切換前驗證 CloudWatch 指標

在切換藍/綠部署之前,我們建議您在 Amazon CloudWatch 中檢查以下指標的值。

  • DatabaseConnections – 使用此指標估計藍/綠部署的活動層級,並在切換前確認該值處於部署的可接受層級。如果績效詳情已開啟,則 DBLoad 為更準確的指標。

  • ActiveTransactions – 若在任何資料庫執行個體中,資料庫參數群組中的 innodb_monitor_enable 設為 all,請使用此指標來查看是否有大量作用中交易可能封鎖切換。

如需這些指標的詳細資訊,請參閱 Amazon 極光的亞馬遜 CloudWatch 指標

在切換之前監視複本延遲

在切換藍/綠部署之前,請確定綠色資料庫上的複本延遲接近零,以減少停機時間。

  • 對於 Aurora MySQL,請使用AuroraBinlogReplicaLag CloudWatch 指標來識別綠色環境上目前的複寫延遲。

  • 對於 Aurora,請使用下列 SQL 查詢:

    SELECT slot_name, confirmed_flush_lsn as flushed, pg_current_wal_lsn(), (pg_current_wal_lsn() - confirmed_flush_lsn) AS lsn_distance FROM pg_catalog.pg_replication_slots WHERE slot_type = 'logical'; slot_name | flushed | pg_current_wal_lsn | lsn_distance -----------------+---------------+--------------------+------------ logical_replica1 | 47D97/CF32980 | 47D97/CF3BAC8 | 37192

    confirmed_flush_lsn代表傳送至複本的最後一個記錄序號 (LSN)。pg_current_wal_lsn表示資料庫現在所在的位置。lsn_distance的 0 表示複本被趕上。

切換藍/綠部署

您可以使用 AWS Management Console、或 RDS API 切換藍/綠部署。 AWS CLI

切換藍/綠部署
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 在導覽窗格中選擇 Databases (資料庫),然後選擇您要切換的藍/綠部署。

  3. 針對 Actions (動作),選擇 Switch over (切換)。

    Switch over (切換) 頁面即會出現。

    切換藍/綠部署
  4. Switch over (切換) 頁面上,檢閱切換摘要。請確定這兩個環境中的資源符合您預期的資源。如果不符,請選擇 Cancel (取消)。

  5. 針對逾時設定,輸入轉換的時間限制。

  6. 如果您的叢集正在執行 Aurora PostgreSQL,請檢閱並確認轉換前建議。如需詳細資訊,請參閱 藍/綠部署的 PostgreSQL 邏輯複寫限制

  7. 選擇 Switch over (切換)。

若要使用切換藍/綠部署 AWS CLI,請搭配下列選項使用切換-藍綠部署命令:

  • --blue-green-deployment-identifier— 指定藍/綠部署的資源 ID。

  • --switchover-timeout – 指定切換的時間限制,以秒為單位。預設值為 300。

範例 切換藍/綠部署

對於LinuxmacOS、或Unix:

aws rds switchover-blue-green-deployment \ --blue-green-deployment-identifier bgd-1234567890abcdef \ --switchover-timeout 600

在 Windows 中:

aws rds switchover-blue-green-deployment ^ --blue-green-deployment-identifier bgd-1234567890abcdef ^ --switchover-timeout 600

若要使用 Amazon RDS API 切換藍/綠部署,請搭配下列參數使用 SwitchoverBlueGreenDeployment 操作:

  • BlueGreenDeploymentIdentifier— 指定藍/綠部署的資源 ID。

  • SwitchoverTimeout – 指定切換的時間限制,以秒為單位。預設值為 300。

切換後

切換後,先前藍色環境中的資料庫叢集和資料庫執行個體會保留下來。標準成本適用於這些資源。藍色和綠色環境之間的複寫和二進位記錄會停止。

RDS 會重新命名藍色環境中的資料庫叢集和資料庫執行個體,方法是將 -oldn 附加至目前資源名稱 (其中 n 是數字)。數據庫集群被強制進入只讀狀態。即使您停用資料庫叢集上的read_only參數,它仍會保持唯讀狀態,直到您刪除藍/綠部署為止。

切換為藍色/綠色部署之後

更新消費者的父節點

切換至 RDS for 藍/綠部署之後,如果藍色叢集在切換前有任何外部複本或二進位記錄取用者,則必須在切換後更新其父節點,以維持複寫持續性。

切換之後,先前位於綠色環境中的入器資料庫執行個體會發出包含主記錄檔名稱和主記錄位置的事件。例如:

aws rds describe-events --output json --source-type db-instance --source-identifier db-instance-identifier { "Events": [ ... { "SourceIdentifier": "db-instance-identifier", "SourceType": "db-instance", "Message": "Binary log coordinates in green environment after switchover: file mysql-bin-changelog.000003 and position 804", "EventCategories": [], "Date": "2023-11-10T01:33:41.911Z", "SourceArn": "arn:aws:rds:us-east-1:123456789012:db:db-instance-identifier" } ] }

首先,請確定取用者或複本已套用舊藍色環境中的所有二進位記錄檔。然後,使用提供的二進制日誌坐標恢復消費者的應用程序。例如,如果您在 EC2 上執行 MySQL 複本,則可以使用以下CHANGE MASTER TO命令:

CHANGE MASTER TO MASTER_HOST='{new-writer-endpoint}', MASTER_LOG_FILE='mysql-bin-changelog.000003', MASTER_LOG_POS=804;