本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 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_ 機器\ 系統\ 設定\ 服務\ Tcpip\ 參數下編輯下列登錄設定的值:CurrentControl
-
KeepAlive時間:3 萬
-
KeepAlive間隔:
-
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 檔案中新增或修改下列參數:
- KeepAlives伯爵
-
在認為連線已中斷之前可遺失的 TCP 保持連線封包數。
- KeepAlives閒置
-
驅動程式傳送 TCP 保持連線封包之前的閒置秒數。
- KeepAlives間隔
-
每一次 TCP 保持連線重新傳輸之間的秒數。
在 Windows 上,您可以在登錄中的 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\your_DSN
中新增或變更機碼,以修改這些參數。在 Linux 和 macOS 上,您直接在 odbc.ini 檔案中的目標 DSN 項目中新增或修改這些參數。如需在 Linux 和 macOS 電腦上修改 odbc.ini 檔案的相關資訊,請參閱使用 ODBC 驅動程式管理員來設定 Linux 和 macOS X 作業系統上的驅動程式。
如果這些參數不存在,或值為 0,系統會使用指定給 TCP/IP 的保持連線參數,以決定 DSN 保持連線行為。在 Windows 上,您可以在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
的登錄中找到 TCP/IP 參數。在 Linux 和 macOS 上,您可以在 sysctl.conf 檔案中找到 TCP/IP 參數。