ADC

リモートデスクトッププロトコルサーバーの負荷分散

リモートデスクトッププロトコル (RDP) はマルチチャネル対応のプロトコルで、プレゼンテーションデータ、シリアルデバイス通信、ライセンス情報、高度に暗号化されたデータ (キーボードとマウスの操作) などを転送するための個別の仮想チャネルを可能にします。

RDP は、ネットワーク上の別のコンピュータに GUI を提供するために使用されます。RDP は Windows ターミナルサーバーで使用され、低帯域幅の接続でもマウスの動きやキーの押下をほぼリアルタイムで送信し、高速アクセスを実現します。

リモートデスクトップサービスを提供するために複数のターミナルサーバーを展開する場合、NetScalerアプライアンスはターミナルサーバー(Windows 2003および2008 Server Enterprise Edition)の負荷分散を行います。アプリケーションにリモートでアクセスしているユーザーが、アプリケーションをリモートマシンで実行したままにして、ローカルマシンをシャットダウンしたい場合があります。したがって、ユーザはリモートアプリケーションからログアウトせずにローカルアプリケーションを閉じます。リモートマシンに再接続した後、ユーザーはリモートアプリケーションを続行できる必要があります。この機能を提供するために、NetScaler RDP実装では、ターミナルサービスセッションディレクトリまたはブローカーによって設定されたルーティングトークン(Cookie)が優先されるため、クライアントは以前に接続されていたターミナルサーバーに再接続できます。Windows 2003 ターミナルサーバーに実装されたセッションディレクトリは、Windows 2008 ターミナルサーバーではブローカーと呼ばれます。

クライアントと負荷分散仮想サーバー間でTCP接続が確立されると、NetScalerは指定された負荷分散方法を適用し、要求をいずれかのターミナルサーバーに転送します。ターミナルサーバーはセッションディレクトリをチェックして、クライアントのセッションがドメイン内の他のターミナルサーバーで実行されているかどうかを判断します。

他のターミナルサーバーにアクティブなセッションがない場合、ターミナルサーバーはクライアント要求を処理して応答し、Citrix ADCアプライアンスはクライアントに応答を転送します。

他のターミナルサーバーにアクティブなセッションがある場合、要求を受信するターミナルサーバーはアクティブなセッションの詳細を含むクッキー(ルーティングトークンと呼ばれる)を挿入し、パケットをCitrix ADCアプライアンスに返し、パケットをクライアントに返します。サーバーはクライアントとの接続を閉じます。クライアントが接続を再試行すると、NetScalerはCookie 情報を読み取り、クライアントのセッションがアクティブなターミナルサーバーにパケットを転送します。

クライアントマシン上のユーザーにはサービスが継続されるため、特別なアクションを実行する必要はありません。

注:Windows セッションディレクトリ機能には、Windows XP で最初にリリースされたリモートデスクトップクライアントが必要です。Windows 2000 または Windows NT 4.0 ターミナルサーバクライアントとのセッションが切断され、クライアントが再接続すると、接続を確立するサーバが負荷分散アルゴリズムによって選択されます。

次の図は、RDP 負荷分散を示しています。

図1:RDP の負荷分散トポロジー

RDP トポロジー

  • RDP サービスを設定すると、ルーティングトークンを使用して永続性が自動的に維持されます。永続性を明示的に有効にする必要はありません。
  • NetScalerアプライアンスはIPベースのクッキーのみをサポートします。
  • nsrdp.pl スクリプトは、現在のバージョンの Windows サーバではサポートされていません。

RDP セッションがログアウトせずに切断された場合に 2 つのターミナルサーバー間でフラッピングが発生しないように、切断された RDP セッションがバックエンドのターミナルサーバーでクリアされていることを確認してください。詳しくは、https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc758177(v=ws.10)#BKMK_2を参照してください。

RDPサービスを追加すると、NetScalerはデフォルトでTCPタイプのモニターを追加し、サービスにバインドします。デフォルトモニターは、RDP サービスに指定されたサーバーの 3389 ポートにリスニングプロセスが存在するかどうかをチェックする単純な TCP モニターです。3389でリスニングプロセスがある場合、NetScalerはこのサービスを稼働中としてマークし、リスニングプロセスがない場合はサービスを停止中とマークします。

