從 Amazon 外部連接 EC2-防火牆超時問題 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

從 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 參數可以在系統文件中找到。