使用 Amazon RDS Proxy 端點 - Amazon Aurora

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

使用 Amazon RDS Proxy 端點

了解 RDS Proxy 的端點,以及如何使用它們。透過使用 Proxy 端點,您可以利用下列功能:

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

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

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

代理端點概觀

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

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

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

提示

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

對於您建立的代理端點,您還可以將端點與代理本身所用的不同 Virtual Private Cloud (VPC) 建立關聯。如此一來,您可以從不同的 VPC 連線至 Proxy,例如,組織內不同應用程式使用的 VPC。

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

在 RDS Proxy 日誌中,每個項目均會以關聯的代理端點名稱作為前綴。此名稱可以是您針對使用者定義端點所指定的名稱。或者,它可以是執行讀取/寫入要求的 Proxy 預設端點的特殊名稱default

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

代理端點會使用與相關聯代理相同的身分驗證機制。RDS Proxy 會自動設定使用者定義端點的許可和授權,且與相關聯代理的屬性一致。

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

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

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

注意

當您指定新端點為唯讀時,RDS Proxy 會要求 Aurora 叢集具有一個或多個讀取器資料庫執行個體。在某些情況下,您可能會您將代理的目標變更為只包含單一寫入器的 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-5507instance-7448。讀取器端點的連線會開始使用其中一個讀取器執行個體。在此範例中,系統會透過 delete-db-instance 命令來刪除此讀取器執行個體。如需後續查詢,RDS Proxy 會切換至不同的讀取器執行個體。

