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

3 分的閱讀內容
0

嘗試連接至 Amazon Redshift 叢集時,遇到間歇性連線問題。為什麼會發生這種情況,該如何對此問題進行疑難排解?

簡短說明

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 (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 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 官方已更新 3 年前