在 Amazon RDS 中切換藍/綠部署 - Amazon Relational Database Service

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

Amazon RDS 中切換藍/綠部署

切換會將綠色環境轉換為新的生產環境。當綠色資料庫執行個體具有僅供讀取複本時,也會進行轉換。切換前,生產流量會路由到藍色環境中的資料庫執行個體和僅供讀取複本。切換後,生產流量會路由到綠色環境中的資料庫執行個體和僅供讀取複本。

切換藍/綠部署與在藍/綠部署中提升資料庫執行個體不同。如果您從動作功能表中選擇提升,手動提升綠色資料庫執行個體,則藍色和綠色環境之間的複寫中斷,且藍色/綠色部署進入無效組態的狀態。

切換逾時

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

切換防護機制

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

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

  • 複寫運作狀態 – 檢查綠色主要資料庫執行個體複寫狀態是否良好。綠色主要資料庫執行個體是藍色主要資料庫執行個體的複本。

  • 複寫延遲 – 檢查綠色主要資料庫執行個體的複本延遲是否在轉換的允許限制內。允許的限制是以指定的逾時期間為基礎。複本延遲指出綠色主要資料庫執行個體落後於其藍色主要資料庫執行個體多遠。如需詳細資訊,請參閱在切換之前監控複本延遲

  • 作用中寫入 – 確定綠色主要資料庫執行個體上沒有作用中寫入。

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

  • 外部複寫 – 針對 RDS for PostgreSQL,請確定藍色環境不是自我管理的邏輯來源 (發佈者) 或複本 (訂閱者)。如果是這樣,我們建議您在藍色環境中捨棄所有資料庫的自我管理複寫插槽和訂閱,繼續切換,然後重新建立它們以繼續複寫。對於 RDS for MySQL 和 RDS for MariaDB, 會檢查藍色資料庫是否不是外部 binlog 複本。如果是,請確定它沒有主動複寫。

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

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

  • 不支援的 PostgreSQL 變更 – 針對使用邏輯複寫的 RDS for 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 參數 (適用於 RDS for MySQL) 或 default_transaction_read_only 參數 (適用於 RDS for PostgreSQL) 設定為 0並重新啟動資料庫執行個體為止。

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

如果您在藍色環境中設定標籤,這些標籤會在切換期間複製到新的生產環境。如需標籤的詳細資訊,請參閱標記 Amazon RDS 資源

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

切換最佳實務

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

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

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

  • 識別切換的最佳時間。

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

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

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

  • 確定綠色環境中的主要資料庫執行個體運作良好且複寫中。

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

  • 在切換之前,請確定資料載入完成。如需詳細資訊,請參閱藍/綠部署的延遲載入和儲存初始化

  • 對於使用邏輯複寫RDS for PostgreSQL 藍/綠部署,請執行下列動作: PostgreSQL

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

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

注意

切換期間,您無法修改切換中包含的任何資料庫執行個體

在切換前驗證 CloudWatch 指標

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

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

如需詳細資訊,請參閱Amazon RDS 的 Amazon CloudWatch 指標

在切換之前監控複本延遲

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

RDS for MySQL 和 RDS for MariaDB

對於 MySQL 和 MariaDB 藍/綠部署,請檢查綠色環境中的 ReplicaLag CloudWatch 指標,以識別目前的複本延遲。如需詳細資訊,請參閱診斷和解決僅供讀取複本之間的延遲

RDS for PostgreSQL

對於使用實體複寫的 PostgreSQL 藍/綠部署,請參閱 監控和調校複寫程序 以取得識別目前複本延遲的說明。

對於使用邏輯複寫的 PostgreSQL 藍/綠部署,請檢查藍色環境中的 OldestReplicationSlotLag CloudWatch 指標,以識別目前的複本延遲。如需詳細資訊,請參閱Amazon RDS 的 Amazon CloudWatch 執行個體層級指標

此外,您可以在藍色環境中執行下列 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 代表資料庫現在的位置。0 lsn_distance的 表示複本已趕上。

如需藍/綠部署何時使用實體複寫與邏輯複寫的說明,請參閱藍/綠部署的 PostgreSQL 複寫方法

切換藍/綠部署

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

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

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

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

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

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

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

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

  7. 選擇 Switch over (切換)。

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

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

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

範例 切換藍/綠部署

對於 Linux、 macOS或 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 參數 (適用於 MySQL 的 RDS) 或 default_transaction_read_only 參數 (適用於 PostgreSQL 的 RDS) 設定為 之前,舊藍色環境中的資料庫執行個體都是唯讀的0RDS 會命名綠色環境中的資料庫執行個體-newn

如果您刪除藍/綠部署資源,RDS 會保留 -newn -oldn和資源。

在切換藍/綠部署之後

更新消費者的父節點

RDS 提供全受管僅供讀取複本。不過,它也提供設定自我管理複本的選項,也稱為外部複本。外部複本可讓您使用第三方資源作為複寫目標。

在您切換 RDS for MariaDB 或 RDS for MySQL 藍/綠部署之後,如果藍資料庫執行個體在切換之前有任何外部複本或二進位日誌取用者,您必須在切換後更新其父節點,以維持複寫連續性。

更新父節點
  1. 切換後,先前在綠色環境中的資料庫執行個體會發出事件,其中包含主日誌檔案名稱和主日誌位置。若要尋找事件,請導覽至 RDS 主控台,然後從左側導覽窗格中選擇事件

  2. 在切換之前,依來源為舊綠色資料庫執行個體名稱的事件進行篩選。

  3. 尋找包含二進位日誌座標的事件。事件訊息類似於:Binary log coordinates in green environment after switchover: file mysql-bin-changelog.000003 and position 40134574

  4. 確定取用者或複本已套用舊藍環境的所有二進位日誌。然後,使用提供的二進位日誌座標來恢復取用者的複寫。例如,如果您在 EC2 上執行 MySQL 複本,您可以使用下列命令:

    MySQL 8.0.22 和較低的主要和次要版本

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

    MySQL 8.0.23 和更新的主要和次要版本

    CHANGE REPLICATION SOURCE TO SOURCE_HOST='{new-writer-endpoint}', SOURCE_LOG_FILE='mysql-bin-changelog.000003', SOURCE_LOG_POS=40134574;

如果消費者是另一個 RDS for MySQL 或 RDS for MariaDB 資料庫執行個體,請依序執行下列預存程序:

  1. mysql.rds_stop_replication

  2. mysql.rds_reset_external_master (適用於 8.0 版及更低版本) 或 mysql_rds_reset_external_source (適用於 8.4 版及更高版本)

  3. mysql.rds_set_external_master (適用於 8.0 版及更低版本) 或 mysql_rds_set_external_source (適用於 8.4 版及更高版本)

  4. mysql.rds_start_replication