$ 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 工作階段中的查詢會繼續進行工作,無需重新連線。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 代理,您可以從另一個 VPC ( 資料庫執行個體的存取權。例如,您的組織可能有多個存取相同資料庫資源的應用程式。每個應用程式都可能在其自己的 VPC 中。

若要啟用跨 VPC 存取,您可以為代理建立新的端點。Proxy 本身駐留在與 Aurora 資料庫叢集相同的 VPC 中。然而,跨 VPC 端點駐留在其他 VPC 中,以及 EC2 執行個體等其他資源。跨 VPC 端點與 EC2 和其他資源相同的 VPC 子網路和安全群組關聯。這些關聯可讓您從因 VPC 限制而無法存取資料庫的應用程式連線至端點。

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

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

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

  3. 於 RDS 主控台代理的詳細資訊頁面上,在 Proxy endpoints (代理端點) 區段中,選擇 Create endpoint (建立端點)。請遵循 建立代理端點 中的程序。

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

  5. 不是接受與 Aurora 資料庫叢集相同 VPC 的預設值,而是選擇不同的 VPC。此 VPC 必須與代理所駐留的 VPC 位於相同的 AWS 區域。

  6. 現在,不是接受與 Aurora 資料庫叢集相同 VPC 的子網路和安全群組預設值,而是選擇新的選項。根據您選擇的 VPC 中的子網路和安全群組進行這些設定。

  7. 您不需要變更 Secrets Manager 機密的任何設定。相同的登入資料適用於代理的所有端點,無論每個端點所在的 VPC 為何。

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

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

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

建立代理端點

若要建立代理伺服器端點
  1. 登入 AWS Management Console,開啟位於 https://console.aws.amazon.com/rds/ 的 Amazon RDS 主控台。

  2. 在導覽窗格中,選擇 Proxies (代理)。

  3. 按一下您要為其建立新端點的代理名稱。

    該代理的詳細資訊頁面即會出現。

  4. Proxy endpoints (代理端點) 區段中,選擇 Create proxy endpoint (建立代理端點)。

    Create proxy endpoint (建立代理端點) 視窗即會出現。

  5. 對於 Proxy endpoint name (代理端點名稱),輸入您選擇的描述性名稱。

  6. 對於 Target role (目標角色) 下,選擇要讓端點讀取/寫入還是唯讀。

    使用讀取/寫入端點的連線可以執行任何類型的作業,例如資料定義語言 (DDL) 陳述式、資料操作語言 (DML) 陳述式和查詢。這些端點一律連線至 Aurora 叢集的主要執行個體。當您在應用程式中僅使用單一端點時,您可以使用讀取/寫入端點來進行一般資料庫操作。您也可以將讀取/寫入端點用於管理作業、線上交易處理 (OLTP) 應用程式和 extract-transform-load (ETL) 工作。

    使用唯讀端點的連線只能執行查詢。當 Aurora 叢集中有多個讀取器執行個體時,RDS Proxy 可以針對端點的每個連線使用不同的讀取器執行個體。這樣,查詢密集型應用程式可以利用 Aurora 的叢集功能。您可以透過新增更多讀取器資料庫執行個體,為叢集新增更多查詢容量。這些唯讀連線不會對叢集的主要執行個體施加任何額外負荷。如此一來,您的報告和分析查詢不會減慢 OLTP 應用程式的寫入操作。

  7. 對於 V irtual Private Cloud (VPC) (VPC),請選擇預設值,以便從通常用於存取 Proxy 或其關聯資料庫的相同 EC2 執行個體或其他資源存取端點。若要設定此代理的跨 VPC 存取,請選擇預設值以外的 VPC。如需跨 VPC 存取的詳細資訊,請參閱跨 VPC 存取 Aurora 資料庫

  8. 對於子網路,RDS Proxy 預設會填入與關聯代理相同的子網路。若要將端點的存取限制為僅能夠連線至 VPC 位址範圍的一部分,請移除一或多個子網路。

  9. 若為 VPC Security groups (VPC 安全群組),您可以選擇現有的安全群組,或建立新的安全群組。依據預設,RDS Proxy 會填入與相關聯代理相同的安全群組或群組。如果 Proxy 的輸入和輸出規則適用於此端點,請保留預設選擇。

    如果您選擇建立新的安全群組,請在此頁面上指定安全群組的名稱。然後稍後從 EC2 主控台編輯安全群組設定。

  10. 選擇 Create proxy endpoint (建立代理端點)。

若要建立代理端點,請使用AWS CLIcreate-db-proxy-endpoint指令。

包含下列必要參數:

  • --db-proxy-name value

  • --db-proxy-endpoint-name value

  • --vpc-subnet-ids list_of_ids. 以空格分隔子網路 ID。您沒有指定 VPC 本身的 ID。

您還可以包含下列選用參數:

  • --target-role { READ_WRITE | READ_ONLY }此參數預設為 READ_WRITEREAD_ONLY 值只會影響包含一個或多個讀取器資料庫執行個體的 Aurora 佈建叢集。如果代理伺服器與關聯,只包含寫入器資料庫執行個體的 Aurora 叢集,則無法指定READ_ONLY。如需將唯讀端點與 Aurora 叢集集搭配使用的詳細資訊,請參閱將讀取器端點與 Aurora 叢集搭配使用

  • --vpc-security-group-ids value. 以空格分隔安全群組 ID。如果省略此參數,RDS Proxy 會使用預設的 VPC 安全群組。RDS Proxy 會根據您為 --vpc-subnet-ids 參數指定的子網路 ID 來決定 VPC。

範例

下列範例會建立名稱為 my-endpoint 的代理端點

對於LinuxmacOS、或Unix:

aws rds create-db-proxy-endpoint \ --db-proxy-name my-proxy \ --db-proxy-endpoint-name my-endpoint \ --vpc-subnet-ids subnet_id subnet_id subnet_id ... \ --target-role READ_ONLY \ --vpc-security-group-ids security_group_id ]

在Windows中:

aws rds create-db-proxy-endpoint ^ --db-proxy-name my-proxy ^ --db-proxy-endpoint-name my-endpoint ^ --vpc-subnet-ids subnet_id_1 subnet_id_2 subnet_id_3 ... ^ --target-role READ_ONLY ^ --vpc-security-group-ids security_group_id

若要建立代理主機端點,請使用 RDS API 建立資料庫動作ProxyEndpoint

檢視代理端點

若要檢視代理端點的詳細資訊
  1. 登入 AWS Management Console,開啟位於 https://console.aws.amazon.com/rds/ 的 Amazon RDS 主控台。

  2. 在導覽窗格中,選擇 Proxies (代理)。

  3. 在清單中,選擇您要檢視其端點的代理。按一下代理名稱,以檢視其詳細資訊頁面。

  4. Proxy endpoints (代理端點) 區段中,選擇您要檢視的端點。按一下其名稱,以檢視詳細資訊頁面。

  5. 檢查您感興趣的參數值。您可以檢查如下所示屬性:

    • 端點是讀取/寫入還是唯讀。

    • 您在資料庫連線字串中使用的端點地址。

    • 與端點關聯的 VPC、子網路和安全群組。

