使用 Amazon RDS 代理端點 - Amazon Aurora

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

使用 Amazon RDS 代理端點

瞭解RDS代理伺服器的端點以及如何使用它們。透過使用 Proxy 端點,您可以利用下列功能:

  • 您可以使用多個端點搭配代理,來獨立監控和不同應用程式的連線並進行疑難排解。

  • 您可以將讀取器端點與 Aurora 資料庫叢集搭配使用,以改善查詢密集型應用程式的讀取可擴展性和高可用性。

  • 您可以使用跨VPC端點,允許VPC從不同的資源 (例如 Amazon EC2 執行個體) 存取一個資料庫VPC。

代理端點概觀

使用 RDS Proxy 端點所涉及的程序類型與 Aurora 資料庫叢集和讀取器端點RDS執行個體端相同。如果您不熟悉 Aurora 端點,請在 Amazon Aurora 端點連接 中查閱詳細資訊。

依預設,當您將 RDS Proxy 與 Aurora 叢集搭配使用時所連接的端點具有讀取/寫入功能。因此,此端點會將所有請求傳送至叢集的寫入器執行個體。所有這些連線都會計入寫入器執行個體的 max_connections 值。如果您的代理與 Aurora 資料庫叢集關聯,您可以為該代理建立額外的讀取/寫入或唯讀端點。

您可以將唯讀端點與您的代理搭配使用,進行唯讀查詢。執行此操作的方式與您將讀取器端點用於 Aurora 佈建叢集的方式相同。這樣做有助於您充分利用 Aurora 叢集與一個或多個讀取器資料庫執行個體的讀取可擴展性。您可以使用唯讀端點,並視需將更多讀取器資料庫執行個體新增至 Aurora 叢集,來執行更多同時查詢並建立更多同時連線。

提示

當您使用建立 Aurora 叢集的代理時 AWS Management Console,您可以讓 RDS Proxy 自動建立讀取器端點。如需讀取器端點優點的相關資訊,請參閱將讀取器端點與 Aurora 叢集搭配使用

對於您建立的 Proxy 端點,您也可以將端點與 Proxy 本身使用的不同虛擬私有雲 (VPC) 建立關聯。如此一來,您就可以從不同的 Proxy 連線到 ProxyVPC,例如組織內不同應VPC用程式所使用的 Proxy。

如需與代理端點關聯的限制相關資訊,請參閱代理端點的限制

在 RDS Proxy 記錄檔中,每個項目的前置字首都會加上關聯 Proxy 端點的名稱。此名稱可以是您針對使用者定義端點所指定的名稱。或者,它可以是執行讀取/寫入要求的 Proxy 預設端點的特殊名稱default

每個 Proxy 端點都有自己的一組 CloudWatch 指標。您可以監控代理所有端點的指標。您還可以監控特定端點的指標,或監控代理所有讀取/寫入或唯讀端點的指標。如需詳細資訊,請參閱 使用 Amazon 監控 RDS 代理指標 CloudWatch

代理端點會使用與相關聯代理相同的身分驗證機制。RDSProxy 會自動為使用者定義的端點設定權限和授權,並與關聯 Proxy 的內容一致。

若要了解代理端點如何針對 Aurora 全域資料庫中的資料庫叢集運作,請參閱 RDS Proxy 端點如何使用全域資料庫

代理端點的限制

RDS代理主機端點有下列限制:

  • 每個代理都有一個預設端點,您可以修改,但無法建立或刪除。

  • 代理的使用者定義端點數目上限為 20。因此,代理最多可以有 21 個端點:預設端點,以及您建立的 20 個端點。

  • 當您將其他端點與 Proxy 建立關聯時,RDSProxy 會自動判斷叢集中要用於每個端點的資料庫執行個體。您無法按照對 Aurora 自訂端點所用的方式來選擇特定的執行個體。

將讀取器端點與 Aurora 叢集搭配使用

當您將 RDS Proxy 與 Aurora 叢集搭配使用時,您可以建立並連線到稱為讀取器端點的唯讀端點。這些讀取器端點有助於改善查詢密集型應用程式的讀取可擴展性。如果叢集中的讀取器資料庫執行個體變得無法使用,讀取器端點也有助於改善連線的可用性。

注意

