メニュー
Amazon Redshift
管理ガイド (API Version 2012-12-01)

Amazon EC2 以外から接続する — ファイアウォールタイムアウトの問題

問題の例

COPY コマンドなどの長いクエリを実行すると、データベースへのクライアント接続がハングまたはタイムアウトしているように見えます。この場合、Amazon Redshift consoleにはクエリが完了したと表示されますが、クライアントツール自体はまだクエリを実行しているように見えることがあります。接続がいつ停止したかに応じて、クエリの結果がないか、不完全になる可能性があります。

考えられる解決策

これは、Amazon EC2 インスタンス以外のコンピューターから Amazon Redshift に接続し、一定期間アイドル状態が続いて、介在するネットワークコンポーネント (ファイアウォールなど) によってアイドル接続が停止されたときに生じます。このような動作は、Virtual Private Network (VPN) やローカルネットワークからログインした場合によく発生します。

このようなタイムアウトを回避するために以下の変更を行うことを推奨します。

  • クライアントシステムで TCP/IP タイムアウト値を大きく設定します。この変更は、クラスターへの接続に使用しているコンピューターで行います。クライアントやネットワークに対してタイムアウト期間を調整する必要があります。「TCP/IP タイムアウト設定を変更するには」を参照してください。

  • 必要に応じて、DSN レベルでキープアライブの動作を設定します。「DSN のタイムアウト設定を変更するには」を参照してください。

TCP/IP タイムアウト設定を変更するには

  • クラスターへの接続に使用するオペレーティングシステムに応じて、タイムアウトを設定します。

    1. Linux — クライアントが Linux で動作している場合は、次のコマンドを root ユーザーとして実行し、現在のセッションのタイムアウト設定を変更します。

      Copy
      /sbin/sysctl -w net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5

      設定を保持するには、次の値を使ってファイル /etc/sysctl.conf を作成または変更し、システムを再起動します。

      Copy
      net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5

    2. Windows — クライアントが Windows で動作している場合、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ にある次のレジストリ設定の値を編集します。

      • KeepAliveTime: 30000

      • KeepAliveInterval: 1000

      • TcpMaxDataRetransmissions: 10

      これらの設定は DWORD のデータの種類を使用します。これらがレジストリパスに存在しない場合、設定を作成し、これらの推奨値を指定できます。Windows レジストリの編集の詳細については、Windows のドキュメントを参照してください。

      これらの値を設定したら、コンピューターを再起動して変更を有効にします。

    3. Mac — クライアントが Mac で動作している場合は、次のコマンドを実行して現在のセッションのタイムアウト設定を変更します。

      Copy
      sudo sysctl net.inet.tcp.keepintvl=20000 sudo sysctl net.inet.tcp.keepidle=20000 sudo sysctl net.inet.tcp.keepinit=20000 sudo sysctl net.inet.tcp.always_keepalive=1

      設定を保持するには、次の値を使ってファイル /etc/sysctl.conf を作成または変更します。

      Copy
      net.inet.tcp.keepidle=20000 net.inet.tcp.keepintvl=20000 net.inet.tcp.keepinit=20000 net.inet.tcp.always_keepalive=1
      コンピュータを再起動し、次のコマンドを実行して、値が設定されていることを確認します。
      Copy
      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 キープアライブパケットの数。

KeepAlivesIdle

ドライバーが TCP キープアライブパケットを送信する前にアイドル状態である秒数。

KeepAlivesInterval

TCP キープアライブを再送信する間隔の秒数。

Windows では、HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\使用する DSN でキーを追加または変更することによって、レジストリのこれらのパラメータを変更します。Linux および Mac OS では、直接 odbc.ini ファイルでターゲットの DSN エントリのこれらのパラメータを追加または変更します。Linux および Mac OS コンピューターで odbc.ini ファイルを編集する方法の詳細については、「Linux および Mac OS X オペレーティングシステムで ODBC ドライバーを設定する」を参照してください。

これらのパラメータがない場合、または値が 0 である場合、システムは指定されている TCP/IP キープアライブパラメータを使用して DSN キープアライブの動作を決定します。Windows では、TCP/IP のパラメータは HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ のレジストリにあります。Linux および Mac OS では、TCP/IP のパラメータは sysctl.conf ファイルにあります。