examlab .net 用最有效率的方法,考取最有價值的認證
Vol. I
本篇導覽 約 37 分鐘

RDS 與 Aurora 的 Multi-AZ、Read Replica 與快取

7,400 字 · 約 37 分鐘閱讀 ·

SOA-C02 實戰指南:RDS 與 Aurora 韌性全覽 — Multi-AZ vs Multi-AZ DB Cluster、Aurora Replica 與 Reader Endpoint、RDS Read Replica、Failover 行為、Parameter Group、Maintenance Window、RDS Proxy、Performance Insights、Blue/Green Deployment,以及 SysOps 疑難排解模式。

立即做 20 題練習 → 免費 · 不用註冊 · SOA-C02

Amazon RDS 與 Aurora 是 AWS 上大多數工作負載的資料層,在 SOA-C02 中它們穩穩落在 Domain 2(可靠性與業務連續性)的核心地帶——Task Statement 2.1 要求「實作可擴展性與彈性」,Task Statement 2.2 要求「實作高可用性與韌性環境」。SAA-C03 問的是「這個工作負載該用 Multi-AZ 還是 Read Replica?」,SOA-C02 問的是「Failover 花了 8 分鐘而非預期的 90 秒——你會改什麼?」、「Read Replica 落後 600 秒且還在擴大——根本原因是什麼?」以及「一個 ALTER 參數變更顯示 pending-reboot——它實際上什麼時候生效?」RDS 與 Aurora 韌性正是 SysOps 層級與架構師層級分歧最明顯的主題:架構師選拓撲,SysOps 工程師負責維持它的運作、調整參數、執行 Failover,並在凌晨三點接手 pager。

本指南從運維角度完整走過 RDS 與 Aurora 韌性:Multi-AZ Failover 在底層如何實際運作、Multi-AZ DB Cluster(較新的三節點變體)與傳統 Multi-AZ 有何不同、Aurora 的六向儲存複製如何實現 30 秒以內的 Failover、如何在不違反耐久性的前提下設定 Read Replica、何時 RDS Proxy 是應對連線風暴的正確工具、staticdynamic 參數對 Maintenance Window 意味著什麼、Blue/Green Deployment 如何在不改寫應用程式碼的情況下切換資料庫,以及 Performance Insights 如何找出那個正在燒掉 CPU 的 SQL 語句。你也會看到反覆出現的 SOA-C02 場景:Replica 晉升執行手冊、Failover 時間疑難排解、Parameter Group 套用方法混淆、建立後無法切換的加密設定,以及 Cluster Endpoint 與 Instance Endpoint 的陷阱——幾乎每兩位考生就有一位中招。

為什麼 RDS 與 Aurora 韌性是 SOA-C02 Domain 2 的核心

官方 SOA-C02 Exam Guide v2.3 在 Task Statement 2.1 下明確點名 RDS 與 Aurora Replica(「實作 Amazon RDS replicas 和 Amazon Aurora Replicas」),並在 Task Statement 2.2 下框定 Multi-AZ 部署(「區分單一 Availability Zone 與 Multi-AZ 部署的用途……適用於 Amazon RDS」)。這兩項技能合起來涵蓋了關聯式資料庫在 AWS 上的完整運維生命週期——佈建 Replica、設定 Multi-AZ、監控 Lag、執行 Failover,以及從備份中還原。RDS 與 Aurora 韌性也間接出現在 Domain 1(針對 DatabaseConnectionsReplicaLagFreeableMemory 設 CloudWatch alarm)、Domain 3(佈建 Multi-AZ DB 的 CloudFormation 範本)、Domain 4(DB 憑證的 KMS 加密與 Secrets Manager 輪換)以及 Domain 6(用於查詢調整的 Performance Insights、提升連線效率的 RDS Proxy)之中。

在 SysOps 層級,問題的框架是運維而非架構設計。SAA-C03 問「哪種 RDS 部署拓撲具備最高可用性?」,並獎勵選出 Multi-AZ DB Cluster 或 Aurora 的考生。SOA-C02 問「生產資料庫上週 Failover 兩次——你會先看哪些 metrics,以及會改什麼設定?」答案幾乎不是「換一種拓撲」,而是 BinLogDiskUsageReplicaLag、Maintenance Window 時間點、Parameter Group 的 apply_method,或是 Promotion Tier 的排序。Domain 2 的每個其他主題都依賴 RDS 與 Aurora 韌性:ELB 與 Auto Scaling 後方的應用程式層(EC2 主題)仰賴資料庫保持正常;備份與 DR 主題依靠 RDS PITR 與 Aurora Cluster Snapshot;Domain 6 的效能調整主題則倚仗 Performance Insights 與 RDS Proxy。

  • Multi-AZ deployment(傳統):一種 RDS 部署,包含一個 Primary Instance 與位於不同 Availability Zone 的一個同步 Standby,共用一個在 Failover 時切換的 DNS Endpoint。Standby 不提供流量服務。
  • Multi-AZ DB Cluster:較新的 RDS 部署,包含一個 Writer 與跨三個 AZ 的兩個可讀 Standby,使用半同步複製。可讀 Standby 透過 Reader Endpoint 提供讀取流量服務。
  • Read Replica(RDS):RDS Primary 的非同步副本,提供讀取流量服務。大多數引擎每個 Primary 最多 15 個。本身並非高可用性機制。
  • Aurora Cluster:一個邏輯資料庫,包含一個 Writer 與最多 15 個 Aurora Replica,共用一個在三個 AZ 間六向複製的分散式儲存磁碟區。
  • Cluster Endpoint(Aurora):Writer Endpoint,始終指向目前的 Primary。
  • Reader Endpoint(Aurora):負載平衡的 DNS Endpoint,將讀取連線分發到所有 Aurora Replica。
  • Custom Endpoint(Aurora):使用者定義的 Endpoint,指向叢集 Instance 中的特定子集(例如報表讀取池)。
  • Instance Endpoint:每個 Instance 的 DNS 名稱,繞過叢集層級的負載平衡。
  • Promotion Tier:0–15 的優先順序值,決定 Failover 時的晉升順序;數字越低代表優先順序越高。
  • Parameter Group:資料庫引擎參數的具名集合;static 參數需要重新開機,dynamic 參數立即生效。
  • Maintenance Window:每週 30 分鐘的時間槽,AWS 在此期間可能套用修補程式與待處理的參數變更。
  • Blue/Green Deployment:一種受管 RDS 功能,建立 Blue(生產)資料庫的同步化 Green 副本,讓你進行測試,然後以原子方式交換 Endpoint。
  • RDS Proxy:受管連線池 Proxy,吸收連線風暴並在 DB Failover 時透明地維持連線。
  • Performance Insights:受管 RDS 儀表板,顯示以 SQL 語句、Wait Event、Host 和 User 分解的 DB Load(Average Active Sessions)。
  • Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html

白話文解釋 RDS 與 Aurora 韌性

RDS 與 Aurora 的術語堆疊得很快——Multi-AZ vs Multi-AZ DB Cluster vs Read Replica vs Aurora Replica vs Reader Endpoint vs Cluster Endpoint。三個類比可以讓這些概念牢牢地固定在腦海中。

類比一:夜市攤位的備用廚師

單一 AZ 的 RDS Instance 就像夜市裡只有一個師傅的攤位。師傅生病沒來,攤位就停賣——直到找到新師傅才能重新開張。傳統 Multi-AZ RDS一個主攤位加上隔壁巷子一個同步跟做每道菜的備用師傅。備用師傅同步複製每道料理的步驟(同步複製),但從不對客人服務——他存在的唯一目的是主師傅突然不能來的那一天。當這天來臨,攤位老闆(RDS 控制平面)把「現在開賣」的牌子翻到巷子那邊,讓同一個電話號碼(DNS Endpoint)接通到備用師傅的攤位。切換需要 60 到 120 秒。

Multi-AZ DB Cluster三條街各一個攤位組成的連鎖夜市——一個主師傅負責出菜,另外兩條街各有一個師傅既能接配菜訂單(沙拉、飲料,即讀取請求)又同步跟著主師傅做主菜。主師傅倒下時,其中一位師傅在約 35 秒內接手,因為他們原本就在做大部分的工作了。客人打去問「今天有什麼推薦?」的電話(Reader Endpoint)本來就是接到旁邊的師傅,所以問問題的電話根本沒感覺到主師傅換了人。

Aurora一個中央備料廚房加上最多 15 個出餐站。有一個寫入站把新菜放上輸送帶(共用分散式儲存磁碟區),最多 15 個讀取站從輸送帶上取菜送給客人。輸送帶本身在三條街上有六份完全一樣的副本同時運轉——同時失去兩條街也不會損失任何一道菜。當寫入站故障,最近的出餐站在大約 30 秒內轉換成「寫入」模式,排隊等待的客人移到下一個站。

