Share via


Redis による SignalR スケールアウト

警告

このドキュメントは、SignalR の最新バージョン用ではありません。 SignalR の ASP.NET Coreを見てみましょう。

このトピックで使用するソフトウェアのバージョン

このトピックの以前のバージョン

SignalR の以前のバージョンの詳細については、「 SignalR の古いバージョン」を参照してください。

質問とコメント

このチュートリアルが気に入った方法と、ページの下部にあるコメントで改善できる内容に関するフィードバックをお寄せください。 チュートリアルに直接関連しない質問がある場合は、 ASP.NET SignalR フォーラム または StackOverflow.com に投稿できます。

このチュートリアルでは、 Redis を使用して、2 つの個別の IIS インスタンスにデプロイされた SignalR アプリケーション全体にメッセージを配布します。

Redis は、メモリ内のキーと値のストアです。 また、パブリッシュ/サブスクライブ モデルを使用したメッセージング システムもサポートしています。 SignalR Redis バックプレーンは、pub/sub 機能を使用して他のサーバーにメッセージを転送します。

Redis Server から V M に、次にコンピューターに向かう矢印を示す図。[発行] というラベルが付いた 1 つの矢印が、V M から Redis Server に移動します。

このチュートリアルでは、次の 3 つのサーバーを使用します。

  • Windows を実行している 2 つのサーバー。SignalR アプリケーションのデプロイに使用します。
  • Linux を実行している 1 つのサーバー。Redis の実行に使用します。 このチュートリアルのスクリーンショットでは、Ubuntu 12.04 TLS を使用しました。

使用する物理サーバーが 3 台ない場合は、Hyper-V 上に VM を作成できます。 もう 1 つのオプションは、Azure に VM を作成することです。

このチュートリアルでは公式の Redis 実装を使用しますが、MSOpenTech からの Redis の Windows ポート もあります。 セットアップと構成は異なりますが、それ以外の場合は手順は同じです。

注意

Redis を使用した SignalR スケールアウトでは、Redis クラスターはサポートされていません。

概要

詳細なチュートリアルに進む前に、以下に、実行する操作の概要を示します。

  1. Redis をインストールし、Redis サーバーを起動します。

  2. 次の NuGet パッケージをアプリケーションに追加します。

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

  4. 次のコードを Startup.cs に追加して、バックプレーンを構成します。

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
            app.MapSignalR();
        }
    }
    

Hyper-V 上の Ubuntu

Windows Hyper-V を使用すると、Windows Server 上に Ubuntu VM を簡単に作成できます。

から http://www.ubuntu.comUbuntu ISO をダウンロードします。

Hyper-V で、新しい VM を追加します。 [ 仮想ハード ディスクの接続 ] ステップで、[ 仮想ハード ディスクの作成] を選択します。

[仮想マシンの新規作成ウィザード] ダイアログ ボックスを示すスクリーンショット。[仮想ハード ディスクの接続] と [仮想ハード ディスクの作成] が選択されています。

[ インストール オプション] ステップで、[ イメージ ファイル (.iso)] を選択し、[ 参照] をクリックして、Ubuntu インストール ISO を参照します。

[インストール オプション] ページの [新しい仮想マシン ウィザード] を示すスクリーンショット。ブート C D D V D ROM から OS をインストールし、イメージ ファイルのドット i s o が選択されています。

Redis をインストールする

Redis をダウンロードしてビルドするには、 の http://redis.io/download 手順に従います。

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 ビルドされます。

既定では、Redis にはパスワードは必要ありません。 パスワードを設定するには、ソース コードの redis.conf ルート ディレクトリにあるファイルを編集します。 (編集する前にファイルのバックアップ コピーを作成してください)。に次のディレクティブを redis.conf追加します。

requirepass YourStrongPassword1234

次に、Redis サーバーを起動します。

src/redis-server redis.conf

Redis サーバーの [メイン] ページを示すスクリーンショット。

Redis がリッスンする既定のポートであるポート 6379 を開きます。 (構成ファイルでポート番号を変更できます)。

SignalR アプリケーションを作成する

次のいずれかのチュートリアルに従って SignalR アプリケーションを作成します。

次に、Redis でのスケールアウトをサポートするようにチャット アプリケーションを変更します。 まず、NuGet パッケージを Microsoft.AspNet.SignalR.StackExchangeRedis プロジェクトに追加します。 Visual Studio の [ツール ] メニューから [ NuGet パッケージ マネージャー] を選択し、[ パッケージ マネージャー コンソール] を選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

次に、Startup.cs ファイルを開きます。 Configuration メソッドに次のコードを追加します。

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
        app.MapSignalR();
    }
}
  • "server" は、Redis を実行しているサーバーの名前です。
  • port はポート番号です
  • "password" は、redis.conf ファイルで定義したパスワードです。
  • "AppName" は任意の文字列です。 SignalR は、この名前の Redis pub/sub チャネルを作成します。

次に例を示します。

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

アプリケーションのデプロイと実行

SignalR アプリケーションをデプロイするために Windows Server インスタンスを準備します。

IIS ロールを追加します。 WebSocket プロトコルを含む "アプリケーション開発" 機能を含めます。

役割と機能の追加ウィザードを示すスクリーンショット。[サーバー ロール] と [WebSocket プロトコル] が選択されています。

管理サービスも含めます ([管理ツール] の下に表示されます)。

役割と機能の追加ウィザードを示すスクリーンショット。[管理サービス] が選択されています。

Web Deploy 3.0 をインストールします。 IIS マネージャーを実行すると、Microsoft Web Platformのインストールを求めるメッセージが表示されるか、インストーラーをダウンロードできます。 プラットフォーム インストーラーで、Web 配置を検索し、Web 配置 3.0 をインストールします

[Web プラットフォーム インストーラー 4 ポイント 5] ダイアログ ボックスを示すスクリーンショット。[Web 配置 3 ポイント 0] が選択されています。

Web 管理サービスが実行されていることを確認します。 そうでない場合は、サービスを開始します。 (Windows サービスの一覧に Web 管理サービスが表示されない場合は、IIS ロールを追加したときに管理サービスがインストールされていることを確認してください)。

既定では、Web 管理サービスは TCP ポート 8172 でリッスンします。 Windows ファイアウォールで、ポート 8172 で TCP トラフィックを許可する新しい受信規則を作成します。 詳細については、「 ファイアウォール規則の構成」を参照してください。 (Azure で VM をホストしている場合は、Azure portalで直接これを行うことができます。「仮想マシンにエンドポイントを設定する方法」を参照してください)。

これで、開発用コンピューターからサーバーに Visual Studio プロジェクトをデプロイする準備ができました。 ソリューション エクスプローラーで、ソリューションを右クリックし、[発行] をクリックします。

Web 配置の詳細なドキュメントについては、「 Visual Studio と ASP.NET 用の Web 配置コンテンツ マップ」を参照してください。

アプリケーションを 2 つのサーバーにデプロイする場合は、個別のブラウザー ウィンドウで各インスタンスを開き、それぞれがもう一方から SignalR メッセージを受信することを確認できます。 (もちろん、運用環境では、2 つのサーバーはロード バランサーの背後に置かれていたことになります)。

2 つのサーバーにデプロイされたアプリケーションを示す 2 つのブラウザー ウィンドウが開いているスクリーンショット。

Redis に送信されるメッセージを確認したい場合は、Redis と共にインストールされる redis-cli クライアントを使用できます。

redis-cli -a password
SUBSCRIBE ChatApp

Redis ウィンドウの番号付きリストを示すスクリーンショット。