本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 Amazon 外部連接 EC2-防火牆超時問題
問題範例
執行長查詢 (例如COPY命令) 時,您與資料庫的用戶端連線似乎停止或逾時。在此情況下,您可能會發現 Amazon Redshift 主控台顯示查詢已完成,但用戶端工具本身仍似乎在執行查詢。取決於連線停止的時間,查詢的結果可能遺漏或不完整。
可能的解決方案
當您從 Amazon EC2 執行個體以外的機器連接到 Amazon Redshift 時,就會發生此問題。在此情況下,閒置連線會在閒置一段時間後由中繼網路元件 (例如防火牆) 終止。 當您從虛擬私人網路 (VPN) 或區域網路登入時,這是一般情況。
為了避免這些逾時,建議採取下列變更:
-
增加處理 TCP /IP 逾時的用戶端系統值。請在您用來連接至叢集的電腦上進行這些變更。應該依您的用戶端和網路來調整逾時期間。如需詳細資訊,請參閱變更 TCP /IP 逾時設定。
-
(可選)在DSN級別設置保持活動行為。如需詳細資訊,請參閱變更DSN逾時設定。
變更 TCP /IP 逾時設定
若要變更 TCP /IP 逾時設定,請根據您用來連線到叢集的作業系統來設定逾時設定。
-
Linux — 如果用戶端在 Linux 上執行,請以根使用者身分執行下列命令,以變更目前工作階段的逾時設定:
/sbin/sysctl -w net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5
若要保留設定,請使用下列值建立或修改
/etc/sysctl.conf
檔案,然後重新啟動系統。net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5
-
視窗 — 如果您的用戶端是在 Windows 上執行,請在 HKEY _ LOCAL _MACHINE\\\ 服務\ Tcpip SYSTEMCurrentControlSet\ 參數下編輯下列登錄設定的值:
-
KeepAliveTime: 30000
-
KeepAliveInterval: 1000
-
TcpMaxDataRetransmissions:
這些設定會使用DWORD資料類型。如果這些設定不存在於登錄路徑下,您可以建立設定並指定這些建議值。如需編輯 Windows 登錄的相關資訊,請參閱 Windows 文件。
設定這些值之後,請重新啟動電腦以讓變更生效。
-
-
Mac — 如果用戶端在 Mac 上執行,請執行下列命令,以變更目前工作階段的逾時設定:
sudo sysctl net.inet.tcp.keepintvl=200000 sudo sysctl net.inet.tcp.keepidle=200000 sudo sysctl net.inet.tcp.keepinit=200000 sudo sysctl net.inet.tcp.always_keepalive=1
若要保留設定,請使用下列值建立或修改
/etc/sysctl.conf
檔案:net.inet.tcp.keepidle=200000 net.inet.tcp.keepintvl=200000 net.inet.tcp.keepinit=200000 net.inet.tcp.always_keepalive=1
重新啟動電腦,然後執行下列命令,以驗證是否已設定這些值。
sysctl net.inet.tcp.keepidle sysctl net.inet.tcp.keepintvl sysctl net.inet.tcp.keepinit sysctl net.inet.tcp.always_keepalive
變更DSN逾時設定
如果您選擇,您可以在DSN級別上設置保持活動行為。在作法上是在 odbc.ini 檔案中新增或修改下列參數:
- KeepAlivesCount
-
在連線被視為中斷之前,可能遺失的 TCP keepalive 封包數目。
- KeepAlivesIdle
-
驅動程式傳送 TCP keepalive 封包之前的閒置秒數。
- KeepAlivesInterval
-
每次TCP保持活動重新傳輸之間的秒數。
如果這些參數不存在,或者它們的值為 0,則系統會使用為 TCP /IP 指定的保持活動參數來判斷DSN保持活動行為。在視窗上,您可以在的登錄中找到 TCP /IP 參數。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
在 Linux 和 macOS 上,您可以找到 TCP /IP 參數可以在系統文件中找到。