RDS Read Replica散佈在城市各處的行動餐車衛星。主攤位非同步地把每道菜的配方傳給它們(每隔幾秒)。只想看菜單的客人可以去餐車,減輕主攤位的負擔。但餐車不接受新訂單,而且有時候配方會落後一些。落後太多的餐車就有很高的 Replica Lag

類比二:圖書館的館規手冊

DB Parameter Group圖書館的館規手冊Static 參數是印在正式手冊裡的規定(max_connectionsshared_buffers)——要更改它們,你必須重印手冊並在週一早上重新開館(重新開機)。Dynamic 參數是公佈欄上的告示(autovacuum_naptimelog_min_duration_statement)——換一張告示,館員幾分鐘內就能看到。Apply method pending-reboot 意思是「我們更新了手冊草稿,但館員用的還是舊版,等下次重新開館才換」。Dynamic 參數的 Apply method immediate 就是現在就換上的公佈欄告示,立刻生效。

Maintenance Window每週的固定打烊時間,清潔人員(AWS)在這時段做例行工作——小版本升級、OS 修補、套用你排隊等待的 pending-reboot 參數。如果你把視窗設在週日凌晨三點,而有 pending-reboot 的參數在等待,那就是在那時候套用。Major 版本升級比較像是整修裝潢——只在你明確批准時才進行,就算已排程也一樣。

類比三:公司總機接待員

RDS Proxy公司的前台接待員。沒有接待員時,每位訪客(應用程式連線)直接走向特定員工(資料庫連線槽)。當 500 位訪客同時湧進一個小辦公室(Lambda 暴增、流量尖峰),辦公室的座位不夠,開始拒絕訪客(too many connections)。有接待員時,訪客在大廳排隊;接待員維持著與員工之間固定數量的對話,一旦有空位,下一位訪客就被接通。辦公室大樓換地址(DB Failover),接待員悄悄移到新大樓,訪客幾乎沒有感覺——接待員的號碼是一樣的。RDS Proxy 就是這樣處理資料庫連線的:池化、多工,並在 Failover 時維持應用程式端 socket,同時悄悄重新連接到新的 Primary。

在 SOA-C02 中,當題目混合 Multi-AZ 與 Read Replica 時,夜市攤位的類比最實用。Multi-AZ = 為了韌性而同步跟做的備用師傅,但從不服務客人;Read Replica = 服務菜單讀取但會落後主攤位的行動餐車。Aurora = 有多個出餐站共用一條輸送帶的中央廚房。考試中的錯誤答案是把 Read Replica 當成 HA——它們是水平擴展,不是韌性。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html

RDS Multi-AZ:同步 Standby 與自動 Failover

傳統 Multi-AZ 是每種 RDS 引擎(PostgreSQL、MySQL、MariaDB、Oracle、SQL Server)的第一線 HA 機制。大多數考生聽到「RDS 韌性」時第一個想到的就是它。

架構

在傳統 Multi-AZ 中,RDS 在同一 Region 的兩個 AZ 中佈建兩個 Instance

  • 一個 Primary,處理所有讀取與寫入。
  • 一個 Standby,維持 Primary 儲存的同步、逐位元組副本。Standby 不提供任何流量服務——對應用程式而言是不可見的。

複製在儲存層是同步的(SQL Server 使用引擎層面的鏡像或 AlwaysOn)。Primary 上的每次 commit 都會阻塞,直到 Standby 確認已將寫入持久化到其 EBS 磁碟區。這意味著對於已提交的交易,RPO 實際上為零。代價是與單一 AZ 相比,每筆交易多了一點延遲。

Endpoint 與 DNS

整個 Multi-AZ 配對只有一個 DNS Endpoint——例如 mydb.abc123.us-east-1.rds.amazonaws.com。Endpoint 解析到目前 Primary 的 IP 位址。Failover 時,RDS 更新 DNS 記錄,讓同一個 hostname 現在指向新的 Primary(原先的 Standby,現已晉升)。

自動 Failover 觸發條件

RDS 持續監控 Primary,並在以下情況觸發自動 Failover:

  • Primary Instance 故障(硬體、Hypervisor 或 AZ 中斷)。
  • Primary 所在 AZ 失去網路連線
  • Primary EBS 磁碟區發生儲存故障
  • 計畫性 Maintenance 期間的計算故障
  • 手動 Failover,透過帶有 ForceFailover=trueRebootDBInstance API,或透過主控台「Reboot」並勾選 Failover 核取方塊。

Standby 故障不會觸發任何切換——Standby 會在背景被替換,同時 Primary 持續提供服務。

Failover 時間

傳統 Multi-AZ Failover 端對端需要 60 到 120 秒。 計時包括:

  1. 偵測 Primary 故障(10–30 秒,視故障模式而定)。
  2. 將 Standby 晉升為 Primary(DB 引擎復原、log replay)。
  3. DNS 傳播——CNAME 已更新,但用戶端 DNS 快取和 JDBC 連線池可能保留舊條目,直到重新解析。

使用 JDBC driver 並設定 TCP 層 keep-alive 與短 DNS TTL 的應用程式恢復最快。有長期連線且積極用戶端 DNS 快取(尤其是 JVM 預設的永久快取)的應用程式,會在快取有效期間持續失敗,通常要到手動重啟才能恢復。

  • 傳統 Multi-AZ RDS Failover:通常 60 到 120 秒
  • Multi-AZ DB Cluster Failover:通常低於 35 秒(AWS 文件中常寫成「less than 35s」)。
  • Aurora Failover:當叢集中存在 Aurora Replica 時通常低於 30 秒;若無 Replica,Aurora 必須啟動新 Instance,可能需要數分鐘。
  • 每個 RDS Primary 最多 Read Replica 數量:MySQL、MariaDB、PostgreSQL 為 15 個;Oracle 與 SQL Server 為 5 個(視引擎而定,請查閱最新文件)。
  • 每個 Aurora Cluster 最多 Aurora Replica 數量15 個
  • 備份保留期:自動備份 1–35 天(手動 Snapshot:無限期,直到你刪除)。
  • PITR 粒度:保留視窗內的任意秒。
  • Maintenance Window 最短長度:30 分鐘。
  • Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html

Multi-AZ 不做的事

這是 Multi-AZ 上最常被 SOA-C02 測試的陷阱:

傳統 Multi-AZ Standby 純粹是 Failover 目標。它無法被你的應用程式存取,不會以獨立 Endpoint 的形式出現,也無法用來擴展讀取。選擇 Multi-AZ 來「將報表查詢從 Primary 卸載」的考生會答錯。讀取擴展的正確答案是 Read Replica(RDS)、Aurora Replica(Aurora),或 Multi-AZ DB Cluster(較新的三節點變體,其中 Standby 是可讀的)。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html

Multi-AZ 也無法防範邏輯損壞——如果 Primary 執行了 DROP TABLE,它會立即複製到 Standby,兩端的資料表都消失了。邏輯復原需要自動備份與 Point-in-Time Restore(後面會介紹)。

Multi-AZ DB Cluster:現代三節點變體

2022 年 AWS 為 MySQL 和 PostgreSQL 推出了 Multi-AZ DB Cluster——一種較新的部署拓撲,解決了傳統 Multi-AZ 的兩個限制。

架構

Multi-AZ DB Cluster 包含:

  • 三個 Instance三個 AZ:一個 Writer 加兩個可讀 Standby。
  • 引擎層面的半同步複製(MySQL binary log shipping、PostgreSQL streaming replication)。
  • Writer 上的 commit 在兩個 Standby 中至少一個確認後即被認可——不需要等兩個都確認。

對外暴露三個 Endpoint:

  • Writer Endpoint — 指向目前的 Writer。
  • Reader Endpoint — 對兩個 Standby 進行負載平衡以服務讀取流量。
  • Per-instance Endpoint — 三個 Instance 各一個,供你需要精確指定某個 Instance 時使用。

為什麼它存在

相較於傳統 Multi-AZ 的兩項運維優勢:

  • Failover 低於 35 秒 — 比傳統 Multi-AZ 快一倍,因為 Standby 已在運行引擎且快取是熱的。
  • 可讀 Standby — Standby 終於物盡其用,提供讀取流量服務,縮小與 Aurora 的差距。

何時選擇哪種

  • Multi-AZ DB Cluster:引擎為 MySQL 或 PostgreSQL、需要 35 秒以內 Failover,且可將可讀 Standby 用於部分讀取卸載。
  • 傳統 Multi-AZ:引擎為 Oracle、SQL Server 或 MariaDB(目前尚不支援 Multi-AZ DB Cluster),或需要同步複製以確保嚴格 RPO=0(Multi-AZ DB Cluster 的半同步模型存在微小的理論 RPO 視窗)。
  • Aurora:需要最低 Failover 時間、六向儲存複製和最多 15 個可讀 Replica——且引擎為 MySQL 或 PostgreSQL 相容。