RDP サービスをより効率的に監視するために、デフォルトのモニターに加えて、RDP プロトコル用のスクリプトモニターを構成できます。スクリプトモニターを構成すると、NetScalerは指定されたサーバーへのTCP接続を開き、RDPパケットを送信します。モニターは、物理サーバーから接続の確認を受け取った場合にのみ、サービスを UP とマークします。そのため、NetScalerはスクリプトモニターから、RDPサービスがリクエストを処理する準備ができているかどうかを知ることができます。

モニターはユーザータイプのモニターで、スクリプトはNetScalerの/nsconfig/monitors/nsrdp.plにあります。ユーザーモニターを構成すると、NetScalerはスクリプトを自動的に実行します。スクリプトモニターを設定するには、モニターを追加して RDP サービスにバインドします。

RDP 負荷分散を設定するには、RDP タイプのサービスを作成し、RDP 仮想サーバーにバインドします。

コマンドラインインターフェイスを使用して RDP 負荷分散サービスを構成するには

コマンドプロンプトで次のコマンドを入力して RDP 負荷分散セットアップを構成し、構成を確認します。

add service <name>@ <serverName> <serviceType> <port>
<!--NeedCopy-->

注:サービスをさらに追加するには、前述のコマンドを繰り返します。


> add service ser1 10.102.27.182 RDP 3389
Done
> add service ser2 10.102.27.183 RDP 3389
Done
>show service ser1
ser1 (10.102. 27.182:3389) - RDP
        State: UP
…
            Server Name: 10.102.27.182
            Server ID : 0           Monitor Threshold : 0
        Down state flush: ENABLED
…
1)      Monitor Name: tcp-default
                State: UP       Weight: 1
…
                Response Time: 4.152 millisec
 Done
<!--NeedCopy-->

構成ユーティリティを使用して RDP 負荷分散サービスを構成するには

[ トラフィック管理] > [負荷分散] > [サービス] に移動し、RDP タイプのサービスを作成します。

コマンドラインインターフェイスを使用して RDP 負荷分散仮想サーバーを構成するには

コマンドプロンプトで次のコマンドを入力して RDP 負荷分散仮想サーバーを構成し、構成を確認します。

add lb vserver <name>@ <serviceType> <ipAddress> <port>

bind lb vserver <name>@ <serviceName>

Bind all the RDP services to be load balanced to the virtual server.
<!--NeedCopy-->

例:

この例では、2 つの RDP サービスが RDP 仮想サーバーにバインドされています。


add lb vs v1 rdP 10.102.27.186 3389
Done

bind lb vs v1 ser1
service "ser1" bound

bind lb vs v1 ser2
service "ser2" bound
Done

sh lb vs v1
v1 (10.102.27.186:3389) - RDP   Type: ADDRESS
State: UP
…
No. of Bound Services :  2 (Total)       2 (Active)
Configured Method: LEASTCONNECTION
  Current Method: Round Robin, Reason: A new service is bound
Mode: IP
Persistence: NONE
  L2Conn: OFF

1) ser1 (10.102.27.182: 3389) - RDPState: UP   Weight: 1
2) ser2 (10.102.27.183: 3389) - RDPState: UP   Weight: 1
Done
<!--NeedCopy-->

構成ユーティリティを使用して RDP 負荷分散仮想サーバーを構成するには

[ トラフィック管理] > [負荷分散] > [仮想サーバー] に移動し、RDP タイプの仮想サーバーを作成し、RDP サービスをこの仮想サーバーにバインドします。

コマンドラインインターフェイスを使用して RDP サービスのスクリプトモニターを構成するには

コマンドプロンプトで、次のコマンドを入力します。

add lb monitor <monitorName> USER -scriptName nsrdp.pl

bind lb monitor <monitorName> <rdpServiceName>
<!--NeedCopy-->

例:

add service ser1 10.102.27.182 RDP 3389

add lb monitor RDP_MON USER -scriptName nsrdp.pl

bind lb monitor RDP_MON ser1

<!--NeedCopy-->

構成ユーティリティを使用して RDP サービスのスクリプトモニターを構成するには

  1. [ トラフィック管理] > [負荷分散] > [モニター] に移動し、USER タイプのモニターを作成します。
  2. 「特殊パラメータ」の「スクリプト名」リストで「nsrdp.pl」を選択し、このモニターをRDPサービスにバインドします。