本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon RDS Proxy 端點
RDS Proxy 端點提供彈性且有效率的方式來管理資料庫連線,進而改善可擴展性、可用性和安全性。使用代理端點,您可以:
-
簡化監控和故障診斷 – 使用多個端點獨立追蹤和管理來自不同應用程式的連線。
-
增強讀取可擴展性 – 利用具有 Aurora 資料庫叢集的讀取器端點來有效率地分配讀取流量,從而最佳化大量查詢工作負載的效能。
-
啟用跨 VPC 存取 – 使用跨 VPCs 端點跨 VPC 連接資料庫,這允許一個 VPC 中的 Amazon EC2 執行個體等資源存取另一個 VPC 中的資料庫。
代理端點概觀
使用 RDS Proxy 端點涉及與 Aurora 資料庫叢集和讀取器端點相同的程序類型。如果您不熟悉 Aurora 端點,請在 Amazon Aurora 端點連線 中查閱詳細資訊。
當您搭配 Aurora 叢集使用 RDS Proxy 時,預設端點同時支援讀取和寫入操作。這表示其會將所有請求路由至叢集的寫入器執行個體,造成其max_connections
限制。為了更好地分配流量,您可以為代理建立額外的讀取/寫入或唯讀端點,從而實現更有效率的工作負載管理並改善可擴展性。
將唯讀端點與代理搭配使用來處理讀取查詢,就像使用 Aurora 佈建叢集的讀取器端點一樣。此方法透過在一或多個讀取器資料庫執行個體之間分佈查詢,將 Aurora 的讀取可擴展性最大化。透過使用唯讀端點並視需要新增更多讀取器執行個體,您可以增加叢集可以處理的同時查詢和連線數量。
提示
當您使用 為 Aurora 叢集建立代理時 AWS Management Console,您可以讓 RDS Proxy 自動建立讀取器端點。如需讀取器端點優點的相關資訊,請參閱將讀取器端點與 Aurora 叢集搭配使用。
建立代理端點時,您可以將其與代理 VPC 不同的虛擬私有雲端 (VPC) 建立關聯。這可讓您從另一個 VPC 連線至代理,例如組織內不同應用程式所使用的 VPC。
如需與代理端點關聯的限制相關資訊,請參閱代理端點的限制。
RDS Proxy 日誌會在每個項目前面加上相關聯的代理端點名稱。這可以是您為使用者定義端點指定的名稱,或default
代理預設讀取/寫入端點的特殊名稱。
每個代理端點都有自己的 CloudWatch 指標集。監控代理的所有代理端點、特定端點或代理的所有讀取/寫入或唯讀端點的指標。如需詳細資訊,請參閱使用 Amazon CloudWatch 監控 RDS Proxy 指標。
代理端點會使用與相關聯代理相同的身分驗證機制。RDS Proxy 會自動設定使用者定義端點的許可和授權,且與相關聯代理的屬性一致。
若要了解代理端點如何針對 Aurora 全域資料庫中的資料庫叢集運作,請參閱 RDS Proxy 端點如何使用全域資料庫。
代理端點的限制
RDS Proxy 端點有下列限制:
-
無法修改 RDS Proxy 預設端點。
-
代理的使用者定義端點數目上限為 20。因此,代理最多可以有 21 個端點:預設端點,以及您建立的 20 個端點。
-
當您將其他端點與代理建立關聯時,RDS Proxy 會自動確定叢集中要用於每個端點的資料庫執行個體。您無法按照對 Aurora 自訂端點所用的方式來選擇特定的執行個體。
當您建立代理時,RDS 會自動建立 VPC 端點,以在應用程式和資料庫之間進行安全通訊。VPC 端點是可見的,可以從 Amazon VPC 主控台存取。
新增代理端點會佈建 AWS PrivateLink 介面端點。如果您將一或多個端點新增至代理,會產生額外費用。如需詳細資訊,請參閱 RDS Proxy 定價
將讀取器端點與 Aurora 叢集搭配使用
當您將 RDS Proxy 與 Aurora 叢集搭配使用時,您可以建立並連線至名稱為讀取器端點的唯讀端點。這些讀取器端點有助於改善查詢密集型應用程式的讀取可擴展性。如果叢集中的讀取器資料庫執行個體變得無法使用,讀取器端點也有助於改善連線的可用性。
注意
當您指定新端點為唯讀時,RDS Proxy 會要求 Aurora 叢集具有一個或多個讀取器資料庫執行個體。在某些情況下,您可以將代理的目標變更為僅包含單一寫入器的 Aurora 叢集。如果這樣做,讀取器端點的任何請求都會因錯誤而失敗。如果代理的目標是 RDS 執行個體而非 Aurora 叢集,請求也會失敗。
如果 Aurora 叢集具有讀取器執行個體,但這些執行個體無法使用,RDS Proxy會等待傳送請求,而不是立即傳回錯誤。如果連線借用逾時期間內沒有讀取器執行個體變得可用,請求則會失敗並顯示錯誤。
讀取器端點如何協助應用程式變得可用
在某些情況下,叢集中的一個或多個讀取器執行個體可能無法使用。如果是這樣,使用資料庫代理讀取器端點的連線可以比使用 Aurora 讀取者端點更快復原。RDS Proxy 只會將連線路由傳送至叢集中可用的讀取器執行個體。當執行個體變得無法使用時,DNS 快取不會有延遲。
如果連線為多路復用,RDS Proxy 會將後續查詢導向至不同的讀取器資料庫執行個體,而不會中斷您的應用程式。在自動切換至新的讀取器執行個體期間,RDS Proxy 會同時檢查新舊讀取器執行個體的複寫延遲。RDS Proxy 會確保新讀取器執行個體為最新狀態,且具有與上一個讀取器執行個體相同的變更。這樣,您的應用程式絕不會在 RDS Proxy 從一個讀取器資料庫執行個體切換至另一個時看到過時資料。
如果連線鎖定,則連線的下一個查詢會傳回錯誤。不過,您的應用程式可以立即重新連線至相同端點。RDS Proxy 會將連線路由至不同但為 available
狀態的讀取器資料庫執行個體。手動重新連線時,RDS Proxy 不會檢查新舊讀取器執行個體之間的複寫延遲。
如果您的 Aurora 叢集沒有任何可用的讀取器執行個體,RDS Proxy 會檢查此條件是暫時的還是永久的。每種情況下的行為如下:
-
假設您的叢集具有一個或多個讀取器資料庫執行個體,則均未處於
Available
狀態。例如,所有讀取器執行個體可能正在重新啟動或發生問題。在這種情況下,連線至讀取器端點的嘗試會等待讀取器執行個體變成可用。如果連線借用逾時期間內沒有讀取器執行個體變得可用,則連線嘗試會失敗。如果讀取器執行個體變得可用,則連線嘗試會成功。 -
假設您的叢集沒有讀取器資料庫執行個體。在這種情況下,如果您嘗試連線至讀取器端點,則 RDS Proxy 會立即傳回錯誤。若要解決此問題,請在連線至讀取器端點之前,將一個或多個讀取器執行個體新增至叢集。
讀取器端點如何協助實現查詢可擴展性
代理的讀取器端點透過以下方式協助實現 Aurora 查詢可擴展性:
-
在您將讀取器執行個體新增至 Aurora 叢集時,RDS Proxy 可以將任何讀取器端點的新連線路由至不同的讀取器執行個體。如此一來,使用一個讀取器端點連線執行的查詢,不會減慢使用另一個讀取器端點連線執行的查詢速度。查詢在單獨的資料庫執行個體上執行。每個資料庫執行個體都有其自己的運算資源、緩衝區快取等。
-
在實際情況下,RDS Proxy 針對使用特定讀取器端點連線的所有查詢問題,使用相同的讀取器資料庫執行個體。如此一來,相同資料表上的一組相關查詢可以利用特定資料庫執行個體上的快取、計劃最佳化等。
-
如果讀取器資料庫執行個體變得無法使用,則對應用程式的影響取決於工作階段是多路復用還是鎖定。如果工作階段是多路復用,RDS Proxy 會將任何後續查詢路由至不同的讀取器資料庫執行個體,而無需執行任何動作。如果工作階段已鎖定,您的應用程式會收到錯誤,並且必須重新連線。您可以立即重新連線至讀取器端點,並且 RDS Proxy 會將連線路由至可用的讀取器資料庫執行個體。如需代理工作階段的多工處理和鎖定的詳細資訊,請參閱RDS Proxy 概念概觀。
-
您在叢集中具有的讀取器資料庫執行個體越多,您可以使用讀取器端點建立的同時連線就越多。例如,假設您的叢集有四個讀取器資料庫執行個體,每個執行個體都設定為支援 200 個同時連線。也假設您的 Proxy 設定為使用連線數目上限的 50%。在這裡,對於讀取器 1,您可以透過代理中的讀取器端點進行的最大連線數目是 100 (200 的 50%)。對於讀取器 2 也是 100,依此類推,總計為 400。如果您將叢集讀取器資料庫執行個體的數目加倍至八個,則透過讀取器端點的連線數目上限也會加倍至 800。
使用讀取器端點的範例
下列 Linux 範例顯示了,如何確認您已透過讀取器端點連線至 Aurora MySQL 叢集。innodb_read_only
組態設定已啟用。嘗試執行寫入操作,例如 CREATE DATABASE
陳述式失敗並顯示錯誤。您也可以透過使用 aurora_server_id
變數,檢查資料庫執行個體名稱,來確認您已連線至讀取器資料庫執行個體。
提示
不要僅依賴檢查資料庫執行個體名稱,來確定連線是讀取/寫入還是唯讀。請記住,Aurora 叢集中的資料庫執行個體,可以在發生容錯移轉時變更寫入器和讀取器之間的角色。
$
mysql -h endpoint-demo-reader.endpoint.proxy-demo.us-east-1.rds.amazonaws.com -u admin -p...
mysql>
select @@innodb_read_only;+--------------------+ | @@innodb_read_only | +--------------------+ | 1 | +--------------------+
mysql>
create database shouldnt_work;ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
mysql>
select @@aurora_server_id;+---------------------------------------+ | @@aurora_server_id | +---------------------------------------+ | proxy-reader-endpoint-demo-instance-3 | +---------------------------------------+
下列範例顯示了即使刪除讀取器資料庫執行個體,您與代理讀取器端點的連線仍然可以繼續運作。在此範例中,Aurora 叢集具有兩個讀取器執行個體,instance-5507
和 instance-7448
。讀取器端點的連線會開始使用其中一個讀取器執行個體。在此範例中,系統會透過 delete-db-instance
命令來刪除此讀取器執行個體。如需後續查詢,RDS Proxy 會切換至不同的讀取器執行個體。
$
mysql -h reader-demo.endpoint.proxy-demo.us-east-1.rds.amazonaws.com -umy_user
-p...
mysql>
select @@aurora_server_id;+--------------------+ | @@aurora_server_id | +--------------------+ | instance-5507 | +--------------------+
mysql>
select @@innodb_read_only;+--------------------+ | @@innodb_read_only | +--------------------+ | 1 | +--------------------+
mysql>
select count(*) from information_schema.tables;+----------+ | count(*) | +----------+ | 328 | +----------+
雖然 mysql
工作階段仍在執行中,下列命令仍會刪除讀取器端點連線的讀取器執行個體。
aws rds delete-db-instance --db-instance-identifier instance-5507 --skip-final-snapshot
mysql
工作階段中的查詢會繼續進行工作,無需重新連線。RDS Proxy 會自動切換至不同的讀取器資料庫執行個體。
mysql>
select @@aurora_server_id;+--------------------+ | @@aurora_server_id | +--------------------+ | instance-7448 | +--------------------+
mysql>
select count(*) from information_schema.TABLES;+----------+ | count(*) | +----------+ | 328 | +----------+
跨 VPC 存取 Aurora 資料庫
依預設,RDS 技術堆疊的元件全都在同一個 Amazon VPC 中。例如,假設在 Amazon EC2 執行個體上執行的應用程式連線至 Amazon 資料庫叢集。在此情況下,應用程式伺服器和資料庫必須都位於同一個 VPC 內。
使用 RDS Proxy,您可以從另一個 VPC 中的資源,例如 EC2 執行個體,設定存取一個 VPC 中的 Aurora 資料庫叢集Amazon RDS 資料庫執行個體。例如,您的組織可能有多個存取相同資料庫資源的應用程式。每個應用程式都可能在其自己的 VPC 中。
若要啟用跨 VPC 存取,您可以為代理建立新的端點。Proxy 本身駐留在與 Aurora 資料庫叢集相同的 VPC 中。然而,跨 VPC 端點駐留在其他 VPC 中,以及 EC2 執行個體等其他資源。跨 VPC 端點與 EC2 和其他資源相同的 VPC 子網路和安全群組關聯。這些關聯可讓您從因 VPC 限制而無法存取資料庫的應用程式連線至端點。
下列步驟說明如何透過 RDS Proxy 來建立和存取跨 VPC 端點:
-
建立兩個 VPC,或選擇兩個已用於 Aurora 和 工作的 VPC。每個 VPC 都應有自己的關聯網路資源,例如網際網路閘道、路由表、子網路和安全群組。如果您只有一個 VPC,可以參閱Amazon Aurora 入門,了解設定另一個 VPC 以成功使用 Aurora 的步驟。您也可以在 Amazon EC2 主控台中檢查現有的 VPC,以查看要連接在一起的資源類型。
-
建立與您要連線的 Aurora 資料庫叢集相關聯的資料庫 Proxy。請遵循 為 Amazon Aurora 建立代理 中的程序。
-
於 RDS 主控台代理的詳細資訊頁面上,在 Proxy endpoints (代理端點) 區段中,選擇 Create endpoint (建立端點)。請遵循 建立代理端點 中的程序。
-
選擇要讓跨 VPC 端點讀取/寫入還是唯讀。
-
不是接受與 Aurora 資料庫叢集相同 VPC 的預設值,而是選擇不同的 VPC。此 VPC 必須與代理所在的 VPC 位於相同的 AWS 區域。
-
現在,不是接受與 Aurora 資料庫叢集相同 VPC 的子網路和安全群組預設值,而是選擇新的選項。根據您選擇的 VPC 中的子網路和安全群組進行這些設定。
-
您不需要變更 Secrets Manager 機密的任何設定。相同的登入資料適用於代理的所有端點,無論每個端點所在的 VPC 為何。
-
等待新端點為可用狀態。
-
記下完整的端點名稱。這是以
結尾的值,作為資料庫應用程式連線字串的一部分提供。Region_name
.rds.amazonaws.com -
從與端點相同的 VPC 中的資源存取新端點。測試此程序的簡單方法是,在此 VPC 中建立一個新的 EC2 執行個體。然後,登入 EC2 執行個體,並使用連線字串中的端點值執行
mysql
或psql
命令來連線。