在 SOA-C02 中,「Multi-AZ」這個詞含義過載。閱讀每道題目時要注意修飾語。「Multi-AZ deployment」通常指傳統的兩個 Instance Multi-AZ。「Multi-AZ DB Cluster」或「Multi-AZ DB Cluster deployment」特指三個 Instance 的變體。Failover 時間、讀取可擴展性和引擎支援都不同。混淆兩者是 SOA-C02 最常見的錯誤之一。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html

RDS Read Replica:非同步讀取擴展

Read Replica 是 RDS Primary 的非同步副本,可透過自己的 DNS Endpoint 存取,專門服務讀取流量。

Read Replica 的用途

  • 讀取擴展 — 將 SELECT 查詢卸載到一個或多個 Replica,以降低 Primary 負載。
  • 跨 Region 災難復原 — 跨 Region Read Replica 是 RDS 低 RPO/低 RTO DR 的標準模式。
  • 工作負載隔離 — 繁重的報表查詢可在專用 Replica 上執行,不影響交易流量。
  • 遷移目標 — 你可以將 Read Replica 晉升為獨立 Primary,用於引擎升級或主要版本遷移。

複製機制

RDS Read Replica 使用引擎原生非同步複製——MySQL binlog/GTID、PostgreSQL streaming WAL、MariaDB binlog。複製持續運行,Lag 由 ReplicaLag CloudWatch metric(以秒為單位)追蹤。健康的 Replica 有幾秒的 Lag;持續數十秒或不斷增長的 Lag 是問題。

最大數量

  • MySQL、MariaDB、PostgreSQL:每個 Primary 最多 15 個 Read Replica
  • Oracle:通常最多 5 個 Read Replica(視引擎而定)。
  • SQL Server:支援有限——某些版本存在 Read Replica,但有引擎特定的限制。

你也可以在 MySQL/MariaDB 上建立 Read Replica 的 Read Replica(串聯),以鏈接複製,適用於非常高的讀取扇出或地理分佈。

晉升 Read Replica

要將 Read Replica 用作新 Primary(用於 DR 或遷移),呼叫 PromoteReadReplica API。晉升會:

  • 停止來自原始 Primary 的複製。
  • 移除 Read Replica 的唯讀標誌——它現在可以接受寫入。
  • 切斷關係——不會自動重新附加。
  • 不會變更 Endpoint。Replica 保留其原始 DNS 名稱;應用程式必須重新設定連線字串以指向晉升後的 Instance。

晉升本身需要幾分鐘(取決於引擎和待處理的複製積壓)。對於 DR,典型 RTO 為 5–15 分鐘,包括晉升加上應用程式重新設定加上 DNS 更新。

::warning

這是 SOA-C02 在 Read Replica 上最常測試的陷阱。Read Replica 不是高可用性機制。Primary 故障時,RDS 不會自動晉升 Read Replica。你必須手動啟動 PromoteReadReplica(或透過你用 EventBridge + Lambda 建立的自動化)。自動 Failover 的答案是 Multi-AZ(傳統或 DB Cluster)或 Aurora。把 Read Replica 與 HA 混淆是必錯的答案。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html ::

Replica Lag——原因與修復

ReplicaLag 上升表示 Replica 無法跟上 Primary 的寫入量。常見原因:

  • 舊版 MySQL 的單執行緒複製套用 — 使用並行複製(multi-threaded slave)修復,或升級引擎版本。
  • Primary 上長時間執行的交易,在提交前阻塞 log shipping。
  • Replica Instance 類別小於 Primary — 對於寫入密集的工作負載,Replica 應與 Primary Instance 類別匹配或更大。
  • Replica I/O 瓶頸 — 將 Replica 的儲存從 gp2 切換到帶有 Provisioned IOPS 的 gp3,或切換到 io2 Block Express 以獲得次毫秒延遲。
  • Replica 被讀取飽和 — 增加另一個 Replica 並進行負載平衡;或使用 Aurora Reader Endpoint 以獲得內建負載平衡。

針對 ReplicaLag 設定 CloudWatch alarm(每個 Replica 的 dimension DBInstanceIdentifier),閾值根據你的應用程式需求設定——通常為 60–300 秒。

Aurora 架構:Writer 加最多 15 個 Reader 共用分散式儲存

Aurora 是 AWS 重新設計的關聯式資料庫引擎,在 SQL 層與 MySQL 和 PostgreSQL 相容,但具有根本不同的儲存與複製架構。

儲存層

Aurora 的 Writer 和 Reader 沒有用於實際資料的本機磁碟。它們共用一個分散式 Cluster Volume,自動在三個 Availability Zone 間六向複製(每個 AZ 兩份副本)。寫入在六份副本中的四份持久化後被認可(寫入 quorum);讀取可以在六份中的三份完成(讀取 quorum)。這意味著 Aurora 能夠承受:

  • 整個 AZ 加一份額外副本的損失而不丟失資料。
  • 整個 AZ 的損失而不損失讀取可用性。

Cluster Volume 以 10-GiB 為單位自動增長,最多 128 TiB,舊分段持續重新平衡以避免熱點。

計算層

一個 Cluster 有一個 Writer 和最多 15 個 Aurora Replica。Cluster 中的所有 Instance 看到的是同一個共用儲存——Replica 不是在製作本機副本,而是直接從同一個底層 Volume 讀取。這產生了三個 Aurora 獨有的運維特性:

  • 複製幾乎是即時的 — 通常只有 10–20 毫秒的 Lag,因為沒有 log shipping;Replica 只是讀取稍新一點的頁面版本。
  • Failover 很快 — 當至少一個 Replica 存在時低於 30 秒,因為 Replica 的快取已是熱的且儲存是共用的。
  • Replica 獨立擴展讀取 — 它們從 Writer 正在更新的同一個 Volume 讀取,除了複製訊號外不對 Writer 造成額外負擔。

Aurora Endpoint

Aurora 暴露四種 Endpoint 類型:

  • Cluster(Writer)Endpoint — 指向目前 Primary 的 DNS 名稱。始終可寫入。用於應用程式寫入。
  • Reader Endpoint — 在 Cluster 中所有 Aurora Replica 間進行負載平衡的 DNS 名稱。用於應用程式唯讀查詢。
  • Custom Endpoint — 使用者定義的 Endpoint,指向所選 Cluster Instance 子集(例如,指向兩個專用於 BI 查詢的大型 Replica 的 reporting Endpoint)。
  • Instance Endpoint — 每個 Instance 的 DNS 名稱。繞過叢集層級路由——適用於診斷、Replica 特定測試或遷移腳本。

Failover 行為

Aurora Failover 在 Writer 故障、AZ 故障或手動呼叫 FailoverDBCluster API 時觸發。控制平面:

  1. 偵測 Writer 故障(10–20 秒,視健康檢查頻率而定)。
  2. 根據 Promotion Tier 選擇最高優先級的 Replica(0 最高,15 最低;同級別按 Instance 大小打破平局,傾向於匹配 Writer)。
  3. 將選定的 Replica 晉升為 Writer(儲存已共用,因此不需要資料移動)。
  4. 更新 Cluster Endpoint DNS 以指向新 Writer。
  5. 舊 Replica 重新附加到新 Writer 以進行複製訊號傳送。

總時間:當至少一個 Replica 存在時通常低於 30 秒若 Cluster 沒有 Replica,Aurora 必須啟動新 Instance,這可能需要數分鐘——這是「Aurora 韌性」設定錯誤的最糟情況。

在你最希望在 Failover 中成為 Writer 的 Replica 上設定 Promotion Tier 0(通常是最大的、位於大多數客戶端所在 AZ 的 Replica),並在你不希望被晉升的專用報表 Replica 上設定較高的 Tier。AWS 優先選擇編號最小的 Tier;平局按 Instance 大小打破。SOA-C02 測試這個場景:「Aurora 晉升了一個無法承受生產寫入負載的小型報表 Replica」——解決方法是重新排序 Promotion Tier,而不是增加更多 Replica。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html

Aurora Global Database(範圍外重點)

Aurora Global Database 將 Cluster 跨 Region 延伸,具備次秒跨 Region 複製和受管跨 Region Failover。SOA-C02 並不深入測試 Global Database(那更屬於 SAP 層級),但你應該知道它存在,並且它是「RPO 低於 1 秒跨 Region」場景的答案。

Aurora Replica Auto Scaling:Reader Endpoint 行為

Reader Endpoint 使用 Round-robin DNS 策略在所有 Replica 間進行負載平衡。SOA-C02 上有兩個重要的運維細節:

DNS 負載平衡

Reader Endpoint 的 DNS 以短 TTL 解析(通常為 5 秒)。每次新連線都進行一次新的 DNS 查詢並落到不同的 Replica——這就是為什麼永久保持連線的 JDBC 連線池可能會固定在一個 Replica 上,造成 Cluster 負載不均。解決方法是應用程式層面的連線循環(max connection lifetime)或 RDS Proxy,它在 Aurora 之上實現了適當的負載平衡。

