고가용성 및 확장성 달성 - ARR 및 NLB
작성자: Won Yoo
고가용성 및 확장성 달성:
IIS 7.0 이상용 Microsoft ARR(애플리케이션 요청 라우팅) 및 NLB(네트워크 부하 분산).
Microsoft Corporation |
---|
저자: 아메드 비슈트, 원 유 |
게시 날짜: 2008년 11월 13일 |
요약
이 문서에서는 고가용성 및 확장성을 달성하기 위해 ARR(애플리케이션 요청 라우팅)을 NLB(네트워크 부하 분산)와 함께 사용하는 방법에 대한 규범적인 지침을 제공합니다.
개요
IIS 7.0 이상용 Microsoft ARR(애플리케이션 요청 라우팅)은 HTTP 헤더, 서버 변수 및 부하 분산 알고리즘을 기반으로 콘텐츠 서버에 HTTP 요청을 전달하는 프록시 기반 라우팅 모듈입니다. 일반적인 ARR 배포는 아래 다이어그램에 나와 있습니다.
ARR은 콘텐츠 서버에 고가용성 및 확장성을 제공하지만 다음과 같은 이유로 전체 배포는 고가용성 또는 확장성이 없습니다.
- ARR은 단일 실패 지점입니다.
- 콘텐츠 서버의 확장성은 하나의 ARR 서버의 최대 용량으로 제한됩니다.
이러한 문제를 해결하기 위해 관리자는 NLB(네트워크 부하 분산)와 함께 여러 ARR 서버를 사용하는 것을 고려할 수 있습니다. 고가용성 또는 활성/활성 모드에서만 고가용성 및 확장성을 달성하기 위해 ARR을 활성/수동 모드로 배포할 수 있습니다. 이 백서에서는 전반적인 고가용성 및 확장성을 달성하면서 핵심 ARR 시나리오를 사용하도록 ARR 및 NLB를 함께 배포하는 방법을 설명합니다. NLB는 Windows Server 2008의 모든 SKU에서 사용할 수 있습니다.
애플리케이션 요청 라우팅 및 네트워크 부하 분산 사용
ARR은 IIS를 기반으로 모듈로 빌드되며 계층 7(애플리케이션)에서 라우팅 결정을 내리도록 설계되었습니다. 보다 정확하게 말하자면, ARR은 다른 IIS 모듈 인 URL 다시 쓰기를 사용하여 들어오는 HTTP 요청 헤더 및 서버 변수를 검사하여 라우팅 결정을 내도록 합니다. 이 디자인을 고려할 때 관리자는 다음과 같은 애플리케이션 수준 정보를 기반으로 지능형 라우팅 규칙을 작성할 수 있습니다.
- 호스트 이름(HTTP_HOST): 호스트 이름에 따라 트래픽을 다른 콘텐츠 서버로 라우팅합니다.
- 요청된 리소스(URL): 파일 확장자를 기반으로 요청된 리소스가 정적 콘텐츠 또는 동적 콘텐츠에 대한 것인지 확인하고 그에 따라 요청을 라우팅합니다.
- 클라이언트 정보(HTTP_USER_AGENT): 브라우저 유형 및 버전에 따라 요청을 적절한 콘텐츠 서버로 라우팅합니다.
- 사용자 지정 헤더(애플리케이션별 쿠키로 설정): 사용자 기본 설정 또는 사용자 ID와 같은 애플리케이션에서 설정한 쿠키 정보를 기반으로 트래픽을 라우팅합니다.
위의 예는 몇 가지 예에 불과합니다. HTTP 헤더 및 서버 변수의 전체 목록은 부록 A를 참조하세요.
NLB는 계층 3에서 라우팅 결정을 내리기 때문에 HTTP 헤더 및 서버 변수와 같은 애플리케이션 특정 정보를 사용하여 애플리케이션 수준 기반 라우팅을 제공할 수 없습니다. 동시에 ARR은 자체에 내결함성 배포 기능을 제공하지 않으며 다른 보완 기술 및 솔루션에 의존하여 ARR 계층에 대한 고가용성을 달성해야 합니다. NLB는 네트워크 스택에서 다른 수준에서 작동하며 ARR이 배포된 서버와 동일한 서버에서 사용하도록 설정됩니다.
시나리오 1: HTTP 기반 라우팅 및 부하 분산
HTTP 기반 라우팅 및 부하 분산 시나리오를 사용하면 다음과 같은 3계층 배포 아키텍처를 사용할 수 있습니다.
- 계층 1(웹): 정적 콘텐츠를 처리하고 나머지 동적 요청을 계층 2 서버로 라우팅 및 부하 분산하는 이중 목적을 제공합니다.
- 계층 2(애플리케이션): 비즈니스 논리에 의존하는 동적 콘텐츠를 처리합니다.
- 계층 3(데이터): 데이터를 저장합니다.
다음 다이어그램에서는 3계층 배포를 보여 줍니다.
위의 예제에서는 동적 콘텐츠와 정적 콘텐츠를 구분하는 라우팅 규칙을 보여 주지만, 또 다른 일반적인 시나리오는 웹 서비스 요청과 프레젠테이션 요청을 구분하는 것입니다.
옵션1: 활성/수동
활성/수동 모드에서는 일반적으로 한 서버가 요청을 처리하는 두 개의 ARR 서버가 있고 다른 서버는 장애 조치(failover) 서버로 대기합니다. 위에서 설명한 것처럼 이 구성은 단일 실패 지점을 제거하여 고가용성을 달성하지만 콘텐츠 서버의 집계 용량이 하나의 ARR 서버의 최대 용량으로 제한되므로 스케일 아웃 솔루션이 아닙니다.
이 설정에서는 두 ARR 서버가 동일한 방식으로 구성되므로 공유 구성이 사용됩니다. 먼저 두 서버에 ARR을 설치한 다음 NLB 클러스터를 만듭니다. NLB 클러스터는 클러스터 노드 중 하나에서만 트래픽을 허용하도록 구성됩니다. 단일 호스트 필터링 모드로 클러스터 포트 규칙을 구성하여 이 작업을 수행합니다. 트래픽을 수락하는 노드는 NLB 클러스터 노드의 호스트 우선 순위 설정에 따라 결정됩니다. 자세한 내용은 NLB 구성 을 참조하세요.
ARR의 호스트 이름 선호도 기능을 제외하고 두 ARR 서버 간에 공유해야 하는 런타임 상태 정보는 없습니다. 따라서 이 시나리오에서는 ARR 또는 NLB에 특별한 구성이 필요하지 않습니다. ARR에서 서버 선호도 기능을 사용하는 경우에도 요청 헤더의 쿠키를 통해 수동 서버에서 선호도화된 상태 정보를 사용할 수 있습니다.
이 시나리오는 ARR 버전 1 릴리스에서 완전히 지원됩니다.
ARR 구성
1단계: 두 ARR 서버에서 공유 구성을 사용하도록 설정합니다.
- 이 문서의 단계에 따라 IIS에서 공유 구성을 설정합니다.
2단계: ARR을 사용하여 3계층 배포 아키텍처 구성
이 문서의 단계에 따라 3계층 배포 아키텍처에서 ARR을 구성합니다.
상위 수준에서 위의 문서에서는 다음을 설명합니다.
- ARR 서버에서 정적 콘텐츠를 사용할 수 있도록 하는 방법
- ARR 서버에서 직접 제공되도록 정적 콘텐츠에 대한 URL 다시 쓰기 규칙을 작성하는 방법입니다.
- 동적 콘텐츠에 대한 URL 다시 쓰기 규칙을 작성하여 애플리케이션 서버로 전달하는 방법입니다.
NLB 구성
NLB 구성은 다음 단계로 나뉩니다.
- 모든 ARR 서버에 NLB 기능을 설치합니다.
- ARR용 NLB 클러스터를 만듭니다.
- 활성/수동 배포를 위해 NLB를 구성합니다.
- 서버 관리자를 엽니다.
- 기능을 확장합니다.
- 기능 추가를 클릭합니다.
- 기능 추가 마법사에서 네트워크 부하 분산을 선택합니다.
- 설치를 클릭하여 NLB 기능 설치를 확인합니다.
- NLB 기능이 성공적으로 설치되었는지 확인합니다.
- 모든 ARR 서버에서 위의 단계를 반복합니다.
- NLB가 ARR 서버의 모든 인스턴스에 설치되어 있는지 확인합니다.
- 모든 프로그램 > 관리 도구 시작으로 > 이동하여 네트워크 부하 분산 관리자를 엽니다.
- 네트워크 부하 분산 클러스터를 마우스 오른쪽 단추로 클릭한 다음 새 클러스터를 선택합니다.
- 새 클러스터 대화 상자의 호스트 텍스트 상자에 ARR 서버 중 하나의 서버 주소를 입력합니다. 여러 인터페이스가 있는 경우 NLB 클러스터를 만들 서버 주소를 입력합니다.
- 활성/수동 모드(NLB의 단일 호스트 모드)에서 우선 순위는 장애 조치(failover)가 수행되는 순서를 결정합니다. 기본적으로 우선 순위가 1인 서버는 활성 노드입니다.
- 가상 IP 주소인 클러스터 IP가 필요합니다. 추가를 클릭합니다 . 클라이언트가 통신할 IP 주소입니다.
- 가상 IP 주소를 입력한 다음 확인을 클릭합니다.
- 다음을 클릭합니다.
- 기본값을 적용합니다. 자세한 내용은 부록을 참조하세요.
- 마침을 클릭하여 NLB 클러스터 만들기를 완료합니다.
- 이제 NLB 클러스터가 만들어졌으므로 클러스터에 추가 멤버를 추가할 수 있습니다. 모든 추가 멤버 서버에서 나머지 단계를 수행합니다. 네트워크 부하 분산 관리자에서 새로 선택한 클러스터를 마우스 오른쪽 단추로 클릭한 다음 클러스터 에 호스트 추가를 선택합니다.
- 추가할 멤버의 서버 주소를 입력합니다. 인터페이스가 여러 개 있는 경우 NLB 클러스터에서 사용해야 하는 인터페이스를 선택합니다.
- 우선 순위 할당은 클러스터의 멤버 서버 간에 상호 배타적이고 고유합니다. 활성/수동 모드(NLB의 단일 호스트 모드)에서 우선 순위는 장애 조치(failover) 순서를 결정합니다.
- 마침을 클릭하여 클러스터에 구성원 서버를 추가합니다.
- 네트워크 Load Balancer 관리자는 다음과 유사해야 합니다.
- 활성/수동 배포를 위해 NLB를 구성하려면 네트워크 부하 분산 관리자에서 클러스터를 마우스 오른쪽 단추로 클릭한 다음 클러스터 속성을 선택합니다. 포트 규칙 탭을 클릭합니다. 편집을 클릭합니다.
- 단일 호스트를 선택한 다음 확인을 클릭합니다.
NLB가 ARR을 사용하여 활성/수동 모드에서 작동하도록 성공적으로 구성되었습니다.
옵션2: 활성/활성
활성/활성 모드에서는 두 개 이상의 ARR 서버를 사용할 수 있습니다. 이 구성은 고가용성만 달성하는 활성/패스 모드와 달리 고가용성 및 확장성을 모두 달성합니다.
앞에서 설명한 것처럼 여러 ARR 서버가 동일한 방식으로 구성되므로 공유 구성이 사용됩니다. 주요 차이점은 NLB를 구성하는 방법입니다. 모든 ARR 서버를 동시에 활용하기 위해 NLB 클러스터 포트 규칙은 여러 호스트 모드로 구성됩니다.
NLB에서 선호도 기능을 사용하도록 설정했는지 여부에 관계없이 ARR 서버에는 특별한 구성이 필요하지 않습니다. 하나의 경우 ARR 서버는 하나의 공유 구성을 사용하여 동일한 방식으로 구성됩니다. 둘째, ARR은 클라이언트 쿠키를 사용하여 자체 사용을 위해 서버 선호도 정보를 저장하므로 이 정보는 요청별로 사용할 수 있으므로 ARR 서버에서 사용할 수 있습니다. NLB에 대한 권장 사항은 더 균일한 부하 분산을 초래하므로 선호도를 없음으로 설정하는 것입니다.
이 시나리오는 ARR 버전 1 릴리스에서 완전히 지원됩니다.
ARR 구성
활성/활성에 대한 ARR 구성은 활성/수동의 구성과 동일합니다. 주요 차이점은 NLB를 구성하는 방법입니다.
1단계: 두 ARR 서버에서 공유 구성을 사용하도록 설정합니다.
- 이 문서의 단계에 따라 IIS에서 공유 구성을 설정합니다.
2단계: ARR을 사용하여 3계층 배포 아키텍처 구성
이 문서의 단계에 따라 3계층 배포 아키텍처에서 ARR을 구성합니다.
상위 수준에서 위의 문서에서는 다음을 설명합니다.
- ARR 서버에서 정적 콘텐츠를 사용할 수 있도록 하는 방법
- ARR 서버에서 직접 제공되도록 정적 콘텐츠에 대한 URL 다시 쓰기 규칙을 작성하는 방법입니다.
- 동적 콘텐츠에 대한 URL 다시 쓰기 규칙을 작성하여 애플리케이션 서버로 전달하는 방법입니다.
NLB 구성
NLB 구성은 다음 단계로 나뉩니다.
- 모든 ARR 서버에 NLB 기능을 설치합니다.
- ARR용 NLB 클러스터를 만듭니다.
- 활성/활성 배포를 위해 NLB를 구성합니다.
모든 ARR 서버에 NLB 기능 설치: 문서화된 [여기](achieving-high-availability-and-scalability-arr-and-nlb.md#install NLB).
ARR용 NLB 클러스터 만들기: 문서화된 [여기](achieving-high-availability-and-scalability-arr-and-nlb.md#create nlb).
- 활성/활성 배포에 대해 NLB를 구성하려면 네트워크 부하 분산 관리자에서 클러스터를 마우스 오른쪽 단추로 클릭한 다음 클러스터 속성을 선택합니다. 포트 규칙 탭을 클릭합니다. 편집을 클릭합니다.
- 여러 호스트를 선택합니다. 선호도 설정에서 없음을 선택합니다. 위에서 설명한 대로 NLB에서 선호도를 사용하지 않는 것이 좋습니다. 따라서 부하 분산이 향상됩니다.
NLB가 ARR을 사용하여 활성/활성 모드에서 작동하도록 성공적으로 구성되었습니다.
시나리오 2: 호스트 이름 선호도를 사용하는 공유 호스팅
이 시나리오에서는 ARR의 호스트 이름 선호도 기능을 활용하여 공유 호스팅 배포를 사용하도록 설정하여 다음을 수행합니다.
- 기존 공유 호스팅 배포와 관련된 수동 관리 및 유지 관리를 줄입니다.
- 모든 서버 리소스가 균등하게 활용되도록 하면서 기존 서버 리소스를 최대화합니다.
- 환경을 쉽게 확장할 수 있습니다.
- 추가 용량을 판매할 비즈니스 기회를 만듭니다.
공유 호스팅 및 ARR에 대한 자세한 내용은 이 문서를 참조하세요.
다음 다이어그램에서는 ARR을 사용하는 공유 호스팅 환경을 보여 줍니다.
옵션1: 활성/수동
앞에서 설명한 것처럼 활성/수동 모드에서는 일반적으로 한 서버가 요청을 처리하는 두 개의 ARR 서버가 있고 다른 서버는 장애 조치(failover) 서버로 대기합니다. 이 구성은 단일 실패 지점을 제거하여 고가용성을 달성하지만 콘텐츠 서버의 집계 용량이 하나의 ARR 서버의 최대 용량으로 제한되므로 스케일 아웃 솔루션이 아닙니다.
이 설정에서는 두 ARR 서버가 동일한 방식으로 구성되므로 공유 구성이 사용됩니다. NLB 클러스터는 클러스터 노드 중 하나에서만 트래픽을 허용하도록 구성됩니다. 단일 호스트 필터링 모드로 클러스터 규칙을 구성하여 이 작업을 수행합니다. 트래픽을 수락하는 노드는 NLB 클러스터 노드의 호스트 우선 순위 설정에 따라 결정됩니다. 자세한 내용은 NLB 구성 을 참조하세요.
ARR의 호스트 이름 선호도 기능은 호스트 이름에 따라 특정 서버(또는 RC의 서버 그룹)에 대한 요청을 선호합니다. 호스트 이름과 콘텐츠 서버 간의 선호도 매핑에 대한 런타임 상태 정보는 ARR 서버의 인스턴스 내에서 메모리에 저장됩니다. ARR 버전 1 릴리스에서 ARR은 IIS용 Microsoft 외부 캐시 버전 1을 활용하여 여러 ARR 서버 간에 이 런타임 상태를 공유하고 유지 관리합니다. 이 시나리오에 대한 자세한 내용은 이 문서에서 확인할 수 있습니다.
이 시나리오는 ARR 버전 1 릴리스에서 완전히 지원됩니다.
ARR 구성
1단계: 호스트 이름 선호도를 사용하여 공유 호스팅에 대한 ARR 구성
- 이 문서의 단계에 따라 공유 호스팅에 대한 ARR에서 호스트 이름 선호도 기능을 구성합니다.
2단계: 외부 캐시를 사용하도록 설정하고 구성합니다.
- 이 문서의 단계에 따라 외부 캐시를 사용하도록 설정하고 구성합니다.
NLB 구성
NLB 구성은 다음 단계로 나뉩니다.
- NLB 기능을 설치합니다.
- ARR용 NLB 클러스터를 만듭니다.
- 활성/수동 배포를 위해 NLB를 구성합니다.
NLB 기능 설치: 문서화된 [여기](achieving-high-availability-and-scalability-arr-and-nlb.md#Install NLB 기능).
ARR용 NLB 클러스터 만들기: 문서화된 [여기](달성-고가용성 및 확장성-arr-and-nlb.md#ARR용 NLB 클러스터 만들기).
활성/수동 배포를 위해 NLB 구성: [여기](활성/수동에 대해 NLB 구성](달성-고가용성 및 확장성-arr-and-nlb.md#NLB 구성).
Option2: ARR의 활성/활성
활성/활성 모드에서는 둘 이상의 ARR 서버를 가질 수 있습니다. 이 구성은 고가용성만을 달성하는 활성/수동 모드와 달리 고가용성 및 확장성을 모두 달성합니다. 여러 ARR 서버가 동일한 방식으로 구성되므로 공유 구성이 사용됩니다. 모든 ARR 서버를 동시에 활용하기 위해 NLB는 여러 호스트 모드로 구성됩니다. 앞에서 설명한 것처럼 호스트 이름과 콘텐츠 서버 간의 선호도 매핑의 런타임 상태 정보는 ARR 서버의 인스턴스 내에서 메모리에 저장됩니다. 여러 ARR 서버 간에 이 정보를 공유하기 위해 IIS용 Microsoft 외부 캐시가 사용됩니다. 외부 캐시에 대한 자세한 내용은 이 문서를 참조하세요.
ARR 구성
활성/활성에 대한 ARR 구성은 Active/Passive의 구성과 동일합니다. 주요 차이점은 NLB를 구성하는 방법입니다.
1단계: 호스트 이름 선호도를 사용하여 공유 호스팅에 대해 ARR을 구성합니다.
- 이 문서의 단계에 따라 공유 호스팅을 위해 ARR에서 호스트 이름 선호도 기능을 구성합니다.
2단계: 외부 캐시를 사용하도록 설정하고 구성합니다.
- 이 문서의 단계에 따라 외부 캐시를 사용하도록 설정하고 구성합니다.
NLB 구성
NLB 구성은 다음 단계로 나뉩니다.
- NLB 기능을 설치합니다.
- ARR용 NLB 클러스터를 만듭니다.
- 활성/활성 배포에 대해 NLB를 구성합니다.
NLB 기능 설치: 문서화된 [여기](달성-고가용성 및 확장성-arr-and-nlb.md#NLB 기능 설치).
ARR용 NLB 클러스터 만들기: 문서화된 [여기](달성-고가용성 및 확장성-arr-and-nlb.md#ARR용 NLB 클러스터 만들기).
활성/활성 배포에 대해 NLB 구성: [여기](활성/활성에 대해 NLB 구성](달성-고가용성 및 확장성-arr-and-nlb.md#NLB 구성). 이 ARR 시나리오에서는 NLB에서 선호도를 사용하지 않는 것이 좋습니다.
요약
이 백서에서는 여러 ARR 서버를 배포하고 NLB를 사용하여 고가용성 및 확장성을 달성하기 위해 두 가지 주요 ARR 시나리오를 검토했습니다.
부록
부록 A: 라우팅 결정 규칙을 작성하기 위해 사용 가능한 모든 HTTP 헤더 및 서버 변수
ALL_HTTP | ALL_RAW | APPL_MD_PATH |
---|---|---|
APPL_PHYSICAL_PATH | CERT_COOKIE | CERT_FLAGS |
CERT_ISSUER | CERT_KEYSIZE | CERT_SECRETKEYSIZE |
CERT_SERIALNUMBER | CERT_SERVER_ISSUER | CERT_SERVER_SUBJECT |
CERT_SUBJECT | CONTENT_LENGTH | CONTENT_TYPE |
DOCUMENT_ROOT | GATEWAY_INTERFACE | HTTP_ACCEPT |
HTTP_ACCEPT_ENCODING | HTTP_ACCEPT_LANGUAGE | HTTP_CONNECTION |
HTTP_CONTENT_LENGTH | HTTP_HOST | HTTP_IF_MODIFIED_SINCE |
HTTP_IF_NONE_MATCH | HTTP_REFERER | HTTP_UA_CPU |
HTTP_USER_AGENT | HTTPS | HTTPS_KEYSIZE |
HTTPS_SECRETKEYSIZE | HTTPS_SERVER_ISSUER | HTTPS_SERVER_SUBJECT |
INSTANCE_ID | INSTANCE_META_PATH | LOCAL_ADDR |
PATH_INFO | PATH_TRANSLATED | QUERY_STRING |
REMOTE_ADDR | REMOTE_HOST | REMOTE_PORT |
REMOTE_USER | REQUEST_FILENAME | REQUEST_METHOD |
REQUEST_URI | SCRIPT_FILENAME | SCRIPT_NAME |
SERVER_ADDR | SERVER_NAME | SERVER_PORT |
SERVER_PORT_SECURE | SERVER_PROTOCOL | SERVER_SOFTWARE |
URL |
NLB Server Core 지침:
- NLB 기능 설치:
https://download.microsoft.com/download/6/3/5/6350896f-1e08-440b-9f24-d50f5e9b2390/ServerCoredeepdive.ppt
- NLB 기능 설치:
NLB 및 SSL:
기타 NLB 링크:
- https://technet.microsoft.com/library/cc782694.aspx
- https://technet.microsoft.com/library/cc778263.aspx
https://support.microsoft.com/kb/323437
https://support.microsoft.com/kb/890159
- https://blogs.msdn.com/clustering