Redis로 SignalR 규모 확장SignalR Scaleout with Redis

Mike Wassonby Mike Wasson

Warning

이 설명서는 최신 버전의 SignalR에는 적합 하지 않습니다.This documentation isn't for the latest version of SignalR. ASP.NET Core SignalR를 살펴보세요.Take a look at ASP.NET Core SignalR.

이 항목에서 사용 되는 소프트웨어 버전Software versions used in this topic

이 항목의 이전 버전Previous versions of this topic

이전 버전의 SignalR에 대 한 자세한 내용은 SignalR 이전 버전을 참조 하세요.For information about earlier versions of SignalR, see SignalR Older Versions.

질문 및 설명Questions and comments

이 자습서와 페이지 맨 아래에 있는 의견에서 개선할 수 있는 방법에 대 한 의견을 남겨 주세요.Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. 자습서와 직접 관련 되지 않은 질문이 있는 경우 ASP.NET SignalR 포럼 또는 StackOverflow.com에 게시할 수 있습니다.If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or StackOverflow.com.

이 자습서에서는 Redis 를 사용 하 여 별도의 두 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 후면판은 pub/sub 기능을 사용 하 여 메시지를 다른 서버로 전달 합니다.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를 실행 하는 두 대의 서버Two servers running Windows, which you will use to deploy a SignalR application.
  • Redis를 실행 하는 데 사용할 Linux를 실행 하는 하나의 서버.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.

사용할 물리적 서버가 세 대 이상 없는 경우 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 구현을 사용 하지만 MSOpenTech에서 Redis의 Windows 포트 도 있습니다.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

SignalR 확장 with Redis는 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. Startup.cs에 다음 코드를 추가 하 여 후면판을 구성 합니다.Add the following code to Startup.cs to configure the backplane:

    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의 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.

http://www.ubuntu.com에서 Ubuntu ISO를 다운로드 합니다.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

그러면 src 디렉터리에 Redis 바이너리가 빌드됩니다.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. 먼저 Microsoft.AspNet.SignalR.StackExchangeRedis NuGet 패키지를 프로젝트에 추가 합니다.First, add the Microsoft.AspNet.SignalR.StackExchangeRedis 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.StackExchangeRedis

그런 다음 Startup.cs 파일을 엽니다.Next, open the Startup.cs file. 구성 메서드에 다음 코드를 추가 합니다.Add the following code to the Configuration method:

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를 실행 하는 서버의 이름입니다."server" is the name of the server that is running Redis.
  • 포트 는 포트 번호입니다.port is the port number
  • "password"는 redis 파일에서 정의한 암호입니다."password" is the password that you defined in the redis.conf file.
  • "AppName"은 임의의 문자열입니다."AppName" is any string. SignalR는이 이름을 사용 하 여 Redis pub/sub 채널을 만듭니다.SignalR creates a Redis pub/sub channel with this name.

다음은 그 예입니다.For example:

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

응용 프로그램 배포 및 실행Deploy and Run the Application

Windows Server 인스턴스를 준비 하 여 SignalR 응용 프로그램을 배포 합니다.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").

웹 배포 3.0을 설치 합니다.Install Web Deploy 3.0. IIS 관리자를 실행 하는 경우 Microsoft 웹 플랫폼을 설치 하 라는 메시지가 표시 되거나 설치 관리자를 다운로드할수 있습니다.When you run IIS Manager, it will prompt you to install Microsoft Web Platform, or you can download the installer. 플랫폼 설치 관리자에서 웹 배포을 검색 하 고 웹 배포 3.0를 설치 합니다.In the Platform Installer, search for Web Deploy and install Web Deploy 3.0

웹 관리 서비스가 실행 중인지 확인 합니다.Check that the Web Management Service is running. 그렇지 않은 경우 서비스를 시작 합니다.If not, start the service. 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.)

기본적으로 웹 관리 서비스는 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.

웹 배포에 대 한 자세한 설명서는 Visual Studio 및 ASP.NET 용 웹 배포 콘텐츠 맵을 참조 하세요.For more detailed documentation about web deployment, see Web Deployment Content Map for Visual Studio and ASP.NET.

두 개의 서버에 응용 프로그램을 배포 하는 경우 별도의 브라우저 창에서 각 인스턴스를 열 수 있으며 각 인스턴스는 서로 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. 물론 프로덕션 환경에서는 두 서버가 부하 분산 장치 뒤에 앉아 있습니다.(Of course, in a production environment, the two servers would sit behind a load balancer.)

Redis로 전송 되는 메시지를 확인 하는 방법에 대 한 자세한 내용은 Redis와 함께 설치 되는 Redis cli 클라이언트를 사용할 수 있습니다.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