Replica 的 Aurora Auto Scaling

Aurora 支援基於 CloudWatch metrics 的 Application Auto Scaling 用於讀取 Replica 數量——通常是跨 Replica 平均的 CPUUtilizationDatabaseConnections。Scaling 策略可以按需求將 Replica 數量從最小值(例如 2)增加到最大值(例如 8)。這是「讀取負載在上班時間和夜間之間相差 10 倍」場景的 SysOps 層級功能。

在 SOA-C02 中,當題目描述「我們增加了更多 Aurora Replica,但現有的應用程式連線仍然全部打到原本的兩個 Replica」,答案是連線池行為:長期 JDBC 連線不會重新解析 DNS。解決方法是 RDS Proxy(在連線層進行負載平衡)或在連線池設定中套用 connectionTimeout/maxLifetime 以定期回收連線。增加更多 Replica 在連線從不重新解析的情況下無濟於事。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.Endpoints.html

RDS Proxy:Lambda 與高並發工作負載的連線池

RDS Proxy 是一個完全受管的資料庫 Proxy,用於池化和共用到後端 RDS 或 Aurora 資料庫的連線。

RDS Proxy 存在的原因

它解決的三個運維痛點:

  • Lambda 連線風暴 — 每次 Lambda 呼叫都開啟一個新 DB 連線,在突發負載下會耗盡資料庫的連線預算。RDS Proxy 維持固定的連線池並從中服務 Lambda。
  • 高連線數應用程式 — PHP-FPM、傳統 Rails 應用程式和短期 Worker 可能使 max_connections 達到飽和。RDS Proxy 將數千個用戶端連線多工到一個小型後端連線池。
  • Failover 透明性 — RDS Proxy 在 Failover 時維持應用程式端 TCP socket,同時重新連接到新 Primary,將應用程式的 Failover 影響從 60–120 秒縮短到幾秒。

設定機制

你建立一個與一個 RDS Instance 或 Aurora Cluster 關聯的 RDS Proxy。Proxy:

  • 存在於你的 VPC 中(每個子網路一個 ENI)。
  • 使用 Secrets Manager 取得資料庫憑證——IAM 主體呼叫 Proxy,Proxy 呼叫 Secrets Manager 取得實際 DB 憑證。
  • 透過 IAM 身份驗證或 DB 憑證對用戶端進行身份驗證。
  • 有自己的 Endpoint,應用程式連接到這個 Endpoint(而不是直接連接到 DB 的 Endpoint)。
  • 支援 Aurora 的讀寫分離(帶有唯讀模式的 Proxy Endpoint)。

限制與注意事項

  • RDS Proxy 為每次查詢增加幾毫秒延遲
  • 不是免費的——按底層資料庫 Instance 的 vCPU 計費。
  • Pinning 可能阻止連線共用——當一個 Session 保持開啟的交易、使用特定設定的準備語句,或設定 Session 變數時,Proxy 會將用戶端「固定」到一個特定的後端連線,直到 Session 關閉。高 Pinning 率會削弱多工的好處;CloudWatch metric DatabaseConnectionsCurrentlySessionPinned 追蹤這一點。

Failover 加速

RDS Proxy「透明 Failover」的好處是 SOA-C02 上最常測試的功能。Primary 故障時:

  • 應用程式到 Proxy 的連線保持開啟。
  • Proxy 的後端連線中斷。
  • Proxy 悄悄重新連接到新 Primary。
  • 應用程式進行中的查詢可能失敗(Proxy 無法重播),但下一個查詢在幾秒內成功——沒有 socket 重置,沒有 DNS 重新解析。

在 SOA-C02 中,當場景描述「Lambda 函數呼叫 RDS 資料庫在尖峰期間遇到 too many connections 錯誤」,答案是 RDS Proxy。Lambda 的突發模式(數千個並發呼叫,每個都開啟新連線)正是 RDS Proxy 的設計用途。提高 max_connections 是臨時修復,可能損害資料庫的記憶體佔用;RDS Proxy 是永久答案。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.html

Parameter Group:Static、Dynamic 與 Apply Method 陷阱

DB Parameter Group 是資料庫引擎參數(max_connectionsshared_bufferswait_timeout 等)的具名集合。每個 RDS Instance 恰好關聯一個 Parameter Group;多個 Instance 可以共用同一個 Group。

Static 與 Dynamic 參數

每個參數都有 staticdynamicapply_type

  • Static 參數需要資料庫重新開機才能生效。變更 Static 參數會將 Instance 狀態設為 pending-reboot。變更不會套用,直到下次重新開機——由你啟動、Multi-AZ Failover,或 Maintenance Window 修補。
  • Dynamic 參數立即或最多幾秒內生效,無需重新開機。

哪些參數是 Static 或 Dynamic 的清單視引擎而定,在 Parameter Group 主控台中可見。幾個例子:

  • MySQL max_connections — 大多數版本上是 Dynamic(變更立即生效)。
  • MySQL innodb_buffer_pool_size — Static(需要重新開機)。
  • PostgreSQL shared_buffers — Static。
  • PostgreSQL log_min_duration_statement — Dynamic。

ModifyDBInstance 上的 Apply Method

透過 API 或主控台變更參數時,你選擇 ApplyMethod

  • immediate — 盡快套用。對於 Dynamic 參數,這是即時的;對於 Static 參數,這意味著「立即重新開機資料庫」(API 呼叫也會重新開機 Instance)。
  • pending-reboot — 在下次重新開機時套用,無論是手動、Maintenance Window 觸發還是 Multi-AZ Failover。這是許多流程中 Static 參數的預設值。

陷阱是對於 Static 參數immediate 觸發重新開機——這是停機時間。不了解這一點的 SysOps 工程師可能因為點擊 innodb_buffer_pool_size 的「Apply」而使生產環境停機。

預設與自訂 Parameter Group

RDS 為每個引擎版本提供預設 Parameter Group(唯讀)。你無法修改預設 Group——要自訂任何內容,你必須建立自訂 Parameter Group,修改它,然後將其關聯到你的 Instance。將新的 Parameter Group 與 Instance 關聯本身對許多參數來說也是一個 pending-reboot 的變更。

一位 SysOps 考生在自訂 Parameter Group 上設定 max_connections(在某些版本上是 Static),看到 Instance 狀態為 pending-reboot,然後就離開了,期待它在下次 Maintenance Window 期間套用。它確實會。但對於某些 Parameter Group 和某些 Multi-AZ 拓撲,Maintenance Window 並不總是重新開機 Instance——只有修補程式和版本升級才會。確定性的修復方法是透過 RebootDBInstance 明確地重新開機。SOA-C02 用「我們三天前變更了參數,但它還沒有生效」這樣的場景來測試——答案是重新開機 Instance,而不是等 Maintenance Window。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

DB Cluster Parameter Group(Aurora)

Aurora 引入了第二種 Parameter Group 類型:DB Cluster Parameter Group,包含在 Cluster 層面套用的參數(跨 Cluster 中的所有 Instance)。Instance 層面的 Parameter Group 仍然存在,用於 Per-instance 參數。哪個層面的參數屬於哪裡是引擎特定的。

Maintenance Window:修補程式與待處理變更何時套用

每個 RDS Instance 都有一個 Maintenance Window——每週 30 分鐘(或更長)的時間槽,AWS 在此期間可能套用排程工作。

Maintenance Window 期間發生什麼

  • 必要的 Minor Engine 修補程式 — AWS 標記為必要的安全修補程式和錯誤修復。
  • OS 層面修補程式 — 用於底層 RDS 受管 Instance。
  • 帶有 ApplyMethod=pending-reboot 的待處理修改(有時——見上方的陷阱)。

此視窗不會觸發自動 Major 版本升級——這些需要透過 ModifyDBInstance 上的 MajorVersionUpgrade=true 明確選擇加入。

設定視窗

你可以設定視窗的星期幾和開始時間。如果你不指定,AWS 會自行選擇。對於 Multi-AZ Instance,AWS 先對 Standby 套用修補程式,然後 Failover 到現在已修補的 Standby,再修補原始 Primary——將停機時間最小化為一次 Failover(60–120 秒)。

必要與可選修補程式

對於嚴重安全修補程式,AWS 可能在你的視窗之外強制套用必要的修補程式。可選的修補程式等待視窗,只有在你設定 AutoMinorVersionUpgrade=true 時才套用。SysOps 工程師應查看 RDS 主控台中的 Recommended Actions 儀表板,了解有哪些待處理項目。

Multi-AZ Instance 在 Maintenance Window 修補期間會經歷短暫 Failover——通常 60–120 秒。將視窗排程在你的流量低谷(凌晨三點是全球應用程式的常見選擇,根據 Region 調整)。單一 AZ Instance 在修補期間會完全停機——有時 5–15 分鐘。SOA-C02 用「應用程式週日早上停機 10 分鐘」的場景來測試——答案是 Maintenance Window 加上單一 AZ 拓撲。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html

