本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
RDS Proxy 的故障診斷
您可在下列內容中找到某些常見 RDS Proxy 問題的故障診斷想法,以及 RDS Proxy 的 CloudWatch 日誌的相關資訊。
在 RDS Proxy 日誌中,每個項目均會以關聯的代理端點名稱作為前綴。此名稱可以是您針對使用者定義端點所指定的名稱。也可以是執行讀取/寫入請求之代理預設端點的特殊名稱 default。如需代理端點的詳細資訊,請參閱使用 Amazon RDS Proxy 端點.
驗證代理的連線能力
您可以使用下列命令來驗證連線中的所有元件 (例如代理、資料庫和運算執行個體) 可以彼此通訊。
使用 describe-db-proxies 命令檢查代理本身。也請使用 describe-db-proxy-target-groups 命令檢查相關聯的目標群組。檢查目標的詳細資訊是否符合您打算與 Proxy 建立關聯的 Aurora 叢集。使用如下命令。
aws rds describe-db-proxies --db-proxy-name $DB_PROXY_NAME aws rds describe-db-proxy-target-groups --db-proxy-name $DB_PROXY_NAME
若要確認代理可連線至基礎資料庫,請使用 describe-db-proxy-targets 命令檢查目標群組中指定的目標。使用如下命令。
aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME
describe-db-proxy-targets 命令的輸出包含 TargetHealth 欄位。您可以檢查 State 內的 Reason、Description 和 TargetHealth 欄位,以檢查代理是否能與基礎資料庫執行個體進行通訊。
-
State的AVAILABLE值表示代理可連線至資料庫執行個體。 -
State的UNAVAILABLE值表示暫時或永久的連線問題。在這種情況下,請檢查Reason和Description欄位。例如,如果Reason具有PENDING_PROXY_CAPACITY的值,請在代理完成其擴展操作後嘗試再次連線。如果Reason具有UNREACHABLE、CONNECTION_FAILED或AUTH_FAILURE的值,請使用來自Description欄位的解說,協助您診斷此問題。 -
State欄位在變更為REGISTERING或AVAILABLE前,可能短暫具有UNAVAILABLE的值。
如果下列 Netcat 命令 (nc) 成功,您可以從 EC2 執行個體或登入的其他系統存取代理端點。如果您與代理和關聯的資料庫不在同一 VPC 中,則此命令會回報失敗。您可能可以直接登入資料庫,而不需要在同一個 VPC 中。然而除非您位於同一個 VPC 中,否則無法登入代理。
nc -zxMySQL_proxy_endpoint3306 nc -zxPostgreSQL_proxy_endpoint5432
您可以使用下列命令確定您的 EC2 執行個體具有需要的屬性。特別是,EC2 執行個體的 VPC 必須與 Proxy 連線的 RDS 資料庫執行個體Aurora 叢集的 VPC 相同。
aws ec2 describe-instances --instance-idsyour_ec2_instance_id
檢查用於代理的 Secrets Manager 秘密。
aws secretsmanager list-secrets aws secretsmanager get-secret-value --secret-idyour_secret_id
請確定 get-secret-value 所顯示的 SecretString 欄位已編碼為包含 username 和 password 欄位的 JSON 字串。下列範例顯示 SecretString 欄位的格式。
{
"ARN": "some_arn",
"Name": "some_name",
"VersionId": "some_version_id",
"SecretString": '{"username":"some_username","password":"some_password"}',
"VersionStages": [ "some_stage" ],
"CreatedDate": some_timestamp
}
疑難排解 IAM 身分驗證問題時,請確認下列事項:
-
資料庫已啟用 IAM 身分驗證。
-
代理已設定正確的身分驗證機制。
-
提供給代理的 IAM 角色中的 IAM 政策會將必要的
rds-db:connect許可授予適當的資料庫及其使用者名稱。 -
對於end-to-end IAM 身分驗證,存在符合 IAM 使用者或角色名稱的資料庫使用者。
-
連線已啟用 SSL/TLS。
常見問題與解決方案
本節說明使用 RDS Proxy 時的一些常見問題和潛在解決方案。
執行 aws rds describe-db-proxy-targets CLI 命令之後,如果 TargetHealth 描述說明 Proxy does not have any registered
credentials,請驗證下列事項:
-
有已註冊的憑證,供使用者存取代理。
-
用來存取代理所使用之 Secrets Manager 秘密的 IAM 角色是有效的。
建立或連線至資料庫代理時,您可能會遇到下列 RDS 事件。
| 類別 | RDS 事件 ID | 說明 |
|---|---|---|
|
失敗 |
RDS-EVENT-0243 | RDS 無法佈建代理的容量,因為子網路中沒有足夠的可用 IP 地址。若要修正此問題,請確認您的子網路具有最低數目的未使用 IP 地址。若要確定執行個體類別的建議數量,請參閱 規劃 IP 地址容量。 |
|
失敗 |
RDS-EVENT-0275 |
RDS 對部分連往資料庫代理 |
建立新代理或連線至代理時,可能會遇到下列問題。
| 錯誤 | 原因或因應措施 |
|---|---|
|
|
選取現有的 IAM 角色,而不是選擇建立新的 IAM 角色。 |
針對 RDS for MySQL 的 RDS Proxy 問題進行疑難排解
連線到 MySQL 代理時可能會遇到下列問題。
| 錯誤 | 原因或因應措施 |
|---|---|
ERROR 1040 (HY000): Connections rate limit exceeded (
|
從用戶端到代理的連線要求速率已超過限制。 |
ERROR 1040 (HY000): IAM authentication rate limit exceeded
|
從用戶端到代理器的 IAM 身分驗證同時請求數目已超過限制。 |
ERROR 1040 (HY000): Number simultaneous connections exceeded (
|
從用戶端到代理的同時連線要求數目超過限制。 |
|
|
代理使用的 Secrets Manager 私密不符合現有資料庫使用者的使用者名稱和密碼。更新 Secrets Manager 私密中的登入資料,或確認資料庫使用者存在,且具有與私密中相同的密碼。 |
ERROR 1105 (HY000): Unknown error
|
發生未知的錯誤。 |
ERROR 1231 (42000): Variable ''character_set_client'' can't be set to the value of
|
為 |
ERROR 3159 (HY000): This RDS Proxy requires TLS connections.
|
您已在代理中啟用需要 Transport Layer Security設定,但您的連線已在 MySQL 用戶端中包含參數
|
ERROR 2026 (HY000): SSL connection error: Internal Server
|
TLS 與代理的交握失敗。一些可能的原因包括:
|
ERROR 9501 (HY000): Timed-out waiting to acquire database connection
|
代理等候取得資料庫連線逾時。一些可能的原因包括:
|
針對 RDS for PostgreSQL 的 RDS Proxy 問題進行疑難排解
連線到 PostgreSQL 代理時可能會遇到下列問題。
| 錯誤 | 原因 | 解決方案 |
|---|---|---|
|
|
使用者嘗試使用 PostgreSQL 用戶端中的 |
使用者需要使用 PostgreSQL 用戶端中 |
|
|
這個角色沒有 Secrets Manager 秘密 |
新增此角色的 Secrets Manager 秘密。如需詳細資訊,請參閱設定 RDS Proxy 的 IAM 身分驗證。 |
|
|
用來連線到代理的資料庫用戶端正在使用代理目前不支援的身分驗證機制。 |
如果您未使用 IAM 身分驗證,請使用 MD5 或 SCRAM 密碼身分驗證。 |
|
|
嘗試建立連線時,用來連線至 Proxy 的資料庫用戶端並未傳送使用者名稱。 |
使用您選擇的 PostgreSQL 用戶端設定與代理連線時,請務必定義使用者名稱。 |
|
|
用戶端嘗試使用 IAM 驗證進行連線,但未啟用 SSL。 |
在用戶端中啟用 SSL。 |
|
|
使用者啟用需要 Transport Layer Security選項,但嘗試使用 PostgreSQL 用戶端中的 |
若要修正此錯誤,請執行下列其中一項操作:
|
|
|
此錯誤可能由下列原因造成:
|
若要修正此錯誤,請執行下列動作:
|
|
|
此角色的密碼與 Secrets Manager 密碼不符。 |
在 Secrets Manager 檢查此角色的密碼,以查看密碼是否與 PostgreSQL 用戶端中使用的密碼相同。 |
|
|
用於 IAM 驗證的 IAM 符記發生問題。 |
產生一個新的身分驗證符記,並在新的連線中加以使用。 |
|
|
用於連線到代理的 PostgreSQL 用戶端使用的通訊協定早於 3.0。 |
使用支援 3.0 訊息通訊協定的較新 PostgreSQL 用戶端。如果您使用的是 PostgreSQL |
|
|
用來連線至 Proxy 的 PostgreSQL 用戶端正在嘗試使用串流複寫模式,而 RDS Proxy 目前不支援這種模式。 |
關閉用於連線的 PostgreSQL 用戶端中的串流複寫模式。 |
|
|
透過啟動訊息,用來連線至 Proxy 的 PostgreSQL 用戶端正在要求 RDS Proxy 目前不支援的選項。 |
在用於連線的 PostgreSQL 用戶端中,關閉上述訊息中顯示為不支援的選項。 |
|
|
從用戶端到代理器的 IAM 身分驗證同時請求數目已超過限制。 |
降低使用 PostgreSQL 用戶端的 IAM 驗證建立連線的速率。 |
|
|
從用戶端到代理的同時連線要求數目超過限制。 |
減少從 PostgreSQL 用戶端到此 RDS Proxy 的作用中連線數目。 |
|
|
從用戶端到代理的連線要求速率已超過限制。 |
降低從 PostgreSQL 用戶端建立連線的速率。 |
|
|
發生未知的錯誤。 |
請聯絡 AWS Support 以調查問題。 |
|
|
代理逾時等待在
|
可能的解決方案如下:
|
|
|
從 Proxy 建立的資料庫連線傳回錯誤。 |
解決方案取決於特定的資料庫錯誤。其中一個範例為 |
|
|
從用戶端到代理器的 IAM 身分驗證同時請求數目已超過限制。 |
降低使用 PostgreSQL 用戶端的 IAM 驗證建立連線的速率。 |
|
|
RDS Proxy 無法連線至資料庫,因為用戶端連線至代理並未啟用 IAM 身分驗證。當代理的 |
啟用用戶端連線至代理的 IAM 身分驗證,然後再試一次。 |
|
|
RDS Proxy 無法連線至資料庫,因為 |
|
針對已刪除的 postgres 資料庫進行疑難排解
如果您錯誤地從執行個體刪除 postgres 資料庫,則需要還原資料庫以還原執行個體的連線。在您的資料庫執行個體內執行下列命令:
CREATE DATABASE postgres; GRANT CONNECT ON DATABASE postgres TO rdsproxyadmin;