當我嘗試連線至 Amazon Aurora 寫入器端點時,為什麼我的連線會重新導向讀取器執行個體?

1 分的閱讀內容
0

我在我的應用程式伺服器中使用 Amazon Aurora 叢集端點/寫入器端點,但我的應用程式改為連線至讀取器執行個體。

簡短說明

當您嘗試連線至 Aurora 叢集端點或寫入器端點時,您的應用程式可能會改為連線至讀取器執行個體。當端點及其對應的 IP 地址在用戶端應用程式端進行快取時,就會發生此種狀況。

Aurora 叢集端點會永遠指向 Aurora 寫入器執行個體。發生容錯移轉時,Aurora 叢集端點會指向新的寫入器執行個體。若您正使用叢集端點,則在容錯移轉期間,讀取/寫入連線會自動重新導向 Aurora 複本。此複本執行個體會升級為主要執行個體。

因此,於容錯移轉期間,Aurora 執行個體的基礎 IP 地址可能會變更,且快取值可能不再提供服務。

嘗試使用 DNS 名稱連線至資料庫的用戶端必須透過查詢 DNS 伺服器以將該 DNS 名稱解析為 IP 地址。接著用戶端便會快取回應。根據通訊協定,DNS 回應會指定「存留時間」(TTL),其會控制用戶端應快取記錄的時間長度。Aurora DNS 區域會使用五秒的短暫 TTL。但是許多系統會使用不同的設定來實作用戶端快取,此可能會延長 TTL 的時間。

若尚未傳播 DNS 記錄變更時,用戶端嘗試連線至叢集,則用戶端會收到舊地址。此會導致用戶端連線至先前的主要執行個體,其為現在的讀取器執行個體。

因此,長時間快取 DNS 資料可能會造成連線失敗。

於容錯移轉初始化之後,用戶端不再從資料庫取得 TCP 流量。反之,逾時是由客戶端來決定的。在任何容錯移轉時,原始主要資料庫的這種硬式防護表示用戶端在已規劃和未規劃的容錯移轉期間會看到類似的行為。

解決方式

檢查您是否要連線至寫入器執行個體或 Aurora 複本。

如要決定用戶端是否連線至寫入器執行個體或 Aurora 複本,請使用 @@innodb_read_only 變數:

mysql> select @@innodb_read_only;

0 值表示您已連線至寫入器執行個體。

執行此查詢來決定您所連線的伺服器,及該伺服器是否為寫入器或讀取器:

mysql> select concat("You are connected to '",server_id,"', which is a ",if(SESSION_ID='MASTER_SESSION_ID',"Writer","Reader")) as CONNECTION_STATUS from information_schema.replica_host_status where SERVER_ID in (select @@aurora_server_id);
+-----------------------------------------------------------------+
| CONNECTION_STATUS                                               |
+-----------------------------------------------------------------+
| You are connected to 'aurora-test-instance1', which is a Writer |
+-----------------------------------------------------------------+
1 row in set (0.08 sec)

對叢集中的多個讀取器執行個體進行疑難排解

Aurora 讀取器端點為 DNS CNAME 項目。若叢集具有多個讀取器執行個體,則當您解析讀取器端點時,您會取得一個以輪詢均衡方式選擇的執行個體 IP。這是因為讀取器端點包含所有 Aurora 複本,且其為新連線提供 DNS 型輪詢均衡負載平衡。

請確保在不快取 DNS 的情況下持續解析端點,以便在每個解析度上取得不同的執行個體 IP。若您只解析端點一次,並將連線保留於集區中,則該連線上的每個查詢皆會傳送至相同的執行個體。若您快取 DNS,則每次解析端點時都會收到相同的執行個體 IP。

請遵循最佳實務

  • 請確定您的網路和用戶端組態不會進一步增加 DNS 快取 TTL。若您使用任何形式的連線集區或其他多工處理,您可能需要清除或縮短任何快取 DNS 資訊的存留時間。若您的用戶端應用程式正在快取您資料庫執行個體的 DNS 資料,則請設定小於 30 秒的 TTL 值。
  • 使用 Amazon Relational Database Service (Amazon RDS) Proxy 來管理連線。如需詳細資訊,請參閱使用 Amazon RDS Proxy
  • 檢閱使用智慧型驅動程式的最佳實務。
  • 使用 TCP 型的負載平衡器,例如 Elastic Load Balancing 或 HA/Proxy。

相關資訊

Aurora 端點的類型

DNS 快取

為什麼在 Amazon Aurora 資料庫叢集容錯移轉後收到唯讀錯誤?

AWS 官方
AWS 官方已更新 1 年前