RDS Proxy 的故障診斷 - Amazon Relational Database Service

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

RDS Proxy 的故障診斷

接下來,您可以找到一些常見 RDS Proxy 問題的疑難排解想法,以及 RDS Proxy 的 CloudWatch 記錄檔上的資訊。

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

驗證代理的連線能力

您可以使用下列命令來確認連線中的所有元件 (例如 Proxy、資料庫和計算執行個體) 都可以彼此通訊。

使用describe-db-proxies指令檢查代理本身。還可以使用 describe-db-proxy-target-groups 指令來檢查相關聯的目標群組。檢查目標的詳細資訊是否符合您打算與 Proxy 建立關聯的 RDS 資料庫執行個體。使用如下命令。

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 內的 ReasonDescriptionTargetHealth 欄位,以檢查代理是否能與基礎資料庫執行個體進行通訊。

  • StateAVAILABLE 值表示代理可連線至資料庫執行個體。

  • StateUNAVAILABLE 值表示暫時或永久的連線問題。在這種情況下,請檢查 ReasonDescription 欄位。例如,如果 Reason 具有 PENDING_PROXY_CAPACITY 的值,請在代理完成其擴展操作後嘗試再次連線。如果 Reason 具有 UNREACHABLECONNECTION_FAILEDAUTH_FAILURE 的值,請使用來自 Description 欄位的解說,協助您診斷此問題。

  • State 欄位在變更為 REGISTERINGAVAILABLE 前,可能短暫具有 UNAVAILABLE 的值。

如果下列 Netcat 命令 (nc) 成功,您可以從 EC2 執行個體或登入的其他系統存取代理端點。如果您與代理和關聯的資料庫不在同一 VPC 中,則此命令會回報失敗。您可能可以直接登入資料庫,而不需要在同一個 VPC 中。然而除非您位於同一個 VPC 中,否則無法登入代理。

nc -zx MySQL_proxy_endpoint 3306 nc -zx PostgreSQL_proxy_endpoint 5432

您可以使用下列命令確定您的 EC2 執行個體具有需要的屬性。特別是,EC2 執行個體的 VPC 必須與 Proxy 連線的 的 VPC 相同。

aws ec2 describe-instances --instance-ids your_ec2_instance_id

檢查用於代理的 Secrets Manager 秘密。

aws secretsmanager list-secrets aws secretsmanager get-secret-value --secret-id your_secret_id

請確定顯示的SecretString欄位get-secret-value已編碼為包含usernamepassword欄位的 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 }

常見問題與解決方案

本節說明使用 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 限制了一些連接到數據庫代理名稱。從用戶端到 Proxy 的同時連線要求數目已超過上限。

建立新代理或連線至代理時,可能會遇到下列問題。

錯誤 原因或因應措施

403: The security token included in the request is invalid

選取現有的 IAM 角色,而不是選擇建立新的 IAM 角色。

連線到 MySQL 代理時可能會遇到下列問題。

錯誤 原因或因應措施
ERROR 1040 (HY000): Connections rate limit exceeded (limit_value) 從用戶端到代理的連線要求速率已超過限制。
ERROR 1040 (HY000): IAM authentication rate limit exceeded 從用戶端到代理器的 IAM 身分驗證同時請求數目已超過限制。
ERROR 1040 (HY000): Number simultaneous connections exceeded (limit_value) 從用戶端到代理的同時連線要求數目超過限制。

ERROR 1045 (28000): Access denied for user 'DB_USER'@'%' (using password: YES)

代理使用的 Secrets Manager 私密不符合現有資料庫使用者的使用者名稱和密碼。更新 Secrets Manager 私密中的登入資料,或確認資料庫使用者存在,且具有與私密中相同的密碼。
ERROR 1105 (HY000): Unknown error 發生未知的錯誤。
ERROR 1231 (42000): Variable ''character_set_client'' can't be set to the value of value

character_set_client 參數設定的值無效。例如,值 ucs2 是無效的,因為它可能會讓 MySQL 伺服器當機。

ERROR 3159 (HY000): This RDS Proxy requires TLS connections.

您已在代理中啟用需要 Transport Layer Security設定,但您的連線已在 MySQL 用戶端中包含參數 ssl-mode=DISABLED。執行下列任何一項:

  • 為代理停用需要 Transport Layer Security設定。

  • 使用 MySQL 用戶端中 ssl-mode=REQUIRED 的最小設定來連線至資料庫。

ERROR 2026 (HY000): SSL connection error: Internal Server Error

TLS 與代理的交握失敗。一些可能的原因包括:

  • SSL 是必要的,但伺服器不支援它。

  • 發生內部伺服器錯誤。

  • 發生錯誤的交握。

ERROR 9501 (HY000): Timed-out waiting to acquire database connection

代理等候取得資料庫連線逾時。一些可能的原因包括:

  • 代理無法建立資料庫連線,因為已達到最大連線數

  • 代理無法建立資料庫連線,因為資料庫無法使用。

連線到 PostgreSQL 代理時可能會遇到下列問題。

錯誤 原因 解決方案

IAM authentication is allowed only with SSL connections.

使用者嘗試使用 PostgreSQL 用戶端中的 sslmode=disable 設定,透過 IAM 身分驗證連線至資料庫。