Performance Insights:慢查詢的 DB Load 分解

RDS Performance Insights 是一個受管效能儀表板,將資料庫負載分解為負責的 SQL 語句、Wait Event、Host 和 User。

核心 Metric:DB Load(Average Active Sessions)

標題 Metric 是 DB Load,以 Average Active Sessions (AAS) 衡量——每秒採樣一次,正在活躍執行或等待資源的 Session 的平均數量。DB Load 為 5 AAS 意味著平均有五個 Session 在任何給定時刻正在工作。

儀表板隨時間繪製 DB Load,顏色編碼按:

  • Wait Event — 每個 Session 在等待什麼(CPU、I/O、鎖、log file sync、網路等)。
  • SQL — 按負載貢獻排名的 Top SQL 語句。
  • Host — 驅動負載的客戶端 IP/hostname。
  • User — DB 使用者/角色。

DB Load 超過 vCPU 數量時

圖表上有一條水平線標記 Instance 類別的 vCPU 數量。當 DB Load 超過 vCPU 數量時,資料庫受 CPU 限制——Session 正在排隊等待 CPU。當 DB Load 很高但主要由 I/O 等待組成時,資料庫受 I/O 限制——切換到帶有 Provisioned IOPS 的 gp3 或 io2 Block Express 是典型的修復方法。

Performance Insights vs CloudWatch Metrics

CloudWatch 顯示聚合 Metrics——CPUUtilizationDatabaseConnectionsReadIOPS。Performance Insights 顯示這些 Metrics 的成因——哪個 SQL、哪個 Wait Event、哪個 User。兩者互補:透過 CloudWatch 發出 Alarm,透過 Performance Insights 深入找到根本原因。

保留期

  • 免費層:最近 7 天的 Performance Insights 資料。
  • 長期保留:最多 2 年(付費)。

場景模式:p99 查詢延遲突然飆升

典型的 SOA-C02 疑難排解場景:

  1. CloudWatch 發出 AlertWriteLatency 的 Alarm 或自訂應用程式端 p99 Metric 觸發。
  2. 開啟 Performance Insights:在 RDS 主控台導航到 DB Instance 的 Performance Insights 分頁。
  3. 識別 DB Load 圖表上的峰值 — 通常是在 Latency Alarm 的同一時間,DB Load 急劇上升超過 vCPU 線。
  4. 將分解切換到「Top SQL」:識別在峰值期間貢獻最多負載的 SQL 語句。通常是一個流氓查詢(缺少 WHERE 子句、沒有索引的新儀表板查詢、引入 N+1 的部署)。
  5. 將分解切換到「Wait Events」:確認 SQL 在等待什麼。cpu 意味著查詢計算昂貴;io:DataFileRead 意味著它在做全表掃描或缺少索引;Lock:transactionid 意味著它被另一個交易阻塞。
  6. 補救:添加缺少的索引、終止有問題的 Session、回滾部署,或添加 Read Replica 以吸收負載。

在 SOA-C02 中,每個「資料庫突然變慢」的場景都應該走過這個流程。考試通常給你一個 CloudWatch Alarm 並詢問「下一步是什麼?」——答案是 Performance Insights,而不是泛泛的「調查」。具體來說:Top SQL 識別查詢,Wait Events 識別瓶頸類別。兩者結合讓你決定是添加索引、擴展 Instance、添加 Replica,還是回滾部署。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html

Blue/Green Deployment:無停機的 Schema 變更

RDS Blue/Green Deployment 是一個受管功能,建立生產資料庫的同步化副本,讓你在 Green 副本上進行重大變更,並在準備好時以原子方式交換 Endpoint。

功能說明

你從 Blue 環境(你的生產資料庫)開始。RDS 啟動一個 Green 環境,它是從 Blue 接收 Streaming Replication 的邏輯副本。你可以在 Green 上:

  • 升級引擎 Major 版本。
  • 變更 Parameter Group。
  • 套用在生產環境上會鎖定資料表的 Schema 變更。
  • 端對端測試新設定。

準備好後,你觸發切換(Switchover)——RDS 以原子方式交換 DNS Endpoint,使應用程式現在在同一個 hostname 下打到 Green Instance。切換通常需要不到 1 分鐘,且現有連線會中斷(應用程式重新連接到新的 Green Primary)。

使用場景

  • Major 版本升級 — 在 Green 上測試,透過短暫停機而非長時間升級視窗進行切換。
  • Schema 遷移 — 在 Green 上執行 ALTER TABLE,不阻塞生產流量,然後切換。
  • 需要重新開機的 Parameter Group 變更 — 在 Green 上套用,切換而不是重新開機 Blue。
  • Instance 類別變更 — 在 Green 上佈建較大的 Instance 類別,然後切換。

限制

  • Blue/Green 目前支援 RDS for MySQL、MariaDB 和 PostgreSQL,以及 Aurora MySQL 和 Aurora PostgreSQL。
  • 複製使用原生引擎 binlog/WAL Streaming,因此需要在來源上啟用 binlog。
  • 切換時會短暫中斷進行中的連線——應用程式必須重新連接。
  • 切換期間的長時間執行交易可能失敗。

在 SOA-C02 中,當場景描述「我們需要將 RDS MySQL 從 5.7 升級到 8.0,並盡量降低生產影響」,答案是 Blue/Green Deployment。替代方案——就地 Major 版本升級、手動 Snapshot+Restore 或外部複製工具——都有更多停機時間或運維風險。Blue/Green 是帶有自動複製、測試和原子切換的 AWS 受管路徑。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments-overview.html

Point-in-Time Restore:運維復原工具

RDS 自動備份結合每日 Snapshot 和連續的交易 log 擷取,允許在保留視窗(1–35 天)內Point-in-Time Restore (PITR) 到任意秒。

PITR 的工作原理

當你啟用自動備份(BackupRetentionPeriod >= 1),RDS 會:

  • 在 Backup Window 期間每日對儲存磁碟區進行 Snapshot。
  • 持續將交易 log 傳送到 S3。
  • 允許從 EarliestRestorableTimeLatestRestorableTime(通常是最近 5 分鐘)的任意秒進行還原。

PITR 建立新的 DB Instance——它不會覆寫原始 Instance。你無法「就地還原」。

常見使用場景

  • 從邏輯損壞中復原 — 在 14:32 發生 DROP TABLE 意外;PITR 到 14:31:55,將刪除的資料表複製回生產環境。
  • 部署前的安全網 — 在高風險遷移前記錄時間戳記;如果出錯,PITR 到該時間戳記。
  • 取證 — 在攻擊時間點還原資料庫副本,用於事件分析。

限制

  • PITR 視窗受 BackupRetentionPeriod 限制(自動備份 1–35 天;手動 Snapshot 無保留限制)。
  • PITR 還原不是即時的——花費的時間與資料庫大小成正比(大型資料庫通常需要 30 分鐘到數小時)。
  • 還原的 Instance 獲得新的 Endpoint——必須更新應用程式設定。
  • 自動備份保留期:最少 1 天(維持 PITR 啟用的最低要求)到最多 35 天
  • 手動 Snapshot:無限期保留,直到你刪除。
  • Aurora Cluster Snapshot 保留期:自動備份同樣 1–35 天;手動 Snapshot 在刪除前持續保留。
  • PITR 粒度:保留視窗內的任意秒,最多到 LatestRestorableTime(通常是 5 分鐘前)。
  • Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIT.html

ElastiCache 用於快取:Redis vs Memcached,置於 RDS 之前

ElastiCache 是 AWS 受管的記憶體快取服務,支援兩種引擎:

  • Redis — 功能豐富,支援複製、持久性、複雜資料類型(列表、集合、排序集合、Stream)、Pub/Sub、交易,以及具有自動 Failover 的 Multi-AZ。大多數現代應用程式的預設選擇。
  • Memcached — 簡單、多執行緒、分片,無複製或持久性。功能較少,但對於簡單鍵值工作負載,每節點的原始吞吐量略高。

為什麼快取屬於這個主題

SOA-C02 綱要將快取與 RDS 韌性歸在 Task Statement 2.1 之下,因為快取是讀取密集工作負載不應只是一直增加 Read Replica 的運維答案。命中快取的請求永遠不會碰到資料庫——節省成本並為寫入流量釋放資料庫資源。

快取放置模式

  • Cache-aside(延遲載入) — 應用程式先檢查快取;Cache miss 時,查詢 DB 並將結果存入快取。簡單,對快取故障有韌性。
  • Write-through — 應用程式同時寫入快取和 DB。快取始終是新鮮的,但寫入較慢。
  • Read Replica + 快取 — 結合 Aurora Reader Endpoint 與 ElastiCache;快取吸收熱鍵,Replica 處理 Cache miss。

