Redis による SignalR スケールアウト (SignalR 1.x)SignalR Scaleout with Redis (SignalR 1.x)

によってMike WassonPatrick Fletcherby Mike Wasson, Patrick Fletcher

Warning

このドキュメントは SignalR の最新バージョンはありません。This documentation isn't for the latest version of SignalR. 見てASP.NET Core SignalRします。Take a look at ASP.NET Core SignalR.

このチュートリアルでは使用してRedis 2 つの IIS インスタンスに配置されている SignalR アプリケーション間でメッセージを配信します。In this tutorial, you will use Redis to distribute messages across a SignalR application that is deployed on two separate IIS instances.

Redis はメモリ内のキー値ストアです。Redis is an in-memory key-value store. パブリッシュ/サブスクライブ モデルでのメッセージング システムもサポートしています。It also supports a messaging system with a publish/subscribe model. SignalR で Redis バック プレーンでは、パブリッシュ/サブスクライブ機能を使用して、他のサーバーにメッセージを転送します。The SignalR Redis backplane uses the pub/sub feature to forward messages to other servers.

このチュートリアルでは、3 台のサーバーを使用します。For this tutorial, you will use three servers:

  • SignalR アプリケーションをデプロイするのに使用する、Windows を実行している 2 台のサーバー。Two servers running Windows, which you will use to deploy a SignalR application.
  • Redis の実行に使用するには、Linux を実行しているサーバーの 1 つ。One server running Linux, which you will use to run Redis. このチュートリアルではスクリーン ショットは、Ubuntu 12.04 TLS を使用しました。For the screenshots in this tutorial, I used Ubuntu 12.04 TLS.

使用する 3 つの物理サーバーを持っていない場合は、HYPER-V で Vm を作成できます。If you don't have three physical servers to use, you can create VMs on Hyper-V. 別のオプションでは、Azure で Vm を作成します。Another option is to create VMs on Azure.

このチュートリアルでは、公式の Redis の実装はまた、 Redis のポートを Windows MSOpenTech から。Although this tutorial uses the official Redis implementation, there is also a Windows port of Redis from MSOpenTech. セットアップと構成が異なるが、それ以外の場合、手順は同じです。Setup and configuration are different, but otherwise the steps are the same.

Note

Redis による SignalR スケール アウトは、Redis クラスターをサポートしていません。SignalR scaleout with Redis does not support Redis clusters.

概要Overview