當您指定新端點為唯讀時,RDSProxy 會要求 Aurora 叢集具有一或多個讀取器資料庫執行個體。在某些情況下,您可能會將 Proxy 的目標變更為僅包含單一寫入器的 Aurora 叢集。如果這樣做,讀取器端點的任何請求都會因錯誤而失敗。如果代理的目標是RDS執行個體而非 Aurora 叢集,則要求也會失敗。

如果 Aurora 叢集具有讀取器執行個體,但這些執行個體無法使用,RDSProxy 會等待傳送要求,而不是立即傳回錯誤。如果連線借用逾時期間內沒有讀取器執行個體變得可用,請求則會失敗並顯示錯誤。

讀取器端點如何協助應用程式變得可用

在某些情況下,叢集中的一個或多個讀取器執行個體可能無法使用。如果是這樣,使用資料庫代理讀取器端點的連線可以比使用 Aurora 讀取者端點更快復原。RDSProxy 只會將連線路由至叢集中可用的讀取器執行個體。執行個體無法使用時,不會因為DNS快取而造成延遲。

如果連線是多工處RDS理,Proxy 會將後續查詢導向至不同的讀取器資料庫執行個體,而不會中斷應用程式。在自動切換至新的讀取器執行個體期間,RDSProxy 會檢查新舊讀取器執行個體的複寫延遲。RDSProxy 會確保新的讀取器執行個體是最新的,且變更與先前的讀取器執行個體相同。如此一來,當 RDS Proxy 從一個讀取器資料庫執行個體切換到另一個讀取器資料庫執行個體時,您的應用程

如果連線鎖定,則連線的下一個查詢會傳回錯誤。不過,您的應用程式可以立即重新連線至相同端點。RDSProxy 會將連線路由至處於available狀態的其他讀取器資料庫執行個體。手動重新連線時,RDSProxy 不會檢查舊讀取器執行個體與新讀取器執行個體之間的複寫延遲。

如果您的 Aurora 叢集沒有任何可用的讀取器執行個體,RDSProxy 會檢查此情況是暫時的還是永久狀況。每種情況下的行為如下:

  • 假設您的叢集具有一個或多個讀取器資料庫執行個體,則均未處於 Available 狀態。例如,所有讀取器執行個體可能正在重新啟動或發生問題。在這種情況下,連線至讀取器端點的嘗試會等待讀取器執行個體變成可用。如果連線借用逾時期間內沒有讀取器執行個體變得可用,則連線嘗試會失敗。如果讀取器執行個體變得可用,則連線嘗試會成功。

  • 假設您的叢集沒有讀取器資料庫執行個體。在這種情況下,如果您嘗試連線到讀取器端點,RDSProxy 會立即傳回錯誤。若要解決此問題,請在連線至讀取器端點之前,將一個或多個讀取器執行個體新增至叢集。

讀取器端點如何協助實現查詢可擴展性

代理的讀取器端點透過以下方式協助實現 Aurora 查詢可擴展性:

  • 當您將讀取器執行個體新增至 Aurora 叢集時,RDSProxy 可以將新連線路由到任何讀取器端點到不同的讀取器執行個體。如此一來,使用一個讀取器端點連線執行的查詢,不會減慢使用另一個讀取器端點連線執行的查詢速度。查詢在單獨的資料庫執行個體上執行。每個資料庫執行個體都有其自己的運算資源、緩衝區快取等。

  • 在可行的情況下,RDSProxy 會針對使用特定讀取器端點連線的所有查詢問題使用相同的讀取器資料庫執行個體 如此一來,相同資料表上的一組相關查詢可以利用特定資料庫執行個體上的快取、計劃最佳化等。

  • 如果讀取器資料庫執行個體變得無法使用,則對應用程式的影響取決於工作階段是多路復用還是鎖定。如果工作階段是多工處理的,RDSProxy 會將任何後續查詢路由到不同的讀取器資料庫執行個體,而無需執行任何動作。如果工作階段已鎖定,您的應用程式會收到錯誤,並且必須重新連線。您可以立即重新連線至讀取器端點,RDSProxy 會將連線路由至可用的讀取器資料庫執行個體。如需代理工作階段的多工處理和鎖定的詳細資訊,請參閱RDS代理主機概念概觀

  • 您在叢集中具有的讀取器資料庫執行個體越多,您可以使用讀取器端點建立的同時連線就越多。例如,假設您的叢集有四個讀取器資料庫執行個體,每個執行個體都設定為支援 200 個同時連線。也假設您的 Proxy 設定為使用連線數目上限的 50%。在這裡,對於讀取器 1,您可以透過代理中的讀取器端點進行的最大連線數目是 100 (200 的 50%)。對於讀取器 2 也是 100,依此類推,總計為 400。如果您將叢集讀取器資料庫執行個體的數目加倍至八個,則透過讀取器端點的連線數目上限也會加倍至 800。