使用者需要使用 PostgreSQL 用戶端中 sslmode=require 的最小設定連接到資料庫。如需詳細資訊,請參閱 PostgreSQL SSL 支援文件。

This RDS Proxy requires TLS connections.

使用者啟用需要 Transport Layer Security選項,但嘗試使用 PostgreSQL 用戶端中的 sslmode=disable 連線。

若要修正此錯誤,請執行下列其中一項操作:

  • 停用代理的需要 Transport Layer Security選項。

  • 使用 PostgreSQL 用戶端中 sslmode=allow 的最小設定連線至資料庫。

IAM authentication failed for user user_name. Check the IAM token for this user and try again.

此錯誤可能由下列原因造成:

  • 用戶端提供了不正確的 IAM 使用者名稱。

  • 用戶端為使用者提供了不正確的 IAM 授權字符。

  • 用戶端使用的 IAM 政策沒有必要許可。

  • 用戶端為使用者提供了過期的 IAM 授權字符。

若要修正此錯誤,請執行下列動作:

  1. 確認提供的 IAM 使用者存在。

  2. 確認 IAM 授權字符屬於所提供的 IAM 使用者。

  3. 確認 IAM 政策具有適當的 RDS 許可。

  4. 檢查所使用之 IAM 授權字符的有效性。

This RDS proxy has no credentials for the role role_name. Check the credentials for this role and try again.

這個角色沒有 Secrets Manager 秘密

新增此角色的 Secrets Manager 秘密。如需詳細資訊,請參閱設定 AWS Identity and Access Management (IAM) 政策

RDS supports only IAM, MD5, or SCRAM authentication.

用來連線到代理的資料庫用戶端正在使用代理目前不支援的身分驗證機制。

如果您未使用 IAM 身分驗證,請使用 MD5 或 SCRAM 密碼身分驗證。

A user name is missing from the connection startup packet. Provide a user name for this connection.

嘗試建立連線時,用來連線至 Proxy 的資料庫用戶端並未傳送使用者名稱。

使用您選擇的 PostgreSQL 用戶端設定與代理連線時,請務必定義使用者名稱。

Feature not supported: RDS Proxy supports only version 3.0 of the PostgreSQL messaging protocol.

用於連線到代理的 PostgreSQL 用戶端使用的通訊協定早於 3.0。

使用支援 3.0 訊息通訊協定的較新 PostgreSQL 用戶端。如果您使用的是 PostgreSQL psql CLI,請使用大於或等於 7.4 的版本。

Feature not supported: RDS Proxy currently doesn't support streaming replication mode.

用來連線至 Proxy 的 PostgreSQL 用戶端正在嘗試使用串流複寫模式,而 RDS Proxy 目前不支援這種模式。

關閉用於連線的 PostgreSQL 用戶端中的串流複寫模式。

Feature not supported: RDS Proxy currently doesn't support the option option_name.

透過啟動訊息,用來連線至 Proxy 的 PostgreSQL 用戶端正在要求 RDS Proxy 目前不支援的選項。

在用於連線的 PostgreSQL 用戶端中,關閉上述訊息中顯示為不支援的選項。

The IAM authentication failed because of too many competing requests.

從用戶端到代理器的 IAM 身分驗證同時請求數目已超過限制。

降低使用 PostgreSQL 用戶端的 IAM 驗證建立連線的速率。

The maximum number of client connections to the proxy exceeded number_value.

從用戶端到代理的同時連線要求數目超過限制。

減少從 PostgreSQL 用戶端到此 RDS Proxy 的作用中連線數目。

Rate of connection to proxy exceeded number_value.

從用戶端到代理的連線要求速率已超過限制。

降低從 PostgreSQL 用戶端建立連線的速率。

The password that was provided for the role role_name is wrong.

此角色的密碼與 Secrets Manager 密碼不符。

在 Secrets Manager 檢查此角色的密碼,以查看密碼是否與 PostgreSQL 用戶端中使用的密碼相同。

The IAM authentication failed for the role role_name. Check the IAM token for this role and try again.

用於 IAM 驗證的 IAM 符記發生問題。

產生一個新的身分驗證符記,並在新的連線中加以使用。

IAM is allowed only with SSL connections.

用戶端嘗試使用 IAM 驗證進行連線,但未啟用 SSL。

在用戶端中啟用 SSL。

Unknown error.

發生未知的錯誤。

聯絡 AWS Support,以便調查問題。

Timed-out waiting to acquire database connection.

代理等候取得資料庫連線逾時。一些可能的原因包括:

  • 代理無法建立資料庫連線,因為已達到最大連線數

  • 代理無法建立資料庫連線,因為資料庫無法使用。

可能的解決方案如下:

  • 檢查 狀態的目標,以查看它是否無法使用。

  • 檢查是否有長時間執行和/或查詢正在執行的交易。他們可以使用來自連線集區的資料庫連線很長一段時間。

Request returned an error: database_error.

從 Proxy 建立的資料庫連線傳回錯誤。

解決方案取決於特定的資料庫錯誤。其中一個範例為 Request returned an error: database "your-database-name" does not exist。這表示指定的資料庫名稱不存在於資料庫伺服器上。或者,它表示用作資料庫名稱的使用者名稱 (如果未指定資料庫名稱) 不存在於伺服器上。