本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
RDS代理概念和術語
您可以使用代理伺服器簡化 Amazon 資RDS料庫執行個體 的連線管RDS理。
RDSProxy 會處理用戶端應用程式和資料庫之間的網路流量。它以主動方式達成此功能,首先了解資料庫協定,然後,它會根據應用程式的SQL作業和資料庫中的結果集來調整其行為。
RDSProxy 可減少資料庫上連線管理的記憶體和CPU額外負荷。當應用程式同時開啟許多連線時,CPU資料庫需要較少的記憶體和資源 它關閉並重新開啟長時間閒置的連線時,也不需要依據應用程式的邏輯。同樣地,當資料庫發生問題時,重新建立連線需要的應用程式邏輯也比較少。
RDSProxy 的基礎結構具有高可用性,並透過多個可用區域 (AZs) 部署。RDSProxy 的運算、記憶體和儲存獨立於RDS資料庫執行個體 。這種分離有助於降低資料庫伺服器的負荷,使它們可以投入資源來服務資料庫工作負載。RDSProxy 運算資源是無伺服器的,可根據您的資料庫工作負載自動調整規模。
RDS代理主機概念概觀
RDSProxy 會處理基礎結構以執行連線集區,以及下節所述的其他功能。您會在 [代理伺服器] 頁面上看到RDS主控台中所代表的 Proxy。
每個代理處理與單一資RDS料庫執行個體 的連線 Proxy 會自動判斷RDS異地同步備份資料庫執行個體或叢集 集的目前寫入器執行個體
Proxy 保持開啟且可供資料庫應用程式使用的連線組成連線集區。
默認情況下,RDS代理可以在會話中的每個事務後重複使用連接。此一交易層級重複使用稱為多工。當 RDS Proxy 暫時從連線集區移除連線以重複使用連線時,該作業稱為借用連線。如果這樣做是安全的,RDSProxy 會傳回連線至連線集區的連線。
在某些情況下,RDSProxy 無法確定在目前工作階段之外重複使用資料庫連線是否安全。這時,它會讓工作階段保持在同一連線上,直到該工作階段結束。這種回復行為稱為鎖定。
代理具有預設端點。當您使用 Amazon RDS 資料庫執行個體 Amazon Aurora 資料庫時,請連線到此端點。您會這樣做,而不是連線到直接連線至執行個體的讀取/寫入端點。對於 資料庫叢集,您也可以建立其他讀取/寫入和唯讀端點。如需詳細資訊,請參閱代理端點概觀。
例如,您仍然可以連線到叢集端點以進行讀取/寫入連線,而不需要連線集區。您仍然可以連線至讀取器端點,以進行唯讀連線的負載平衡。您仍然可以連線到執行個體端點,以便對叢集內的特定資料庫執行個體進行診斷和疑難排解。如果您使用其他 AWS 服務 (例如 AWS Lambda 連線至RDS資料庫),請變更其連線設定以使用 Proxy 端點。例如,您可以指定代理端點,以允許 Lambda 函數在利用 RDS Proxy 功能的同時存取您的資料庫。
每個代理都包含一個目標群組。此目標群組體現了代理可連接的資。與代理相關聯的稱為該代理的目標。為了方便起見,當您透過主控台建立 Proxy 時,RDSProxy 也會建立對應的目標群組,並自動註冊相關聯的目標。
引擎系列是一組使用相同資料庫協定的相關資料庫引擎。您可以為您建立的每一個代理選擇引擎系列。
連線集區
每個代理伺服器會針對其關聯RDS資料庫 的寫入器執行個體執行連線集區。連線集區是一種最佳化,可以減輕開啟和關閉連線,以及保持許多連線同時開啟的相關負荷。此一負荷包含處理每個新連線所需的記憶體。它還涉及關閉每個連接並打開一個新的開CPU銷。範例包括傳輸層安全性/安全通訊端層 (TLS/SSL) 交握、驗證、交涉功能等。連線集區簡化了應用程式的邏輯。您不需要撰寫應用程式碼,以便同時開啟的連線數降到最低。
每個代理還會執行連線多工,又稱為連線重用。隨著多路復用,RDS代理執行使用一個基礎數據庫連接的事務的所有操作。RDS然後可以使用不同的連接進行下一個事務。您可以同時開啟到代理的多個連線,代理則使較少的資料庫執行個體或叢集連線保持開啟。這樣做可以進一步減輕資料庫伺服器上連線的記憶體負荷。此技術也可以降低發生「連線數太多」錯誤的可能性。
RDS代理安全
RDS代理使用現有的RDS安全機制,如TLS/SSL和 AWS Identity and Access Management (IAM)。如需這些安全功能的一般資訊,請參閱 Amazon RDS Amazon 的安全。此外,請務必熟悉 RDS 如何處理驗證、授權和其他安全性領域。
RDS代理可以充當客戶端應用程序和基礎數據庫之間的額外安全層。例如,即使TLS基礎資料庫執行個體支援較舊版本的TLS. 您可以使用IAM角色連接到代理。即使代理使用原生使用者和密碼身分驗證方法來連線至資料庫,仍然如此。您可以使用這種技術,強制資料庫應用程式執行嚴格的身分驗證要求,而無需在資料庫執行個體上進行昂貴的遷移工作。
您可以將 RDS Proxy 使用的資料庫認證儲存在中 AWS Secrets Manager。代理伺服器存取的資料RDS庫執行個體 的每個資料庫使用者在 Secret Manager 中都必須有對應的密碼。您也可以為 RDS Proxy 使用者設定IAM驗證。如此一來,即使資料庫使用原生密碼IAM驗證,您也可以強制執行資料庫存取的驗證。與其將資料庫登入資料嵌入在應用程式的程式碼中,建議您使用這些安全功能。
使用TLS/SSL與RDS代理
您可以使用TLS/SSL協議連接到RDS代理。
注意
RDS代理伺服器使用來自 AWS Certificate Manager (ACM) 的憑證。如果您使用的是RDS代理伺服器,則不需要下載 Amazon RDS 憑證或更新使用RDS代理連線的應用程式。
若要強制執TLS行 Proxy 與資料庫之間的所有連線,您可以在中建立或修改 Proxy 時指定「需要傳輸層安全性」設定 AWS Management Console。
RDS代理還可以確保您的會話在客戶端和RDS代理端點SSL之間使用TLS/。若要讓 RDS Proxy 這樣做,請在用戶端指定需求。SSL會話變量不設置為使用RDS代理SSL連接到數據庫。
-
對RDS於我的 SQL ,請在執行
mysql
命令時使用--ssl-mode
參數在用戶端指定需求。 -
對於 Amazon RDS Postgre SQL ,請在執行命令時指定
sslmode=require
為conninfo
字串的一部分。psql
RDS代理服務器支持TLS協議版本 1.0,1.1,1.2 和 1.3 版本。您可以使用比您在基礎資料庫中使用的TLS更高版本的連線到 Proxy。
根據預設,用戶端程式會與 RDS Proxy 建立加密連線,並可透過--ssl-mode
此選項進一步控制。從用戶端,RDS代理伺服器支援所有SSL模式。
對於用戶端,SSL模式如下:
- PREFERRED
-
SSL是第一選擇,但它不是必需的。
- DISABLED
-
不SSL允許。
- REQUIRED
-
強制執行SSL。
- VERIFY加
-
強制執行SSL並驗證憑證授權單位 (CA)。
- VERIFY_IDENTITY
-
強制執行SSL並驗證 CA 和 CA 主機名稱。
在搭配 --ssl-mode
VERIFY_CA
或 VERIFY_IDENTITY
使用用戶端時,請指定指向 --ssl-ca
格式 CA 的 .pem
選項。若要使用該.pem
檔案,請PEMs從 Amazon 信任服務.pem
檔案中。
RDSProxy 使用萬用字元憑證,這些憑證同時適用於網域及其子網域。如果您使用用mysql
戶端連線SSL模式VERIFY_IDENTITY
,目前您必須使用 My SQL 8.0 相容mysql
命令。
容錯移轉
容錯移轉是一種高可用性功能,當原始執行個體無法使用時,用另一個來取代該資料庫執行個體。發生容錯移轉可能是因為資料庫執行個體發生問題。它也可能是正常維護程序的一部分,例如在資料庫升級期間。容錯移轉適用於異地同步備份組態中的RDS資料庫執行個
透過 Proxy 連線可讓您的應用程式對資料庫容錯移轉更具彈性。當原始資料庫執行個體無法使用時,RDSProxy 會連線到待命資料庫,而不會中斷閒置的應用程式連線 這有助於加速並簡化容錯移轉程序。與典型的重新啟動或資料庫問題相比,這對應用程式的干擾程度較小。
如果沒有 RDS Proxy,容錯移轉會造成短暫中斷。在中斷期間,您無法在容錯移轉中對資料庫執行寫入作業。任何現有的資料庫連線都會中斷,您的應用程式必須將其重新開啟。當提升唯讀資料庫執行個體,以取代無法使用的執行個體時,該資料庫將可使用於新連線和寫入操作。
在資料庫容錯移轉期間,RDSProxy 會繼續接受位於相同 IP 位址的連線,並自動將連線導向至新的主要資料庫執行個體。透過 RDS Proxy 連線的用戶端不會受到下列情況的影響:
-
容錯移轉時的網域名稱系統 (DNS) 傳輸延遲。
-
本地DNS緩存。
-
連線逾時。
-
不確定哪個資料庫執行個體是目前的寫入器。
-
等候來自已不可使用,卻未關閉連線的前寫入器的查詢回應。
對於維護自己連線集區的應用程式而言,透過 RDS Proxy 表示在容錯移轉或其他中斷期間,大部分的連線都會保持作用狀態。只會取消處於交易或SQL陳述式中間的連線。RDS代理會立即接受新的連線。當資料庫寫入器無法使用時,RDSProxy 會將內送要求排入佇列。
對於不維護自己的連線集區的應用程式,RDSProxy 可提供更快的連線速率和更多開啟的連線。它免除了從資料庫頻繁重新連接的昂貴負荷。它透過重複使用 RDS Proxy 連線集區中維護的資料庫連線來達到此目的。這種方法對於設置成本很高的TLS連接尤為重要。
交易
單一交易中的所有陳述式總是使用相同的基礎資料庫連線。當交易結束時,連線將可提供給不同的工作階段使用。使用交易做為粒度單位會產生下列後果:
-
開啟「RDS我的 SQL 我的」SQL
autocommit
設定時,連線重複使用可能會在每個個別陳述式之後發生。 -
相反地,
autocommit
設定關閉時,您在工作階段中發出的第一個陳述式會開始新的交易。例如,假設您輸入了SELECT
、INSERT
UPDATE
、和其他資料處理語言 (DML) 陳述式的序列。在此情況下,直到您發出COMMIT
、ROLLBACK
或以另外方式結束交易之前,都不會重複使用連線。 -
輸入資料定義語言 (DDL) 陳述式會導致交易在該陳述式完成之後結束。
RDSProxy 會在交易透過資料庫用戶端應用程式所使用的網路通訊協定結束時偵測。交易偵測不依賴關鍵字,例如COMMIT
或ROLLBACK
出現在SQL陳述式文字中。
在某些情況下,RDSProxy 可能會偵測到資料庫要求,使得將工作階段移至其他連線是不切實際的。這時,它會在剩餘的工作階段關閉該連線的多工功能。如果 RDS Proxy 無法確定多工對工作階段是可行的,則適用相同的規則。此操作稱為鎖定。如需偵測和最小化鎖定的方法,請參閱 避免固定代理 RDS。