本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon RDS 藍/綠部署概觀
透過使用 Amazon RDS 藍/綠部署,您可以進行並測試資料庫變更,然後在生產環境中實作這些變更。藍/綠部署會建立一個複製生產環境的預備環境。在藍/綠部署中,藍色環境是目前的生產環境。綠色環境是預備環境。測試環境會使用邏輯複寫與目前的生產環境保持同步。
您可以對綠色環境中的 RDS 資料庫執行個體進行變更,而不會影響生產工作負載。例如,您可以升級主要或次要資料庫引擎版本、升級基礎檔案系統組態或在預備環境中變更資料庫參數。您可以在綠色環境中徹底測試變更。備妥後,您可以切換環境,將綠色環境提升為新的生產環境。切換通常只需不到一分鐘的時間,不會遺失資料,也不需要變更應用程式。
因為綠色環境是生產環境拓撲的副本,所以綠色環境包含資料庫執行個體所使用的功能。這些功能包含僅供讀取複本、儲存組態、資料庫快照、自動備份、Performance Insights 和增強型監控。如果藍色資料庫執行個體是多可用區域資料庫執行個體部署,則綠色資料庫執行個體也是多可用區域資料庫執行個體部署。
注意
目前,僅 RDS for MariaDB、RDS for MySQL 和 RDS for PostgreSQL 支援藍/綠部署。如需 Amazon Aurora 的可用性,請參閱 Amazon Aur ora 使用者指南中的使用 Amazon RDS 藍色/綠色部署進行資料庫更新。
區域和版本可用性
功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域而有所不同。如需詳細資訊,請參閱 支援 Amazon RDS 藍色/綠色部署的區域和資料庫引擎。
使用 Amazon RDS 藍/綠部署的優點
透過使用 Amazon RDS 藍/綠部署,您可以隨時掌握最新的安全修補程式、改善資料庫效能,以及採用較新的資料庫功能,其停機時間短暫且可預測。藍/綠部署可減少資料庫更新 (例如主要或次要引擎版本升級) 的風險和停機時間。
藍/綠部署提供下列優點:
-
輕鬆建立生產就緒的預備環境。
-
自動將資料庫變更從生產環境複寫到預備環境。
-
在安全預備環境中測試資料庫變更,而不會影響生產環境。
-
隨時掌握最新的資料庫修補程式和系統更新。
-
實作和測試較新的資料庫功能。
-
切換預備環境以成為新的生產環境,而無需對應用程式進行變更。
-
透過使用內建的防護機制安全切換。
-
消除切換期間的資料遺失情況。
-
通常在一分鐘內快速切換,取決於您的工作負載。
藍/綠部署的工作流程
當您使用藍/綠部署進行資料庫更新時,請完成下列主要步驟。
-
識別需要更新的生產環境。
例如,此影像中的生產環境具有多可用區域資料庫執行個體部署 (mydb1) 和僅供讀取複本 (mydb2)。
-
建立藍/綠部署。如需說明,請參閱建立藍/綠部署。
下圖顯示一個範例,說明如何從步驟 1 開始生產環境的藍/綠部署範例。在建立藍/綠部署時,RDS 會複製主要資料庫執行個體的完整拓撲和組態,以建立綠色環境。複製的資料庫執行個體名稱會附加
-green-
。影像中的預備環境包含多可用區域資料庫執行個體部署 (mydb1-green-random-characters
abc123
) 和僅供讀取複本 (mydb2-green-abc123
)。建立藍/綠部署時,您可以升級資料庫引擎版本,並針對綠色環境中的資料庫執行個體指定不同的資料庫參數群組。RDS 也會設定從藍色環境中主要資料庫執行個體到綠色環境中主要資料庫執行個體的邏輯複寫。
在您建立藍/綠部署之後,綠色環境中的資料庫執行個體會預設為唯讀。
-
如有需要,對預備環境進行其他變更。
例如,您可能會對資料庫進行結構描述變更,或變更綠色環境中一或多個資料庫執行個體所使用的資料庫執行個體類別。
如需修改資料庫執行個體的相關資訊,請參閱修改 Amazon RDS 資料庫執行個體。
-
測試您的預備環境。
在測試期間,建議您將綠色環境中的資料庫保持唯讀狀態。請小心在綠色環境中啟用寫入作業,因為這些作業可能會造成複寫衝突。它們也可能會在切換後於生產資料庫中產生非預期的資料。若要啟用 RDS for MySQL 的寫入作業,請將
read_only
參數設定為0
,然後重新啟動資料庫執行個體。對於適用於 PostgreSQL 的 RDS,請off
在工作階段層級將default_transaction_read_only
參數設定為。 -
備妥後,請切換以將預備環境提升為新的生產環境。如需說明,請參閱切換藍/綠部署。
切換會產生停機時間。停機時間通常不到一分鐘,但可能更長,取決於您的工作負載。
下圖顯示切換後的資料庫執行個體。
切換後,綠色環境中的資料庫執行個體會成為新的生產資料庫執行個體。目前生產環境中的名稱和端點會指派給新提升的生產環境,不需要對您的應用程式進行任何變更。因此,您的生產流量現在會流向新的生產環境。先前藍色環境中的資料庫執行個體會重新命名,方法是將
-old
附加至目前名稱 (其中n
是數字)。例如,假設藍色環境中資料庫執行個體的名稱為n
mydb1
。切換後,資料庫執行個體名稱可能是mydb1-old1
。在影像的範例中,切換期間會發生下列變更:
-
名為
mydb1-green-abc123
的綠色環境多可用區域執行個體部署會成為名為mydb1
的生產多可用區域執行個體部署。 -
名為
mydb2-green-abc123
的綠色環境僅供讀取複本會成為生產僅供讀取複本mydb2
。 -
名為
mydb1
的藍色環境多可用區域資料庫執行個體部署會成為mydb1-old1
。 -
名為
mydb2
的藍色環境僅供讀取複本會成為mydb2-old1
。
-
-
如果不再需要藍/綠部署,您可以將其刪除。如需說明,請參閱刪除藍/綠部署。
切換後,不會刪除先前的生產環境,以便您可以在必要時使用它進行迴歸測試。
授予藍/綠部署操作的存取權
使用者必須具有必要的許可,才能執行與藍/綠部署相關的操作。您可以建立 IAM 政策,許可使用者和角色對其需要的指定資源執行特定 API 操作。然後,您可以將這些政策連線至需要這些許可的 IAM 許可集或角色。如需詳細資訊,請參閱 Amazon RDS 的 Identity and access management。
建立藍/綠部署的使用者必須具有執行下列 RDS 操作的許可:
-
rds:AddTagsToResource
-
rds:CreateDBInstanceReadReplica
切換藍/綠部署的使用者必須具有執行下列 RDS 操作的許可:
-
rds:ModifyDBInstance
-
rds:PromoteReadReplica
刪除藍/綠部署的使用者必須具有執行下列 RDS 操作的許可:
-
rds:DeleteDBInstance
Amazon RDS 會代表您在測試環境中佈建和修改資源。這些資源包括使用內部定義命名慣例的資料庫執行個體。因此,附加的 IAM 政策不能包含部分資源名稱模式,例如my-db-prefix-*
. 僅支援萬用字元 (*)。一般而言,我們建議使用資源標籤和其他支援的屬性來控制對這些資源的存取,而非萬用字元。如需詳細資訊,請參閱 Amazon RDS 的動作、資源和條件金鑰。
藍/綠部署考量
Amazon RDS 會使用每個資源的 DbiResourceId
追蹤藍/綠部署中的資源。此資源 ID 是資源的 AWS 區域唯一且不可變的識別碼。
資源 ID 與資料庫執行個體 ID 不同:
當您切換藍/綠部署時,資源的名稱 (執行個體 ID) 會變更,但每個資源都保留相同的資源 ID。例如,資料庫執行個體識別符可能是藍色環境中的 mydb
。切換後,相同的資料庫執行個體可能重新命名為 mydb-old1
。不過,資料庫執行個體的資源 ID 在切換期間不會變更。因此,當綠色資源提升為新的生產資源時,其資源 ID 與先前位於生產環境中的藍色資源 ID 不符。
在切換藍/綠部署之後,請考慮將資源 ID 更新為新提升之生產資源的 ID,以取得與生產資源搭配使用的整合功能和服務。具體來說,請考慮下列更新:
-
如果您使用 RDS API 和資源 ID 執行篩選,請在切換後調整用於篩選的資源 ID。
-
如果您使 CloudTrail 用稽核資源,請調整的取用者, CloudTrail 以在切換後追蹤新的資源 ID。如需詳細資訊,請參閱 在 AWS CloudTrail 中監控 Amazon RDS API 呼叫。
-
如果您使用 Performance Insights API,請在切換後調整 API 呼叫中的資源 ID。如需詳細資訊,請參閱 在 Amazon RDS 上使用績效詳情監控資料庫負載。
您可以在切換後監控具有相同名稱的資料庫,但其不包含切換前的資料。
-
如果您在 IAM 政策中使用資源 ID,請務必在必要時新增新提升之資源的資源 ID。如需詳細資訊,請參閱 Amazon RDS 的 Identity and access management。
-
如果您的執行個體有關聯的 IAM 角色,請務必在切換後重新關聯這些角色。附加的角色不會自動複製到綠色環境。
-
如果您使用 IAM 資料庫身份驗證對資料庫執行個體進行身分驗證,請確定用於資料庫存取的 IAM 政策同時具有政策
Resource
元素下方列出的藍色和綠色資料庫。這是必要的,以便在切換後連線到綠色資料庫。如需詳細資訊,請參閱 建立並使用 IAM 政策進行 IAM 資料庫存取。 -
如果您使 AWS Backup 用管理藍/綠部署中資源的自動備份,請在切換 AWS Backup 後調整使用的資源 ID。如需詳細資訊,請參閱 用 AWS Backup 於管理自動備份。
-
如果您想要還原屬於藍/綠部署之資料庫執行個體的手動或自動資料庫快照,請確定透過檢查取得快照的時間來還原正確的資料庫快照。如需詳細資訊,請參閱 從資料庫 快照還原。
-
如果您想要描述先前的藍色環境資料庫執行個體自動備份,或將其還原到某個時間點,請將資源 ID 用於操作。
因為資料庫執行個體的名稱會在切換期間變更,所以您無法將其先前的名稱用於
DescribeDBInstanceAutomatedBackups
或RestoreDBInstanceToPointInTime
操作。如需詳細資訊,請參閱 將資料庫執行個體還原至指定的時間。
-
若您在藍/綠部署的綠色環境中將僅供讀取複本新增至資料庫執行個體,則在切換時,新的僅供讀取複本不會取代藍色環境中的僅供讀取複本。不過,新的僅供讀取複本會在切換後保留在新的生產環境中。
-
在藍/綠部署的綠色環境中刪除資料庫執行個體時,您無法建立新的資料庫執行個體,以在藍/綠部署中取代該執行個體。
如果您使用與所刪除資料庫執行個體相同的名稱和 Amazon Resource Name (ARN) 建立的新資料庫執行個體,則它具有不同的
DbiResourceId
,因此不屬於綠色環境。如果您刪除綠色環境中的資料庫執行個體,則會產生下列行為:
-
如果藍色環境中存在名稱相同的資料庫執行個體,則它不會切換至綠色環境中的資料庫執行個體。此資料庫執行個體不會透過將
-old
新增至資料庫執行個體名稱來重新命名。n
-
指向藍色環境中資料庫執行個體的任何應用程式都會在切換後繼續使用相同的資料庫執行個體。
相同的行為適用於資料庫執行個體和僅供讀取複本。
-
藍/綠部署的最佳實務
下列是藍/綠部署的最佳實務:
一般最佳實務
-
切換前,請在綠色環境中徹底測試資料庫執行個體。
-
在綠色環境中將您的資料庫保留唯讀狀態。建議您在綠色環境上小心啟用寫入操作,因為它們可能會在綠色環境中造成複寫衝突。它們也可能會在切換後於生產資料庫中產生非預期的資料。
-
使用藍/綠部署實作結構描述變更時,請僅進行複寫相容的變更。
例如,您可以在資料表結尾新增資料欄,而不會中斷從藍色部署到綠色部署的複寫。不過,結構描述變更 (例如重新命名資料欄或重新命名資料表) 會中斷綠色部署的複寫。
如需有關複寫相容變更的詳細資訊,請參閱 MySQL 文件中的在來源和複本上使用不同的資料表定義進行複寫
,以及 PostgreSQL 邏輯複寫文件中的限制 。 -
建立藍/綠部署之後,如有必要,請處理延遲載入。在切換之前,請確定資料載入完成。如需詳細資訊,請參閱 在建立藍/綠部署時處理延遲載入。
-
當您切換藍/綠部署時,請遵循切換最佳實務。如需詳細資訊,請參閱 切換最佳實務。
RDS for MySQL 最佳實務
-
避免使用未針對複寫最佳化的非交易式儲存引擎,例如 MyISAM。
-
針對二進位日誌複寫最佳化僅供讀取複本,
例如,如果您的資料庫引擎版本支援它,請考慮在部署藍/綠部署之前,於生產環境中使用 GTID 複寫、平行複寫和免當機複寫。在切換藍/綠部署之前,這些選項會提升資料的一致性和耐久性。如需僅供讀取複本之 GTID 複寫的詳細資訊,請參閱 使用 GTID 式複寫。
RDS for PostgreSQL 最佳實務
-
如果您的資料庫有足夠的可釋放記憶體,請在藍色環境中增加
logical_decoding_work_mem
DB 參數的值。這樣做允許減少磁碟上的解碼,並改用記憶體。您可以使用FreeableMemory
CloudWatch 指標監視可用內存。如需詳細資訊,請參閱 Amazon RDS 的 CloudWatch Amazon 實例級指標。 -
建立藍/綠部署之前,請先將所有 PostgreSQL 延伸模組更新至最新版本。如需詳細資訊,請參閱 升級 PostgreSQL 延伸。
-
如果您使用
aws_s3
延伸模組,請務必在建立綠色環境之後透過 IAM 角色將綠色資料庫執行個體存取權授與 Amazon S3。這允許匯入和匯出命令在轉換之後繼續運作。如需說明,請參閱設定對 Amazon S3 儲存貯體的存取權。 -
如果您為綠色環境指定較高的引擎版本,請在所有資料庫上執行
ANALYZE
作業以重新整理資料pg_statistic
表。主要版本升級期間不會傳輸最佳化處理程式統計資料,因此您必須重新產生所有統計資料,以避免效能 如需主要版本升級期間的其他最佳作法,請參閱如何執行主要版本升級。 -
避免將觸發器設定為
ENABLE REPLICA
或ENABLE ALWAYS
是在來源上使用觸發器來操作資料。否則,複製系統會傳播變更並執行觸發程序,從而導致重複。 -
長時間執行的交易可能會導致重大複本延遲 若要減少複本延遲,請考慮執行下列動作:
-
減少可以延遲到綠色環境趕上藍色環境之後的長時間運行的事務。
-
在建立藍/綠部署之前,在忙碌的資料表上啟動手動真空凍結作業。
-
對於 PostgreSQL 版本 12 及更新版本,請停用大型或忙碌資料表上的
index_cleanup
參數,以提高藍色資料庫的正常維護速率。如需詳細資訊,請參閱盡快清空資料表。
-
-
緩慢的複寫會導致寄件者和接收者經常重新啟動,進而延遲同步處理。若要確保它們保持作用中狀態,請在藍色環境
0
中將wal_sender_timeout
參數設定為,並在綠色環境0
中將wal_receiver_timeout
參數設定為來停用逾時。 -
若要防止從藍色環境中移除預寫記錄 (WAL) 區段,請針對 PostgreSQL 版本 13 及更低版本,將
wal_keep_segments
參數設定為 15625。對於版本 14 及更高版本,如果有足夠的可用存儲空間,請將wal_keep_size
參數設置為 1 TiB。
藍/綠部署的限制
下列限制適用於藍/綠部署。
藍/綠部署的一般限制
下列一般限制適用於藍/綠部署:
-
MySQL 8.0.11 版至 8.0.13 版具有一個社群錯誤
,其會阻止這些版本支援藍/綠部署。 -
支援下列版本的 RDS for PostgreSQL 做為升級來源和目標版本:11.21 及更高版本、12.16 及更高版本、13.12 及更高版本、14.9 及更高版本,以及 15.4 及更高版本。對於較低版本,您可以對支援的版本執行次要版本升級。
-
藍/綠部署不支援使用管理主要使用者密碼。 AWS Secrets Manager
如果藍色資料庫上已啟用專用記錄磁碟區 (DLV),則必須在所有資料庫執行個體 (包括僅供讀取複本) 上啟用該磁碟區。
-
對於 RDS for PostgreSQL,。
-
對於 Po stgreSQL RDS,藍色環境資料庫執行個體不能是自我管理的邏輯來源 (發行者) 或複本 (訂閱者)。對於適用於 MySQL RDS,藍色環境資料庫執行個體不能是外部備份記錄複本。
-
在切換期間,藍色和綠色環境無法與 Amazon Redshift 進行零 ETL 整合。您必須先刪除整合再進行切換,然後重新建立整合。
-
建立藍/綠部署時,必須在綠色環境上停用事件排程器 (
event_scheduler
參數)。這樣可以防止在綠色環境中產生事件並導致不一致。 -
藍色/綠色部署不支援適用於 MySQL 的 AWS JDBC 驅動程式。如需詳細資訊,請參閱的已知限制
GitHub。 -
下列功能不支援藍/綠部署:
-
Amazon RDS Proxy
-
階層式僅供讀取複本
-
跨區域僅供讀取複本
-
AWS CloudFormation
-
Multi-AZ 資料庫叢集部署
支援藍/綠部署進行多可用區域資料庫執行個體部署。如需異地同步備份部署的詳細資訊,請參閱設定及管理多可用區部署。
-
藍/綠部署的PostgreSQL 擴充限制
下列限制適用於 PostgreSQL 延伸模組:
-
建立藍/綠部署時,必須在藍色環境上停用
pg_partman
延伸模組。延伸模組會執行 DDL 作業 (例如CREATE TABLE
),其會中斷從藍色環境到綠色環境的邏輯複寫。 -
建立藍/綠部署之後,所有綠色資料庫上的
pg_cron
延伸模組必須保持停用狀態。延伸模組具有以超級使用者身分執行的背景工作者,且會略過綠色環境的唯讀設定,這可能會造成複寫衝突。 -
如果藍色資料庫執行個體設定為外部資料包裝函式 (FDW) 延伸模組的外部伺服器,您必須使用執行個體端點名稱,而非 IP 位址。這可讓組態在轉換之後保持運作狀態。
建立藍/綠部署時,必須在藍色環境上停用
pglogical
和pg_active
延伸模組。將綠色環境提升為新的生產環境後,您可以再次啟用擴充功能。此外,藍色資料庫不能是外部執行個體的邏輯訂閱者。-
如果您使用
pgAudit
擴充功能,它必須保留在藍色和綠色資shared_preload_libraries
料庫執行個體的自訂資料庫參數群組上的共用程式庫 () 中。如需詳細資訊,請參閱 設定 pgAudit 擴充功能。
藍/綠部署中變更的限制
下列是藍/綠部署中變更的限制:
-
您無法將未加密的資料庫執行個體變更為加密的資料庫執行個體。
-
您無法將加密的資料庫執行個體變更為未加密的資料庫執行個體。
-
您無法將藍色環境資料庫執行個體變更為高於其對應綠色環境資料庫執行個體的引擎版本。
-
藍色環境和綠色環境中的資源必須在同一 AWS 帳戶中。
-
對於 RDS for MySQL,如果來源資料庫與自訂選項群組相關聯,則您無法在建立藍/綠部署時指定主要版本升級。
在此情況下,您可以建立藍/綠部署,而無需指定主要版本升級。然後,您可以在綠色環境中升級資料庫。如需詳細資訊,請參閱 升級資料庫執行個體引擎版本。
藍/綠部署的 PostgreSQL 邏輯複寫限制
藍/綠部署會使用邏輯複寫,讓預備環境與生產環境保持同步。PostgreSQL 具有某些與邏輯複寫相關的限制,其會在針對 RDS for PostgreSQL 資料庫執行個體建立藍/綠部署時轉換為限制。
下表描述適用於 RDS for PostgreSQL 藍/綠部署的邏輯複寫限制。
限制 | 說明 |
---|---|
資料定義語言 (DDL) 陳述式 (例如 CREATE TABLE 和 CREATE SCHEMA ) 不會從藍色環境複寫到綠色環境。 |
如果 Amazon RDS 在藍色環境中偵測到 DDL 變更,則您的綠色資料庫會進入複寫降級狀態。 您會收到一個事件,通知您藍色環境中的 DDL 變更無法複寫到綠色環境。您必須刪除藍/綠部署和所有綠色資料庫,然後重新建立該部署。否則,您將無法轉換藍/綠部署。 |
序列物件上的 NEXTVAL 作業不會在藍色環境與綠色環境之間同步。 |
在轉換期間,Amazon RDS 會在綠色環境中遞增序列值,以符合藍色環境中的序列值。如果您有數千個序列,這可能會延遲轉換。 |
藍色環境中的大型物件建立或修改並不會複寫到綠色環境。 |
如果 Amazon RDS 在藍色環境中偵測到 RDS 會產生一個事件,通知您藍色環境中的大型物件變更無法複寫到綠色環境。您必須刪除藍/綠部署和所有綠色資料庫,然後重新建立該部署。否則,您將無法轉換藍/綠部署。 |
具體化視觀表不會在綠色環境中自動重新整理。 |
在藍色環境中重新整理具體化視觀表不會在綠色環境中重新整理這些視觀表。轉換之後,您可以排定具體化視觀表的重新整理。 |
不允許在沒有主索引鍵的資料表上執行 UPDATE 和 DELETE 作業。 |
在建立藍/綠部署之前,請確定資料庫執行個體中的所有資料表都有主索引鍵。 |
如需詳細資訊,請參閱 PostgreSQL 邏輯複寫文件中的限制