為什麼會遇到 Amazon Redshift 叢集間歇性連線問題?

3 分的閱讀內容
0

我想要了解如何疑難排解並解決我遇到的 Amazon Redshift 叢集間歇性連線問題。此問題是由如存取受到限制、維護時段、節點故障、加密金鑰輪換、太多作用中的連線數、高 CPU 使用率,以及我遇到的用戶端連線問題等因素所導致。

簡短說明

下列問題會導致 Amazon Redshift 叢集中的間歇性連線問題:

  • 特定 IP 位址或 CIDR 區塊的存取受到限制
  • 維護時段更新
  • 節點故障或已排程的管理任務
  • 加密金鑰輪換
  • 作用中網路連線太多
  • 領導節點的高 CPU 使用率
  • 用戶端連線問題

解決方法

特定 IP 位址或 CIDR 區塊的存取受到限制

查看安全群組中的特定 IP 位址或 CIDR 區塊的存取是否受到限制。由於 DHCP 組態,您的用戶端 IP 位址可能會變更,進而造成連線問題。此外,如果您的 Amazon Redshift 叢集未使用彈性 IP 位址,叢集節點的 AWS 受管 IP 位址可能會變更。例如,當您刪除叢集然後從快照重新建立叢集時,或恢復暫停的叢集時,IP 位址可能會變更。

注意: 刪除並重新建立 Amazon Redshift 叢集時,會輪換公有 IP 地址。每當取代節點時,私有 IP 位址都會變更。

若要解決任何網路限制,請採取下列其中一種動作:

  • 如果您的應用程式快取叢集端點後方的公有 IP 位址,則請將此端點用於 Amazon Redshift 連線。若要讓網路連線穩定安全,請勿將 DNS 快取用於連線。
  • 最佳實務是對 Amazon Redshift 叢集使用彈性 IP 位址。彈性 IP 位址可讓您變更基礎組態,而不會影響用戶端用來連接至叢集的 IP 位址。如果您在發生故障後想要復原叢集,此方法很有用。如需詳細資訊,請參閱管理 VPC 中的叢集
  • 如果您使用私有 IP 位址連接至領導節點或運算節點,則請在您的設定中使用新的 IP 位址。例如,如果您已執行 SSH 擷取或擁有使用運算節點的 Amazon EMR 組態,請使用新的 IP 位址更新您的設定。取代節點後,系統會向新節點授與新的私有 IP 位址。

維護時段更新

檢查您的 Amazon Redshift 叢集的維護時段。在維護時段期間,您的 Amazon Redshift 叢集無法處理讀取或寫入操作。如果將維護事件排程在指定週內,此事件則會在指派的 30 分鐘維護時段期間開始。Amazon Redshift 執行維護時,任何正在進行的查詢或其他操作都會關閉。您可以從 Amazon Redshift 主控台變更已排程維護時段。

節點故障或已排程的管理任務

Amazon Redshift 主控台中,檢查事件索引標籤是否有任何節點故障或已排程的管理任務,例如叢集調整大小或重新開機。

如果發生硬體故障,Amazon Redshift 可能會在短時間內無法使用,並發生查詢失敗的情況。查詢失敗時,您會看到事件描述,如下所示:

"A hardware issue was detected on Amazon Redshift cluster [cluster name].A replacement request was initiated at [time]."

或者,如果帳戶管理員在 Amazon Redshift 叢集上已排程重新啟動或調整大小操作,則會發生間歇性連線問題。您會看到類似下列的事件描述:

"Cluster [cluster name] began restart at [time].""Cluster [cluster name] completed restart at [time]."

如需詳細資訊,請參閱 Amazon Redshift 事件類別和事件訊息

加密金鑰輪換

請檢查您的 Amazon Redshift 叢集的金鑰管理設定,以判斷您是否使用 AWS Key Management Service (AWS KMS) 金鑰加密和金鑰加密輪換

如果您的加密金鑰已開啟且正在輪換加密金鑰,則在此期間,您的 Amazon Redshift 叢集將無法使用。因此,您會收到下列錯誤訊息︰

"pg_query(): Query failed: SSL SYSCALL error: EOF detected"