Redis Multi-AZ 與自動 Failover

對於 HA,ElastiCache Redis 支援 Cluster 模式停用(一個分片,帶 Replica)和 Cluster 模式啟用(多個分片,每個帶 Replica)。兩者都可以在不同 AZ 中擁有 Replica,並在 Primary 故障時自動 Failover 到 Replica——行為類似於 RDS Multi-AZ。

在 SOA-C02 中,當場景描述「RDS 上的讀取負載導致 CPU 飽和;我們需要擴展」——添加 Read Replica 是一個答案,添加快取通常是更好的答案。熱讀工作負載的快取命中率 80–95% 意味著資料庫 CPU 大幅下降,無需佈建更多計算資源。考試通常同時提供兩個選項;當工作負載有一小組頻繁讀取的項目時,優先選擇快取。Reference: https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/WhatIs.html

鬆耦合架構:SQS 作為緩衝器

Task Statement 2.1 明確提到「實作鬆耦合架構」。在 SOA-C02 中,標準答案是 Amazon SQS 作為應用程式層之間的緩衝器。

為什麼 SQS 屬於韌性範疇

當下游元件(資料庫、外部 API、Worker 叢集)無法跟上上游負載時,同步耦合會向後傳播故障——上游元件在等待時耗盡記憶體,然後上游的上游也故障,依此類推。SQS 解耦各層:上游將訊息寫入佇列然後繼續;下游以自己的節奏拉取訊息。

常見模式

  • Web 層 → SQS → Worker 層 → RDS — Web 層接受請求並排隊作業;Worker 以資料庫可持續的速率處理。
  • 突發吸收 — 突然的流量峰值填充佇列,而不是使資料庫崩潰。
  • 對暫時性故障的重試 — SQS 訊息可見性逾時 + Dead-letter Queue 優雅地處理暫時性下游故障。

運維特性

  • Standard Queue:至少一次傳遞,盡力排序。
  • FIFO Queue:在訊息群組內恰好一次處理,有序。
  • Visibility Timeout:消費者讀取訊息後訊息不可見的時間;若消費者在刪除前崩潰,訊息重新出現。
  • Dead-letter Queue:多次失敗的訊息移到這裡供檢查。

RDS 加密:建立後無法切換

這是一個關鍵的 SOA-C02 陷阱,符合這個主題的運維角度。

限制

RDS 靜態加密在 Instance 建立時設定,之後無法變更。 你無法:

  • 就地加密現有的未加密 Instance。
  • 就地解密現有的已加密 Instance。
  • 將已加密 Instance 上的 KMS 金鑰更改為不同的金鑰。

解決方法

要加密現有的未加密資料庫:

  1. 對未加密的 Instance 進行手動 Snapshot。
  2. 將 Snapshot 複製到新 Snapshot,指定 KMS 金鑰——此副本已加密。
  3. 將已加密的 Snapshot 還原到新 Instance。
  4. 將流量切換到新 Instance(DNS 更新或 Blue/Green Deployment)。

更換 KMS 金鑰也適用相同的工作流程——用新金鑰複製 Snapshot,然後還原。這是 SOA-C02 出現頻率最高的陷阱之一,無法在此選項「修改 Instance 並啟用加密」的情況下答對的考生將失分。

這是 SOA-C02 出現頻率最高的陷阱之一。場景描述一位 SysOps 工程師需要加密現有生產資料庫,並詢問最簡單的路徑。錯誤答案是「修改 Instance 並啟用加密」——根本沒有這樣的選項。正確答案涉及帶有 KMS 加密的 Snapshot 複製 + 還原,可選擇封裝在 Blue/Green Deployment 中進行切換。更換 KMS 金鑰也適用同樣的陷阱——Snapshot-copy-restore 是唯一的路徑。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html

場景模式:讀取密集應用程式導致 Primary CPU 飆升

典型的 SOA-C02 疑難排解流程:

  1. CloudWatch Alarm 觸發:RDS Primary 的 CPUUtilization > 80% Alarm。
  2. 開啟 Performance Insights:DB Load 顯示 4 vCPU Instance 上持續 6 AAS——資料庫受 CPU 限制。
  3. Top SQL 揭示來自報表儀表板的幾個 SELECT 查詢貢獻了 70% 的負載。
  4. 決策樹
    • 若工作負載是真正的讀取密集且查詢多樣 → 添加 Read Replica 並將報表路由到 Replica Endpoint。
    • 若工作負載有一組熱門的重複查詢 → 添加 ElastiCache 並快取頻繁讀取的鍵。
    • 若工作負載有一個特定的慢查詢 → 添加索引,改寫查詢。
    • 若讀取均勻分佈且應用程式可以使用 Reader Endpoint → 遷移到 Aurora 並使用帶有 Auto Scaling Replica 的 Cluster Reader Endpoint。
  5. 實作
    • 使用相同或更大的 Instance 類別佈建 Read Replica。
    • 更新應用程式碼或資料庫連線字串,將 SELECT 路由到 Replica。
    • ReplicaLag(> 60 秒)和 Replica 的 CPUUtilization 上設定 CloudWatch Alarm。

錯誤答案是「擴展 Primary 規格」——垂直擴展只是拖延問題,對於持續的讀取負載,水平擴展比垂直擴展成本更低。

場景模式:Aurora Failover 時間比預期更長

典型的 Aurora 疑難排解流程:

  1. 生產 Failover 花了 4 分鐘,而不是預期的 30 秒以內行為。
  2. 檢查 Cluster 拓撲:是否存在至少一個 Aurora Replica?若無,Aurora 必須從頭啟動新 Instance——這解釋了長 Failover。
  3. 檢查 Promotion Tier:是否晉升了正確的 Replica?若 Tier-0 Replica 不可用(早些時候失敗且尚未替換),Aurora 可能選擇了容量不足的 Tier-15 報表 Replica。
  4. 在 Failover 時檢查 Replica Lag(Aurora 有自己的 Metric:AuroraReplicaLag,以毫秒為單位)。若 Replica 落後超過閾值(60 秒),Aurora 可能跳過它進行晉升。
  5. 檢查應用程式端的連線快取 — 對 Writer Endpoint 保留過時 DNS 的長期 JDBC 連線,在 JVM DNS 快取有效期間(預設為永久)會持續嘗試舊的(現為 Replica 的)Instance。應用程式端的修復是 JVM 安全策略中的 networkaddress.cache.ttl=10

修復通常是:(a) 確保在不同 AZ 中至少有 2 個 Promotion Tier 0 的 Replica,(b) 在應用程式中設定短 DNS TTL,(c) 在 AuroraReplicaLag > 60s 上設定 CloudWatch Alarm。

常見陷阱:Cluster Endpoint vs Instance Endpoint 混淆

Cluster Endpoint 始終指向 Writer。Reader Endpoint 在 Replica 間進行負載平衡。Instance Endpoint 指向一個特定的 Instance,無論其角色。

一個常見的 SOA-C02 錯誤:應用程式使用原始 Writer 的 Instance Endpoint 進行連線。Failover 後,該 Instance 現在是 Replica——但由於應用程式使用 per-instance DNS 名稱,寫入仍然發送到那裡。結果:每次寫入都出現 read-only filesystem 錯誤。

修復方法是始終透過 Cluster Endpoint(寫入)和 Reader Endpoint(讀取)進行連線。Instance Endpoint 僅適用於真正需要精確指定某個 Instance 的診斷工具和遷移腳本。

在 SOA-C02 中,當場景描述「Aurora Failover 後,應用程式在 INSERT 時開始收到 read-only 錯誤」,根本原因是應用程式使用了現在已成為 Replica 的 Instance Endpoint。修復方法是連線字串設定:使用 Cluster Endpoint 進行寫入。這個陷阱也是 Blue/Green Deployment 和 Aurora Failover 指南強調「透過 Endpoint 而非 Instance 連線」的原因。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.Endpoints.html

SOA-C02 vs SAA-C03:運維視角

問題類型 SAA-C03 視角 SOA-C02 視角
Multi-AZ vs Read Replica 「哪個提供高可用性?」 「Failover 花了 8 分鐘——問題在哪?」
Aurora vs RDS 「哪個引擎支援最多 Replica 數量?」 「Aurora 晉升了錯誤的 Replica——修復 Promotion Tier 排序。」
參數變更 「自訂 Parameter Group。」 「我們 3 天前變更了 max_connections,但還沒套用——為什麼?」
Maintenance Window 「在離峰時間排程修補。」 「應用程式週日停機 10 分鐘——單一 AZ + Maintenance Window。」
RDS Proxy 「使用 Proxy 進行連線池。」 「Lambda 導致 too many connections 錯誤——使用 Secrets Manager 身份驗證設定 RDS Proxy。」
效能調整 「使用 Performance Insights。」 「p99 延遲飆升——Performance Insights → Top SQL → Wait Events → 在 orders.customer_id 上添加索引。」
加密 「使用 KMS 靜態加密。」 「生產 DB 未加密,必須加密——Snapshot-copy-restore 是唯一路徑。」
Blue/Green 「安全部署升級。」 「以最小停機時間進行 Major 版本升級——Blue/Green Deployment,驗證 Green,切換。」
Read Replica 「水平擴展讀取。」 「Replica Lag 正在增長——Replica Instance 類別小於 Primary,切換到帶有 Provisioned IOPS 的 gp3。」
跨 Region DR 「使用跨 Region Replica。」 「晉升跨 Region Replica——晉升後應用程式必須更新連線字串。」