詳細なチュートリアルを始める前に、作業内容の簡単な概要を示します。Before we get to the detailed tutorial, here is a quick overview of what you will do.

  1. Redis をインストールし、Redis サーバーを起動します。Install Redis and start the Redis server.

  2. これらの NuGet パッケージをアプリケーションに追加します。Add these NuGet packages to your application:

  3. SignalR アプリケーションを作成します。Create a SignalR application.

  4. Global.asax バック プレーンを構成するには、次のコードを追加します。Add the following code to Global.asax to configure the backplane:

    protected void Application_Start()
    {
        GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

Hyper V 上の UbuntuUbuntu on Hyper-V

Windows HYPER-V を使用して、Windows Server 上の Ubuntu VM を簡単に作成できます。Using Windows Hyper-V, you can easily create an Ubuntu VM on Windows Server.

ISO をダウンロードする Ubuntu から http://www.ubuntu.comします。Download the Ubuntu ISO from http://www.ubuntu.com.

HYPER-V では、新しい VM を追加します。In Hyper-V, add a new VM. 仮想ハード_ディスクの接続手順で、仮想ハード ディスクを作成するします。In the Connect Virtual Hard Disk step, select Create a virtual hard disk.

インストール オプション手順で、イメージ ファイル (.iso)、 をクリックして参照Ubuntu のインストール ISO を参照します。In the Installation Options step, select Image file (.iso), click Browse, and browse to the Ubuntu installation ISO.

Redis をインストールします。Install Redis

手順に従う http://redis.io/download をダウンロードして、Redis をビルドします。Follow the steps at http://redis.io/download to download and build Redis.

wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make

Redis バイナリ ビルド、srcディレクトリ。This builds the Redis binaries in the src directory.

既定では、Redis では、パスワードは必要ありません。By default, Redis does not require a password. パスワードを設定するには、編集、redis.confファイルで、ソース コードのルート ディレクトリにあります。To set a password, edit the redis.conf file, which is located in the root directory of the source code. (バックアップ コピーを作成、ファイルの編集する前に!)次のディレクティブを追加redis.conf:(Make a backup copy of the file before you edit it!) Add the following directive to redis.conf:

requirepass YourStrongPassword1234

Redis サーバーを今すぐ開始するには。Now start the Redis server:

src/redis-server redis.conf

Redis の既定のポートが開かれたポート 6379 をリッスンします。Open port 6379, which is the default port that Redis listens on. (構成ファイルでポート番号を変更できます)。(You can change the port number in the configuration file.)

SignalR アプリケーションを作成します。Create the SignalR Application

これらのチュートリアルのいずれかを次で SignalR アプリケーションを作成します。Create a SignalR application by following either of these tutorials:

次に、私たち Redis によるスケール アウトをサポートするために、チャット アプリケーションを変更します。Next, we'll modify the chat application to support scaleout with Redis. まず、SignalR.Redis NuGet パッケージをプロジェクトに追加します。First, add the SignalR.Redis NuGet package to your project. Visual Studio から、ツールメニューの NuGet パッケージ マネージャーを選択し、パッケージ マネージャー コンソールします。In Visual Studio, from the Tools menu, select NuGet Package Manager, then select Package Manager Console. パッケージ マネージャー コンソール ウィンドウで、次のコマンドを入力します。In the Package Manager Console window, enter the following command:

Install-Package Microsoft.AspNet.SignalR.Redis

次に、Global.asax ファイルを開きます。Next, open the Global.asax file. 次のコードを追加、アプリケーション_開始メソッド。Add the following code to the Application_Start method:

protected void Application_Start()
{
    GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");

    RouteTable.Routes.MapHubs();
}
  • "server"は、Redis を実行しているサーバーの名前です。"server" is the name of the server that is running Redis.
  • ポートポート番号port is the port number
  • "password"では、redis.conf についてファイルで定義されているパスワードです。"password" is the password that you defined in the redis.conf file.
  • "AppName"は、任意の文字列です。"AppName" is any string. SignalR では、この名前の Redis のパブリッシュ/サブスクライブ チャンネルを作成します。SignalR creates a Redis pub/sub channel with this name.

例:For example:

GlobalHost.DependencyResolver.UseRedis("redis-server.cloudapp.net", 6379,
    "MyStrongPassword1234", "ChatApp");

展開し、アプリケーションを実行Deploy and Run the Application

SignalR アプリケーションをデプロイするには、Windows Server インスタンスを準備します。Prepare your Windows Server instances to deploy the SignalR application.

IIS の役割を追加します。Add the IIS role. WebSocket プロトコルを含む、「アプリケーションの開発」機能が含まれます。Include "Application Development" features, including the WebSocket Protocol.

管理サービス ([管理ツール] の下に表示) とも含まれます。Also include the Management Service (listed under "Management Tools").

インストール Web Deploy 3.0 です。Install Web Deploy 3.0. IIS マネージャーを実行するとき、Microsoft Web プラットフォームをインストールするように求められますできますインストーラーをダウンロードします。When you run IIS Manager, it will prompt you to install Microsoft Web Platform, or you can download the installer. プラットフォーム インストーラーで Web Deploy を検索し、Web Deploy 3.0 をインストールIn the Platform Installer, search for Web Deploy and install Web Deploy 3.0

Web 管理サービスが実行されていることを確認します。Check that the Web Management Service is running. それ以外の場合は、サービスを開始します。If not, start the service. (Web 管理サービスで Windows サービスの一覧が表示されない場合は、IIS の役割を追加したときに、管理サービスがインストールされていることを確認)。(If you don't see Web Management Service in the list of Windows services, make sure that you installed the Management Service when you added the IIS role.)

既定では、Web 管理サービスは TCP ポート 8172 でリッスンします。By default, the Web Management Service listens on TCP port 8172. Windows ファイアウォールでポート 8172 で TCP トラフィックを許可する場合は、新しい受信規則を作成します。In Windows Firewall, create a new inbound rule to allow TCP traffic on port 8172. 詳細については、次を参照してください。ファイアウォール規則を構成するします。For more information, see Configuring Firewall Rules. (Azure 上の Vm をホストしている場合はこれを行う、Azure portal で直接します。(If you are hosting the VMs on Azure, you can do this directly in the Azure portal. 参照してください仮想マシンにエンドポイントを設定する方法)。See How to Set Up Endpoints to a Virtual Machine.)

サーバーに、開発コンピューターから Visual Studio プロジェクトを配置する準備が整いました。Now you are ready to deploy the Visual Studio project from your development machine to the server. ソリューション エクスプ ローラーでソリューションを右クリックし、をクリックして発行します。In Solution Explorer, right-click the solution and click Publish.

Web デプロイに関するドキュメントの詳細を参照してください。 for Visual Studio および ASP.NET の Web 配置コンテンツ マップします。For more detailed documentation about web deployment, see Web Deployment Content Map for Visual Studio and ASP.NET.

2 つのサーバー アプリケーションをデプロイする場合は、別のブラウザー ウィンドウで各インスタンスを開くし、もう一方の SignalR メッセージを受信互いを参照してください。If you deploy the application to two servers, you can open each instance in a separate browser window and see that they each receive SignalR messages from the other. (もちろん、実稼働環境で 2 つのサーバー放置ロード バランサーの背後にします。)(Of course, in a production environment, the two servers would sit behind a load balancer.)

使用することができます、Redis に送信されるメッセージを表示する関心がある場合、 redis cliクライアントで、Redis と共にインストールされます。If you're curious to see the messages that are sent to Redis, you can use the redis-cli client, which installs with Redis.

redis-cli -a password
SUBSCRIBE ChatApp