金鑰輪換的頻率取決於您環境的資料安全和標準的政策。視需要經常輪換密鑰或在加密密鑰可能被洩露時輪換密鑰。此外,請確保擁有可同時支援安全性和叢集可用性需求的金鑰管理計畫。

作用中連線太多

在 Amazon Redshift 中,叢集的所有連線都會傳送至領導節點,而且作用中連線存在上限。節點類型決定了 Amazon Redshift 叢集可支援的上限,而非節點計數。

當 Amazon Redshift 叢集中存在太多作用中連線時,您會收到下列錯誤訊息:

"[Amazon](500310) Invalid operation: connection limit "500" exceeded for non-bootstrap users"

如果您在連線至 Amazon Redshift 叢集時收到操作無效錯誤,則表示您已達到連線配額。若要查看叢集作用中的連線數,請檢閱 Amazon CloudWatch 中的 DatabaseConnections 指標。

如果您注意到資料庫連線激增,則 Amazon Redshift 叢集可能存在許多閒置連線。若要檢查閒置連線的數目,請執行下列 SQL 查詢:

select process, trim(a.user_name) as user_name, a.usesysid, a.starttime,
  datediff(s,a.starttime,sysdate) as session_dur, b.last_end,
 datediff(s,case when b.last_end is not null then b.last_end else
 a.starttime end,sysdate) idle_dur
     FROM
    (select starttime,process,u.usesysid,user_name
     from stv_sessions s, pg_user u
     where
     s.user_name = u.usename
      and u.usesysid>1
and process NOT IN (select pid from stv_inflight where userid>1
 union select pid from stv_recents where status != 'Done' and
  userid>1)
    ) a
     LEFT OUTER JOIN (select
 userid,pid,max(endtime) as last_end from svl_statementtext where
  userid>1 and sequence=0 group by 1,2) b ON a.usesysid = b.userid AND
 a.process = b.pid
    WHERE (b.last_end > a.starttime OR b.last_end is null)
    ORDER BY idle_dur;

輸出看起來類似下列範例:

 process | user_name  | usesysid |      starttime      | session_dur | last_end | idle_dur
---------+------------+----------+---------------------+-------------+----------+----------
   14684 | myuser     |      100 | 2020-06-04 07:02:36 |           6 |          |        6
(1 row)

在識別閒置連線時,請使用下列命令語法關閉連線:

select pg_terminate_backend(process);

輸出看起來類似下列範例:

pg_terminate_backend ----------------------
                    1
(1 row)

領導節點的高 CPU 使用率

所有用戶端都使用領導節點連線至 Amazon Redshift 叢集。領導節點的高 CPU 使用率可能會導致間歇性連線問題。

如果嘗試連線至 Amazon Redshift 叢集,且領導節點的 CPU 使用率較高,您會收到下列錯誤訊息:

"Error setting/closing connection"

若要確認您的領導節點是否已達到高 CPU 使用率,請檢查 Amazon CloudWatch 中的 CPUUtilization 指標。如需詳細資訊,請參閱 Amazon Redshift 指標

用戶端連線問題

檢查用戶端 (例如 Workbench/J 或 PostgreSQL) 與您的 Amazon Redshift 叢集之間是否存在連線問題。如果您的用戶端嘗試從已釋出的連接埠傳送請求,則可能會發生用戶端連線重設的情況。因此,連線重設可能會導致間歇性連線問題。

若要防止這些用戶端連線問題,請考慮下列其中一個方法:

  • 使用 Amazon Redshift 中的 keepalive 功能來檢查用戶端與伺服器之間的連線是否正常運作。keepalive 功能還有助於防止任何連線連結中斷。若要檢查或設定 keepalive 的值,請參閱變更 TCP/IP 逾時設定變更 DSN 逾時設定
  • 如果您的查詢似乎正在執行,但在 SQL 用戶端工具中停止回應,請檢查最大轉換單位 (MTU)。由於封包捨棄,因此查詢可能無法顯示在 Amazon Redshift 中。當兩個 IP 主機之間的網路路徑中存在不同的 MTU 大小時,就會發生封包捨棄問題。如需有關如何管理封包捨棄問題的詳細資訊,請參閱查詢似乎停止回應,有時無法到達叢集
AWS 官方
AWS 官方已更新 1 年前