SAA 考生選擇拓撲;SOA 考生運維它、疑難排解它,並從運維故障中復原。

考試訊號:如何辨識 RDS-Aurora 上的 Domain 2.1/2.2 題目

  • 「Failover 時間比預期更長」 — 答案涉及 Promotion Tier、Replica 存在性、Replica Lag 或應用程式端 DNS 快取。
  • 「讀取流量壓垮了 Primary」 — 答案涉及 Read Replica、Aurora Reader Endpoint 或 ElastiCache。
  • 「Multi-AZ Standby 閒置,我們可以用它讀取嗎?」 — 傳統 Multi-AZ:不行;Multi-AZ DB Cluster:可以;Aurora:可以(Replica 服務讀取)。
  • 「參數變更還沒生效」 — 答案涉及 Static vs Dynamic Apply Method,加上重新開機。
  • 「Lambda 遇到 too many connections — 帶有 Secrets Manager 的 RDS Proxy。
  • 「以最小停機時間進行 Major 版本升級」 — Blue/Green Deployment。
  • 「資料庫查詢突然變慢」 — Performance Insights → Top SQL → Wait Events。
  • 「加密現有的未加密資料庫」 — 帶有 KMS 的 Snapshot 複製,還原為新 Instance。
  • 「從昨天誤刪的 DROP TABLE 還原」 — PITR 到刪除前一分鐘,還原到新 Instance。
  • 「Failover 後,應用程式在寫入時收到 read-only 錯誤」 — 應用程式使用 Instance Endpoint 而非 Cluster Endpoint。
  • 「Replica Lag 正在增長」 — 檢查 Replica Instance 類別、儲存類型和複製拓撲。

Domain 2 佔 16%。Task Statement 2.1 和 2.2 合起來佔其中的大部分,RDS/Aurora 韌性是與 Auto Scaling/ELB 並列測試最重的主題。預期在這個範疇內有 5 到 8 道題——如果考試偏向資料層場景,有時更多。精通 Cluster Endpoint 陷阱、Parameter Apply Method 陷阱和 Multi-AZ vs Replica 的區別,光靠這三點就能贏得 3 到 4 分。Reference: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html

決策矩陣 — 各 SysOps 目標的 RDS/Aurora 選擇

運維目標 主要選擇 備註
無讀取卸載的同步 Standby HA 傳統 Multi-AZ 所有 RDS 引擎;Failover 60–120 秒。
HA + 可讀 Standby,MySQL 或 PostgreSQL Multi-AZ DB Cluster Failover < 35 秒;三節點,三個 AZ。
HA + 15 個可讀 Replica + 30 秒以內 Failover Aurora Cluster 僅 MySQL/PostgreSQL 相容。
僅讀取擴展,非 HA RDS Read Replica 最多 15 個;僅手動晉升。
跨 Region DR 跨 Region Read Replica 故障時晉升;手動切換。
Lambda 的連線風暴 RDS Proxy 池化連線;Failover 時透明。
以最小停機時間進行 Major 版本升級 Blue/Green Deployment 在 Green 上測試,原子切換。
從邏輯損壞中復原 Point-in-Time Restore 還原到新 Instance;最多 35 天保留期。
加密現有的未加密資料庫 帶 KMS 的 Snapshot 複製,還原為新 Instance 無法就地加密。
快取熱門讀取 ElastiCache(Redis) Cache-aside 模式;降低 DB 負載。
解耦寫入峰值 各層之間的 SQS Queue 緩衝器以保護資料庫。
識別慢查詢 Performance Insights → Top SQL 加上 Wait Events 以識別瓶頸類別。
對 Replica Lag 設 Alarm CloudWatch 上的 ReplicaLag(RDS)或 AuroraReplicaLag(Aurora) 閾值通常為 60–300 秒。
Aurora 中的自動 Failover 順序 Promotion Tier(0–15) 數字越低 = 優先順序越高。
套用參數變更而不重新開機 Dynamic 參數,apply_method=immediate Static 參數需要重新開機。
排程修補 Maintenance Window 每週 30 分鐘時間槽;修補期間 Multi-AZ Failover。

常見陷阱回顧 — RDS 與 Aurora 韌性

陷阱 1:Multi-AZ Standby 提供讀取服務

它不提供(傳統 Multi-AZ)。Multi-AZ DB Cluster Standby 可以;Aurora Replica 可以;傳統 Multi-AZ Standby 是不可見的。

陷阱 2:Read Replica 自動 Failover

它們不會。Read Replica 是非同步的;晉升必須透過 PromoteReadReplica 手動進行。HA 使用 Multi-AZ 或 Aurora。

陷阱 3:Cluster Endpoint vs Instance Endpoint

Failover 後,Cluster Endpoint 跟隨新 Writer。使用 per-instance Endpoint 的應用程式會持續打到現在已成為 Replica 的 Instance,並在寫入時收到 read-only 錯誤。

陷阱 4:Parameter Apply Method 混淆

Dynamic 參數立即生效。Static 參數需要重新開機——pending-reboot 不會可靠地按排程自動套用;重新開機以確保生效。

陷阱 5:RDS 加密是可變更的

它不是。加密在建立時設定,無法切換。解決方法是 Snapshot-copy-restore。

陷阱 6:PITR 覆寫原始 Instance

它不會。PITR 建立新 Instance;你必須重新導向流量。

陷阱 7:Maintenance Window 不會造成停機

對於單一 AZ(完整重啟)和 Multi-AZ(短暫 Failover)都會。

陷阱 8:Aurora Failover 始終在 30 秒以內

只有當至少一個 Aurora Replica 存在時。若無 Replica,Aurora 啟動新 Instance——Failover 可能需要數分鐘。

陷阱 9:增加更多 Replica 會自動平衡現有連線

基於 DNS 的負載平衡只影響新連線。長期 JDBC 連線保持在目前的 Replica 上,直到被回收。使用 RDS Proxy 或連線池 max-lifetime 來強制重新平衡。

陷阱 10:RDS Proxy 是免費或低成本的

它按底層資料庫的 vCPU 計費。對於小型資料庫,費用可能超過資料庫本身。在 Failover 透明性或連線池化收益足以證明成本合理的地方使用它。

FAQ — RDS 與 Aurora 韌性

Q1:Multi-AZ 與 Multi-AZ DB Cluster 的差異是什麼?

傳統 Multi-AZ 是兩個 Instance 的拓撲:一個 Primary 服務所有流量,另一個在不同 AZ 的同步 Standby 不服務流量,對應用程式不可見。Failover 需要 60–120 秒。適用於所有 RDS 引擎。

Multi-AZ DB Cluster 是三個 Instance 的拓撲:一個 Writer 加上跨三個 AZ 的兩個可讀 Standby,使用半同步複製。Failover 在 35 秒以內。Standby 透過 Reader Endpoint 服務讀取流量。截至 2026 年,僅適用於 MySQL 和 PostgreSQL。

這個區別在 SOA-C02 上很重要,因為考試頻繁使用「Multi-AZ」作為簡稱,你必須閱讀修飾語。「Multi-AZ deployment」或「Multi-AZ standby」通常指傳統;「Multi-AZ DB Cluster」特指三節點變體。

Q2:為什麼 Read Replica 不是高可用性機制?

Read Replica 使用非同步複製——它們落後 Primary 幾秒或幾分鐘。Primary 故障時,RDS 不會自動晉升 Read Replica。由於複製 Lag,Replica 甚至可能遺失已提交的交易。要將 Read Replica 用於 HA,你需要:

  1. 手動呼叫 PromoteReadReplica
  2. 將應用程式連線字串更新到 Replica 的 Endpoint。
  3. 接受等於故障時刻複製 Lag 的潛在資料遺失。

這是一個手動災難復原程序,RTO 為 5–15 分鐘,RPO 非零。對於自動、2 分鐘以內 Failover 且零資料遺失,你需要 Multi-AZ(傳統)、Multi-AZ DB Cluster 或 Aurora。SOA-C02 反覆測試這個精確的區別。

Q3:如何在 MySQL 工作負載中選擇 Aurora 與 RDS Multi-AZ DB Cluster?