若要檢視一或多個 Proxy 端點,請使用AWS CLIdescribe-db-proxy-endpoints指令。

您可以包含下列任一選用參數:

  • --db-proxy-endpoint-name

  • --db-proxy-name

以下範例描述 my-endpoint 代理端點。

範例

對於LinuxmacOS、或Unix:

aws rds describe-db-proxy-endpoints \ --db-proxy-endpoint-name my-endpoint

在Windows中:

aws rds describe-db-proxy-endpoints ^ --db-proxy-endpoint-name my-endpoint

若要描述一或多個代理主機端點,請使用 RDS API 描述 B 作ProxyEndpoints業。

修改代理端點

修改一個或多個代理端點
  1. 登入 AWS Management Console,開啟位於 https://console.aws.amazon.com/rds/ 的 Amazon RDS 主控台。

  2. 在導覽窗格中,選擇 Proxies (代理)。

  3. 在清單中,選擇您要修改其端點的代理。按一下代理伺服器名稱以檢視其

  4. Proxy endpoints (代理端點) 區段中,選擇您要修改的端點。您可以在清單中選取或按一下其名稱,以檢視詳細資訊頁面。

  5. 在代理詳細資訊頁面的 Proxy endpoints (代理端點) 區段中,選擇 Edit (編輯)。或者,在 Proxy 端點詳細資料頁面上,針對「動作」 選擇 「編輯」。

  6. 變更您要修改的參數值。

  7. 選擇儲存變更

若要修改 Proxy 端點,請使用具有下列必要參數的AWS CLImodify-db-proxy-endpoint指令:

  • --db-proxy-endpoint-name

使用下列一個或多個參數來指定對端點屬性的變更:

  • --new-db-proxy-endpoint-name

  • --vpc-security-group-ids. 以空格分隔安全群組 ID。

下列範例會將 my-endpoint 代理端點重新命名為 new-endpoint-name

範例

對於LinuxmacOS、或Unix:

aws rds modify-db-proxy-endpoint \ --db-proxy-endpoint-name my-endpoint \ --new-db-proxy-endpoint-name new-endpoint-name

在Windows中:

aws rds modify-db-proxy-endpoint ^ --db-proxy-endpoint-name my-endpoint ^ --new-db-proxy-endpoint-name new-endpoint-name

若要修改代理主機端點,請使用 RDS API 修改資料庫ProxyEndpoint作業。

刪除代理端點

您可以如下所述使用主控台刪除代理的端點。

注意

您無法刪除 RDS Proxy 為每個代理自動建立的預設代理主機端點。

當您刪除代理時,RDS Proxy 會自動刪除所有關聯的端點。

若要使用 AWS Management Console 來刪除代理端點
  1. 在導覽窗格中,選擇 Proxies (代理)。

  2. 在清單中,選擇您要刪除其端點的代理。按一下代理名稱,以檢視其詳細資訊頁面。

  3. Proxy endpoints (代理端點) 區段中,選擇您要刪除的端點。您可以在清單中選取一個或多個端點,或者按一下單一端點的名稱,以檢視詳細資訊頁面。

  4. 在代理詳細資訊頁面的 Proxy endpoints (代理端點) 區段中,選擇 Delete (刪除)。或者,在 Proxy 端點詳細資料頁面上,針對「動作」 選擇「刪除」。

若要刪除 Proxy 端點,請使用下列必要參數執行delete-db-proxy-endpoint命令:

  • --db-proxy-endpoint-name

下列命令會刪除名稱為 my-endpoint 的代理端點。

對於LinuxmacOS、或Unix:

aws rds delete-db-proxy-endpoint \ --db-proxy-endpoint-name my-endpoint

在Windows中:

aws rds delete-db-proxy-endpoint ^ --db-proxy-endpoint-name my-endpoint

若要使用 RDS API 刪除代理主機端點,請執行刪除資料庫ProxyEndpoint作業。指定代理端點 DBProxyEndpointName 參數的名稱。

代理端點的限制

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

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

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

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

  • 讀取器端點不適用於 Aurora 多寫入器叢集。