跳至內容

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

3 分的閱讀內容
0

我想對 Amazon Redshift 叢集的連線問題進行疑難排解。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

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

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

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

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

如果您嘗試連線到公有子網路中的 Amazon Redshift 叢集,請檢查該叢集是否已設定為可公開存取。如需可公開存取選項的詳細資訊,請參閱虛擬私有雲端 (VPC) 中的 Redshift 資源

確認您的路由表具有附加的網際網路閘道。

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

telnet cluster_endpoint cluster_port

**注意:**以您的值取代 cluster_endpointcluster_port

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

如果您的 Amazon Redshift 叢集位於私有子網路中,請確保將 NAT 閘道附加到公有子網路的路由表。NAT 閘道允許私有子網路中的叢集連線到網際網路。檢查您的叢集是否未設定為可公開存取

若要確認您的用戶端可以存取 Amazon Redshift 叢集引導節點的私有 IP 位址,請執行 dig 命令:

dig cluster_endpoint

**注意:**用您的叢集端點取代 cluster_endpoint

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

telnet cluster_endpoint cluster_port

**注意:**以您的值取代 cluster_endpointcluster_port

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

如果 telnet 命令的輸出顯示您的 Amazon Redshift 叢集連線失敗,請檢查下列情況:

  • 安全群組的傳入規則允許 TCP 類型的 Amazon Redshift 連接埠 5439。
  • 安全群組的傳入規則包括用於連線到 Amazon Redshift 叢集的 CIDR 範圍或 IP 位址。

如果輸出顯示您的 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 console (Amazon Redshift 主控台)。
  2. 在導覽窗格中,選擇 Configuration (組態)。
  3. 選擇 Workload Management (工作負載管理)。
  4. 修改與您的 Amazon Redshift 叢集關聯的參數群組
  5. (選用) 執行 describe-cluster-parameters AWS CLI 命令來確認您的 SSL 組態:
    aws redshift describe-cluster-parameters --parameter-group-name exampleparametergroupname

如果您的 SSL 組態設定為 true,則請將 require_ssl 參數更新為預設參數值 false。若要變更 SSL 組態,請編輯與 Amazon Redshift 叢集關聯的參數群組。您可以從 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"

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

若要確認 Amazon Redshift 叢集中開啟的連線數,請完成下列步驟:

  1. 開啟 Amazon CloudWatch console (Amazon CloudWatch 主控台)。

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

  3. 使用 STL_CONNECTION_LOG 資料表檢查開啟的連線:

    select recordtime, username, dbname, remotehost, remoteportfrom 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;

如果您有大量開啟的連線,請執行以下其中一個動作:

  • 使用 PG_TERMINATE_BACKEND 命令關閉所有閒置工作階段。
  • 根據您用於連線 Amazon Redshift 叢集的作業系統,在用戶端變更 TCP/IP 逾時設定。更新 TCP/IP 逾時設定可以幫助防止閒置工作階段保持開啟。

連線遭拒錯誤

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

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

當您嘗試存取 Amazon Redshift 叢集時,權限問題可能會導致上述錯誤。若要解決此連線錯誤,請執行下列其中一個動作:

相關資訊

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

為什麼我無法連線到 Amazon Redshift 叢集?

AWS 官方已更新 1 年前