兩者都在三個 AZ 上提供具有可讀 Standby 的 HA。決策因素:

  • 成本 — Aurora 每個 Instance 小時通常更貴;Multi-AZ DB Cluster 使用一般 MySQL 定價。
  • Failover 時間 — Aurora 通常在 30 秒以內;Multi-AZ DB Cluster 在 35 秒以內。相近。
  • Read Replica 數量 — Aurora 支援 15 個;Multi-AZ DB Cluster 有 2 個可讀 Standby。
  • 儲存擴展 — Aurora 以 10 GiB 為單位自動無縫增長至 128 TiB;Multi-AZ DB Cluster 使用常規 RDS 儲存並需要手動擴展。
  • 引擎相容性 — Aurora 與 MySQL/PostgreSQL 相容,但並非 100% 相同(某些 MySQL 功能行為不同)。Multi-AZ DB Cluster 是原生 MySQL 或 PostgreSQL。
  • 災難復原 — Aurora 支援 Global Database 以實現次秒跨 Region 複製;Multi-AZ DB Cluster 依靠跨 Region Read Replica。

對於在 AWS 上需要強 HA + 讀取擴展的大多數新工作負載,Aurora 是首選。SOA-C02 在「最高可用性和最多 Replica」場景中偏好 Aurora,但在「MySQL 相容 HA 而不引入引擎差異」場景中測試 Multi-AZ DB Cluster。

Q4:如何為 Lambda 密集工作負載設定 RDS Proxy?

標準設定:

  1. 在 Secrets Manager 中儲存 DB 憑證,啟用自動輪換(典型 30 天輪換)。
  2. 在與資料庫相同的 VPC 中,在至少兩個 AZ 的子網路中建立 RDS Proxy
  3. 如果你希望 Lambda 函數透過 IAM 進行身份驗證(Lambda 程式碼中無 DB 憑證),附加 IAM 身份驗證到 Proxy。
  4. 設定連線池大小 — 通常是小型 DB 的 max_connections 的 100%,大型多租戶 DB 則更低。
  5. 為 Aurora 分別設定讀寫 Endpoint — Proxy 支援路由到 Replica 的獨立唯讀 Endpoint。
  6. 更新 Lambda 函數以連接到 Proxy Endpoint 而非 DB Endpoint。
  7. 監控 DatabaseConnectionsCurrentlySessionPinned — 高 Pinning 率削弱多工好處;調查保持連線的 Session 層級操作。

Q5:RDS Multi-AZ Failover 如何影響應用程式連線?

Multi-AZ Failover 期間:

  1. Primary 的 DB Endpoint 在 Failover 期間(60–120 秒)不可達。
  2. RDS 更新 DNS CNAME 以指向新 Primary(原 Standby)。
  3. 目前開啟的應用程式連線被中斷——沒有透明的連線遷移。
  4. 切換期間的新連線嘗試可能失敗,直到 DNS 傳播。
  5. 一旦 DNS 解析到新 Primary,應用程式就可以成功重新連線。

應用程式必須:

  • 實作帶有指數退避的重試邏輯來處理連線錯誤。
  • 在連線層設定短 DNS TTL(JVM networkaddress.cache.ttl=10 是標準例子;JVM 預設是「永久快取」,這會破壞 Failover)。
  • 使用帶有健康檢查的連線池,回收壞連線。
  • 選擇性使用 RDS Proxy,讓 Proxy 代表應用程式吸收 Failover 並透明地重新連接。

Q6:我可以為現有的 RDS 資料庫添加加密嗎?

不能就地添加。RDS 靜態加密在 Instance 建立時設定,之後不可更改。要加密現有的未加密資料庫:

  1. 對未加密的 Instance 進行手動 Snapshot。
  2. 使用帶有 KMS 金鑰的 CopyDBSnapshot——副本已加密。
  3. 透過 RestoreDBInstanceFromDBSnapshot 從加密 Snapshot 還原到新 DB Instance。
  4. 將流量切換到新 Instance——通常透過 Blue/Green Deployment、DNS 交換或計畫性停機。

更換已加密資料庫上的 KMS 金鑰也適用相同的工作流程——用新金鑰複製 Snapshot,然後還原。這是 SOA-C02 出現頻率最高的陷阱之一;回答「修改 Instance 並切換加密」的考生將失分。

Q7:參數變更的 apply immediatelypending reboot 有什麼差異?

對於 Dynamic 參數apply immediately 在功能上是即時的——新值在幾秒內生效。

對於 Static 參數apply immediately 觸發立即的資料庫重新開機。這是停機時間——API 呼叫實際上同時執行參數變更和重新開機。如果你為 Static 參數選擇 pending reboot,變更將被排隊,並在下次重新開機時套用(手動、Maintenance Window 或 Multi-AZ Failover)。

SOA-C02 上的陷阱:在生產環境中對 Static 參數選擇 apply immediately,卻沒有意識到它會觸發重新開機。考試用「SysOps 工程師變更了 innodb_buffer_pool_size,資料庫停機了」這樣的場景來測試——原因是 apply immediately 重新開機了單一 AZ Instance。

Q8:Aurora Failover 與 RDS Multi-AZ Failover 有何不同?

三個運維差異:

  • 速度 — Aurora 通常在 30 秒以內(當 Replica 存在時);傳統 Multi-AZ 60–120 秒。
  • Replica 參與 — Aurora 晉升現有 Replica;傳統 Multi-AZ 晉升不可見的 Standby。若無 Aurora Replica,Aurora 必須啟動新 Instance,Failover 需要數分鐘。
  • 儲存 — Aurora Replica 共用 Writer 的儲存(Failover 時無資料移動);Multi-AZ Standby 有自己一直在接收同步寫入的 EBS 磁碟區。

Aurora 的 Failover 速度優勢依賴於至少一個健康的 Aurora Replica 的存在。SOA-C02 最佳實踐是至少 2 個 Replica 在至少 2 個 AZ,且 Promotion Tier 設定正確。

Q9:RDS 或 Aurora 部署的關鍵 CloudWatch Metrics 要對哪些設 Alarm?

Metric 告訴你什麼 典型 Alarm
CPUUtilization 計算飽和 > 80% 持續 5 分鐘
DatabaseConnections 連線池耗盡即將發生 > max_connections 的 80%
FreeableMemory Buffer Pool 壓力 < 100 MB 持續 5 分鐘
FreeStorageSpace 磁碟即將填滿(RDS) 剩餘 < 10%
ReadLatency / WriteLatency I/O 效能問題 > 引擎特定 p99
ReplicaLag(RDS) Read Replica 落後 持續 > 60 秒
AuroraReplicaLag(Aurora) Aurora Replica 落後 Writer 持續 > 30 毫秒(典型 Aurora 是個位數毫秒)
DatabaseConnectionsCurrentlySessionPinned(RDS Proxy) Pinning 削弱連線池好處 > 50% 被 Pinned
DBLoad(Performance Insights) Active Session 壓力 持續 > vCPU 數量

Alarm 應該驅動 SNS 通知,以及在適當的情況下,觸發補救執行手冊的 EventBridge 規則(Aurora Replica Auto Scaling、Replica 晉升、連線池刷新)。

Q10:RDS Blue/Green Deployment 與手動 Snapshot-Restore 遷移相比如何?

RDS Blue/Green 是一個受管功能,處理整個雙環境生命週期:

  • AWS 佈建 Green 環境。
  • AWS 自動設定從 Blue 到 Green 的 binlog 複製。
  • AWS 持續保持 Green 同步。
  • 你在 Green 上進行變更(引擎升級、Schema 變更、參數變更、Instance 類別變更)。
  • 你觸發原子切換——DNS Endpoint 交換,應用程式重新連接,停機時間通常在一分鐘以內。

手動 Snapshot-Restore 是傳統路徑:

  • 對來源進行 Snapshot。
  • 將 Snapshot 還原到新 Instance。
  • 套用變更。
  • 透過外部複製工具手動重新同步,或接受凍結期。
  • 手動進行 DNS 更新切換。

Blue/Green 是 SOA 認可的 Major 版本升級、破壞性 Schema 遷移和需要重新開機的參數變更路徑。SOA-C02 在任何「在版本升級期間最小化停機時間」場景中都偏好 Blue/Green。對於跨 Region 或跨帳號的一次性遷移(Blue/Green 不適用的情況),Snapshot-restore 仍然適用。

延伸閱讀與相關運維模式

資料層具備韌性後,下一層運維重點是:EC2 Auto Scaling、ELB 與 Multi-AZ 高可用——對應到與這些資料庫對話的運算層(Domain 2 的天然姊妹主題);備份、還原與災難復原程序——執行自動與手動備份的復原面;EBS、RDS、EC2、S3 的效能優化——更深層的 Performance Insights 調校模式與保持資料庫快速的 EBS volume 修改;以及 CloudWatch Metrics、Alarms 與 Dashboards——監督本指南所提及每個 metric 的監控基底。

官方資料來源

更多 SOA-C02 主題