如何對 Amazon Redshift 連線錯誤進行疑難排解?

2 分的閱讀內容
0

我無法連線到我的 Amazon Redshift 叢集。如何對此問題進行疑難排解?

解決方案

Amazon Redshift 叢集最近曾從快照調整大小或還原

如果 Amazon Redshift 叢集最近曾從快照調整大小或還原,請檢查叢集的子網路。在快照調整大小或還原之前,叢集必須在相同的子網路中啟動。

如果 Amazon Redshift 叢集最近沒有調整大小或還原,請驗證您的網路組態。新舊子網路的網路組態必須相同。

Amazon Redshift 叢集位於公有子網路中

如果您嘗試連線到位於公有子網路中的 Amazon Redshift 叢集,請檢查下列各項:

  • 確認 Amazon Redshift 叢集設為「可公開存取」。 如需可公開存取選項的相關資訊,請參閱管理 VPC 中的叢集
  • 確認您已將網際網路閘道連接到路由表。

若要測試連線,請使用 telnet 來測試與 Amazon Redshift 叢集的連線:

telnet <cluster endpoint> <cluster port>

Amazon Redshift 叢集位於私有子網路中

如果您的 Amazon Redshift 叢集位於私有子網路中,請檢查下列各項:

  • 請務必將 NAT 閘道連接到公有子網路的路由表。NAT 閘道允許私有子網路中的叢集連線到網際網路。
  • 確定您的叢集不是設為「可公開存取」。

若要確認您的用戶端可以連線到 Amazon Redshift 叢集引導節點的私有 IP 地址,請使用 dig 命令:

dig <cluster endpoint>

若要測試與 Amazon Redshift 叢集的連線,請使用 telnet 命令:

telnet <cluster endpoint><cluster port>

執行 Telnet 失敗或仍然無法存取 Amazon Redshift 叢集

如果 telnet 命令指出您的 Amazon Redshift 叢集連線失敗,請驗證是否滿足下列條件:

  • 安全群組的傳入規則允許使用 TCP 類型的 Amazon Redshift 連接埠 (預設值 5439)。
  • 您要連線到 Amazon Redshift 叢集的 CIDR 範圍或 IP 已新增到安全群組的輸入規則中。

如果 telnet 命令指出 Amazon Redshift 叢集連線成功,但您的叢集仍然無法存取,請檢查網路的防火牆。您的防火牆可能會封鎖 Amazon Redshift 連接埠 (預設連接埠為 5439)。

無效的作業連線錯誤

如果您的 Amazon Redshift 叢集需要為所有連線啟用 SSL,則您可能會收到下列連線錯誤:

Error: [Amazon](500310) Invalid operation: no pg_hba.conf entry for host "::ffff:205.xxx.xxx.xxx", user "username", database "dbname", SSL off;

若要確認 require_ssl 參數是否設為 true,請執行下列步驟:

1.    開啟 Amazon Redshift 主控台

2.    選擇設定索引標籤。

3.    修改與您的 Amazon Redshift 叢集相關聯的參數群組

4.    (選用) 使用 AWS Command Line Interface (AWS CLI) 驗證您的 SSL 組態:

describe-cluster-parameters

如果您的 SSL 組態設為 true,請考慮下列方法:

  • require_ssl 參數更新回 false,這是預設參數值。透過編輯與 Amazon Redshift 叢集相關聯的參數群組即可變更 SSL 組態。您可以從 Amazon Redshift 主控台的參數索引標籤編輯參數群組。
  • 如果您的使用案例或環境需要 SSL 連線,請確定您的連線字串包含必要的 SSL 參數。

例如:

jdbc:redshift://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev?ssl=true

嚴重連線錯誤

當 Amazon Redshift 叢集中存在太多開啟的連線時,您會收到下列錯誤:

Error: FATAL:  connection limit [500]/[2000] exceeded for user

如錯誤訊息所示,在 Amazon Redshift 中,dc2.large 和 ds2.xlarge 節點類型的最大連線限制為 500。對於 ds2.8xlarge、dc2.8xlarge、ra3.xlplus、ra3.4xlarge 及 ra3.16xlarge 節點,最大連線限制為 2,000。

若要驗證 Amazon Redshift 叢集中開啟的連線數量,請執行下列步驟:

1.    開啟 Amazon CloudWatch 主控台

2.    在 Amazon CloudWatch Logs 項目中尋找 DatabaseConnections 指標。

3.    使用 STL_CONNECTION_LOG 表格來檢查開啟的連線:

select recordtime, username, dbname, remotehost, remoteport
from stl_connection_log
where event = 'initiating session'
and pid not in
(select pid from stl_connection_log
where event = 'disconnecting session')
order by 1 desc;

4.    使用 STV_SESSIONS 表格來檢視 Amazon Redshift 的作用中使用者工作階段的相關資訊:

select * from stv_sessions;

如果您有大量開啟的連線,請考慮下列方法:

連線遭拒錯誤

如果您的 Amazon Redshift 叢集無法建立連線,您可能會收到下列連線遭拒錯誤:

Error:  amazon 500150 error setting/closing connection: operation timed out/ connection refused.

此錯誤可能表示存取 Amazon Redshift 叢集時出現權限問題。若要解決此連線錯誤,請考慮下列方法:

  • 如果您在 Amazon Virtual Private Cloud (Amazon VPC) 中建立叢集,請將用戶端 CIDR/IP 地址新增至 VPC 安全群組。如需為叢集設定 VPC 安全群組的相關資訊,請參閱管理 VPC 中的叢集
  • 如果您在 VPC 外部建立叢集,請將用戶端 CIDR 或 IP 地址新增至叢集安全群組。如需設定叢集安全群組的相關資訊,請參閱 Amazon Redshift 叢集安全群組

相關資訊

如何使私有 Amazon Redshift 叢集可公開存取?

我無法連線到我的 Amazon Redshift 叢集

AWS 官方
AWS 官方已更新 1 年前