Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
為什麼會遇到 Amazon Redshift 叢集間歇性連線問題?
我想要了解如何疑難排解並解決我遇到的 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 大小時,就會發生封包捨棄問題。如需有關如何管理封包捨棄問題的詳細資訊,請參閱查詢似乎停止回應,有時無法到達叢集。

相關內容
- 已提問 7 個月前lg...
- 已提問 2 年前lg...
- 已提問 2 年前lg...
- 已提問 3 個月前lg...