使用讀取器端點的範例

下列 Linux 範例顯示如何透過讀取器端點確認您已連線至 Aurora My SQL 叢集。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-5507instance-7448。讀取器端點的連線會開始使用其中一個讀取器執行個體。在此範例中,系統會透過 delete-db-instance 命令來刪除此讀取器執行個體。RDSProxy 會切換至不同的讀取器執行個體,以便後續查詢。

$ mysql -h reader-demo.endpoint.proxy-demo.us-east-1.rds.amazonaws.com -u my_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 工作階段中的查詢會繼續進行工作,無需重新連線。RDSProxy 會自動切換到不同的讀取器資料庫執行個體。

mysql> select @@aurora_server_id; +--------------------+ | @@aurora_server_id | +--------------------+ | instance-7448 | +--------------------+ mysql> select count(*) from information_schema.TABLES; +----------+ | count(*) | +----------+ | 328 | +----------+

跨越存取 Aurora 資料庫 VPCs

根據預設,A urora 技術堆疊的元件都位於同一個 Amazon 中VPC。例如,假設在 Amazon 執行個體上EC2執行的應用程式連線到 Aurora 資料庫叢集 。在這種情況下,應用程序服務器和數據庫必須在相同的內部VPC。

使用 RDS Proxy,您可以VPC從另VPC一個資源 ( 資料庫EC2執行個體的存取。例如,您的組織可能有多個存取相同資料庫資源的應用程式。每個應用程序可能是在它自己的VPC。

若要啟用交叉VPC存取,請為 Proxy 建立新端點。代理伺服器本身與 Aurora 資料庫叢集 Amazon 資料RDS庫位於相同VPC的位置。不過,交叉VPC端點與其他VPC資源 (例如執行個體) 一起駐留在另一EC2個端點中。跨VPC端點與和其他資源相同的子網路和安全群組VPC相EC2關聯。這些關聯使您可以從應用程序連接到端點,否則由於VPC限制而無法訪問數據庫。

下列步驟說明如何透過 RDS Proxy 建立和存取跨VPC端點:

  1. 建立兩個VPCs,或選擇兩個VPCs已用於 Aurora 工作的項目。每個人都VPC應該有自己相關聯的網路資源,例如網際網路閘道、路由表、子網路和安全性群組。如果您只有一個VPC,則可以參考Amazon Aurora 入門設定另一個成功使VPC用 Aurora 的步驟。您也可以檢查 Amazon EC2 主控台VPC中的現有資源,以查看要連接在一起的資源種類。

  2. 建立與您要連線的 Aurora 資料庫叢集 相關聯的資料庫代理。請遵循 建立 RDS Proxy 中的程序。

  3. 在RDS主控台中 Proxy 的「詳細資料」頁面上,選擇「Proxy 端點」區段下的「建立端點」。請遵循 建立代理端點 中的程序。

  4. 選擇要讓跨VPC端點讀取/寫入或唯讀。

  5. 請不要接受與 Aurora 資料庫叢集 Amazon RDS 資料庫個體VPC。這VPC必須與代理所在的 AWS 區域VPC位於相同的區域中。

  6. 現在不接受與 Aurora 資料庫叢集 Amazon RDS 資料庫新的選擇。根據您選擇的子網路和安全性群組來建立這些項VPC目。

  7. 您不需要變更 Secrets Manager 機密的任何設定。相同的認證適用於 Proxy 的所有端點,無論VPC每個端點位於哪個端點。

  8. 等待新端點為可用狀態。

  9. 記下完整的端點名稱。這是以 Region_name.rds.amazonaws.com 結尾的值,作為資料庫應用程式連線字串的一部分提供。

  10. 從與端點相同VPC的資源存取新端點。測試此過程的一個簡單方法是在其中創建一個新EC2實例VPC。然後,登入執行EC2個體並執行mysqlpsql命令,以使用連接字串中的端點值進行連線。