SQL Server 있는 Azure Stack Hub의 Windows N 계층 애플리케이션

이 참조 아키텍처에서는 데이터 계층에 대해 Windows에서 SQL Server를 사용하여 N 계층 애플리케이션을 위해 구성되는 VM(가상 머신) 및 가상 네트워크를 배포하는 방법을 보여 줍니다.

아키텍처

이 아키텍처의 구성 요소는 다음과 같습니다.

다이어그램은 Application Gateway, 관리, 웹 계층, 비즈니스 계층, 데이터 계층 및 Active Directory의 6개 서브넷으로 구성된 가상 네트워크를 보여 줍니다. 데이터 계층 서브넷은 클라우드 감시를 사용합니다. 세 개의 부하 분산 장치가 있습니다.

일반

  • 리소스 그룹. 리소스 그룹은 리소스를 수명, 소유자를 비롯한 기준으로 관리할 수 있도록 Azure 리소스를 그룹화하는 데 사용됩니다.

  • 가용성 집합. 가용성 집합은 VM 중복성 및 가용성을 제공하는 데이터 센터 구성입니다. Azure Stack Hub 스탬프 내에서 이 구성을 사용하면 계획되거나 계획되지 않은 유지 관리 이벤트 중에 하나 이상의 가상 머신을 사용할 수 있습니다. VM은 여러 장애 도메인(Azure Stack Hub 호스트)에 분산되는 가용성 집합에 배치됩니다.

네트워킹 및 부하 분산

  • 가상 네트워크 및 서브넷. 모든 Azure VM은 가상 네트워크에 배포되어 서브넷으로 분할될 수 있습니다. 각 계층에 대해 별도의 서브넷을 만듭니다.

  • 계층 7 Load Balancer. Application Gateway 아직 Azure Stack Hub에서 사용할 수 없으므로 AZURE Stack Hub 시장 위치에서 사용할 수 있는 대안이 있습니다. KEMP LoadMaster Load Balancer ADC 콘텐츠 스위치/ f5 Big-IP Virtual Edition 또는 A10 vThunder ADC

  • Load Balancer Azure Load Balancer 사용하여 웹 계층에서 비즈니스 계층으로, 비즈니스 계층에서 SQL Server 네트워크 트래픽을 분산합니다.

  • NSG(네트워크 보안 그룹). NSG를 사용하여 가상 네트워크 내에서 네트워크 트래픽을 제한합니다. 예를 들어 여기에 표시된 3계층 아키텍처에서 데이터베이스 계층은 비즈니스 계층 및 관리 서브넷뿐 아니라 웹 프론트 엔드의 트래픽을 허용하지 않습니다.

  • DNS. Azure Stack Hub는 자체 DNS 호스팅 서비스를 제공하지 않으므로 ADDS에서 DNS 서버를 사용하세요.

가상 머신

  • SQL Server Always On 가용성 그룹. 복제 및 장애 조치(failover)를 사용하여 데이터 계층에서 높은 가용성을 제공합니다. 장애 조치(failover)에 대해 WSFC(Windows Server 장애 조치 클러스터) 기술을 사용합니다.

  • AD DS(Active Directory Domain Services) 서버. 장애 조치(failover) 클러스터 및 관련 클러스터형 역할에 대한 컴퓨터 개체는 AD DS(Active Directory Domain Services)에서 만들어집니다. 다른 VM을 AD DS에 조인하려면 동일한 가상 네트워크의 VM에서 AD DS 서버를 설정하는 것이 좋습니다. VPN 연결을 사용하여 가상 네트워크를 Enterprise 네트워크에 연결하여 기존 Enterprise AD DS에 VM을 조인할 수도 있습니다. 두 방법 모두 가상 네트워크 DNS를 AD DS DNS 서버(가상 네트워크 또는 기존 엔터프라이즈 네트워크)로 변경하여 AD DS 도메인 FQDN을 resolve 합니다.

  • 클라우드 감시. 장애 조치(failover) 클러스터는 쿼럼이 있는 것으로 알려진 해당 노드의 절반을 초과하여 실행되어야 합니다. 클러스터에 노드가 두 개만 있는 경우 네트워크 파티션으로 인해 각 노드가 컨트롤 플레인 노드라고 생각할 수 있습니다. 그 경우에 연결을 차단하고 쿼럼을 설정할 감시가 필요합니다. 감시는 쿼럼을 설정하려면 연결 차단기로 작동할 수 있는 공유 디스크 같은 리소스입니다. 클라우드 감시는 Azure Blob Storage를 사용하는 감시의 한 유형입니다. 쿼럼의 개념에 대한 자세한 알려면 클러스터 및 풀 쿼럼 이해를 참조합니다. 클라우드 감시에 대한 자세한 내용은 장애 조치(Failover) 클러스터에 대한 클라우드 감시 배포를 참조하세요. Azure Stack Hub에서 클라우드 감시 엔드포인트는 글로벌 Azure와 다릅니다.

다음과 같이 보일 수 있습니다.

  • 글로벌 Azure의 경우:
    https://mywitness.blob.core.windows.net/

  • Azure Stack Hub의 경우:
    https://mywitness.blob.<region>.<FQDN>

  • Jumpbox. 요새 호스트라고도 합니다. 관리자가 다른 VM에 연결할 때 사용하는 네트워크의 보안 VM입니다. jumpbox는 안전 목록에 있는 공용 IP 주소의 원격 트래픽만 허용하는 NSG를 사용합니다. NSG는 RDP(원격 데스크톱) 트래픽을 허용해야 합니다.

권장 사항

개발자의 요구 사항이 여기에 설명된 아키텍처와 다를 수 있습니다. 여기서 추천하는 권장 사항을 단지 시작점으로 활용하세요.

가상 머신

VM 구성에 대한 권장 사항은 Azure Stack Hub에서 Windows VM 실행을 참조하세요.

가상 네트워크

가상 네트워크를 만들 때 각 서브넷에 포함된 리소스에 몇 개의 IP 주소가 필요한지 결정합니다. CIDR 표기법을 사용하여 필요한 IP 주소를 충족하는 서브넷 마스크와 네트워크 주소 범위를 지정합니다. 표준 개인 IP 주소 블록(10.0.0.0/8, 172.16.0.0/12 및 192.168.0.0/16)에 해당하는 주소 공간을 사용합니다.

추후 가상 네트워크와 온-프레미스 네트워크 사이에 게이트웨이를 설정해야 할 경우에 대비하여 온-프레미스 네트워크와 중복되지 않는 주소 범위를 선택합니다. 가상 네트워크를 만든 후에는 주소 범위를 변경할 수 없습니다.

기능 및 보안 요구 사항을 염두에 두고 서브넷을 구성합니다. 동일한 계층이나 역할에 속한 모든 VM은 동일한 서브넷에 속해야 합니다. 이때 서브넷은 보안 경계가 될 수 있습니다. 가상 네트워크 및 서브넷 디자인에 대한 자세한 내용은 Azure Virtual Networks 계획 및 디자인을 참조하세요.

부하 분산 장치

VM을 인터넷에 직접 노출시키는 대신 각 VM에 개인 IP 주소를 부여합니다. 클라이언트는 계층 7 Load Balancer 연결된 공용 IP 주소를 사용하여 연결합니다.

네트워크 트래픽이 VM으로 전달되도록 부하 분산 장치 규칙을 정의합니다. 예를 들어 HTTP 트래픽을 허용하려면 프론트 엔드 구성의 포트 80을 백엔드 주소 풀의 포트 80으로 매핑합니다. 클라이언트가 포트 80으로 HTTP 요청을 전송하면 부하 분산 장치가 소스 IP 주소를 포함하는 해싱 알고리즘을 사용하여 백엔드 IP 주소를 선택합니다. 클라이언트 요청은 백 엔드 주소 풀의 모든 VM에 걸쳐 분산됩니다.

네트워크 보안 그룹

NSG 규칙을 사용하여 계층 사이의 트래픽을 제한합니다. 위에 표시된 3계층 아키텍처에서 웹 계층은 데이터베이스 계층과 직접 통신하지 않습니다. 이 규칙을 적용하려면 데이터베이스 계층에서 웹 계층 서브넷으로부터 수신되는 트래픽을 차단해야 합니다.

  1. 가상 네트워크의 모든 인바운드 트래픽을 거부합니다. (규칙에서 VIRTUAL_NETWORK 태그를 사용합니다.)

  2. 비즈니스 계층 서브넷의 인바운드 트래픽을 허용합니다.

  3. 데이터베이스 계층 서브넷 자체의 인바운드 트래픽을 허용합니다. 이 규칙은 데이터베이스 복제와 장애 조치에 필요한 데이터베이스 VM 간 통신을 허용합니다.

  4. jumpbox 서브넷에서 RDP 트래픽(3389 포트)을 허용합니다. 관리자는 이 규칙을 사용하여 jumpbox에서 데이터베이스 계층에 연결할 수 있습니다.

첫 번째 규칙보다 우선 순위가 높은 규칙 2-4를 만들어 재정의합니다.

SQL Server Always On 가용성 그룹

SQL Server의 고가용성을 위해 Always On 가용성 그룹을 사용하는 것이 좋습니다. Windows Server 2016 전 버전에서는 Always On 가용성 그룹에 도메인 컨트롤러가 필요하며, 가용성 그룹의 모든 노드가 동일한 AD 도메인에 속해야 합니다.

VM 계층 고가용성을 위해 모든 SQL VM은 가용성 집합에 있어야 합니다.

다른 계층은 가용성 그룹 수신기를 통해 데이터베이스에 연결됩니다. 수신기는 SQL 클라이언트가 SQL Server의 물리적 인스턴스의 이름을 알지 못해도 연결할 수 있도록 해 줍니다. 데이터베이스에 액세스하는 VM은 도메인에 연결되어야 합니다. 클라이언트(여기서는 다른 계층)는 DNS를 사용하여 수신기의 가상 네트워크 이름을 IP 주소로 해석합니다.

다음과 같이 SQL Server Always On 가용성 그룹을 구성합니다.

  1. WSFC(Windows Server 장애 조치 클러스터링) 클러스터, SQL Server Always On 가용성 그룹과 주 복제본을 만듭니다. 자세한 내용은 Always On 가용성 그룹 시작을 참조하세요.

  2. 고정 개인 IP 주소를 사용하여 내부 부하 분산 장치를 만듭니다.

  3. 가용성 그룹 수신기를 만든 다음 수신기의 DNS 이름을 내부 부하 분산 장치의 IP 주소로 매핑합니다.

  4. SQL Server 수신 포트(기본값: TCP 포트 1433)에 대한 부하 분산 장치 규칙을 만듭니다. 부하 분산 장치 규칙은 Direct Server Return이라고도 불리는 부동 IP를 지원해야 합니다. 이로 인해 VM은 클라이언트에 직접 응답하여 주 복제본에 대한 직접 연결을 지원하게 됩니다.

참고

부동 IP가 지원된 경우에는 부하 분산 장치 규칙의 프론트 엔드 포트 번호가 백엔드 포트 번호와 같아야 합니다.

SQL 클라이언트가 연결을 시도하면 부하 분산 장치가 연결 요청을 주 복제본으로 라우팅합니다. 다른 복제본으로의 장애 조치(failover)가 이루어지면 부하 분산 장치는 자동으로 새로운 요청을 새로운 주 복제본에 라우팅합니다. 자세한 내용은 SQL Server Always On 가용성 그룹에 대한 ILB 수신기 구성을 참조하세요.

장애 조치(failover)가 진행되는 동안에는 기존 클라이언트 연결이 닫힙니다. 장애 조치(failover)가 완료되면 새로운 연결이 새로운 주 복제본으로 라우팅됩니다.

애플리케이션이 쓰기보다 많은 읽기를 만드는 경우 일부 읽기 전용 쿼리를 보조 복제본(replica) 오프로드할 수 있습니다. 수신기를 사용하여 읽기 전용 보조 복제본에 연결(읽기 전용 라우팅)을 참조하세요.

가용성 그룹의 수동 장애 조치(failover)를 강제로 수행하여 배포 환경을 테스트합니다.

SQL 성능 최적화의 경우 AZURE Stack Hub에서 성능을 최적화하기 위한 SQL Server 모범 사례 문서를 참조할 수도 있습니다.

Jumpbox

공용 인터넷으로부터 애플리케이션 워크로드를 실행하는 VM에 대한 RDP 액세스를 허용하지 않습니다. 대신 이러한 VM에 대한 모든 RDP 액세스는 jumpbox를 통해 이루어져야 합니다. 관리자는 jumpbox에 로그인한 다음, jumpbox에서 다른 VM에 로그인하게 됩니다. jumpbox는 인터넷에서 수신되는 RDP 트래픽 중 알려진 안전한 IP 주소만을 허용합니다.

jumpbox에는 최소 성능 요구 사항이 있으므로 작은 VM 크기를 선택합니다. jumpbox에 대한 공용 IP 주소를 만듭니다. jumpbox를 다른 VM과 동일한 가상 네트워크 안에 배치하되 별도의 관리 서브넷에 배치합니다.

jumpbox를 보호하려면 안전한 공용 IP 주소 집합의 RDP 연결만 허용하는 NSG 규칙을 추가합니다. 관리 서브넷으로부터 수신되는 RDP 트래픽을 허용하도록 다른 서브넷에 대한 NSG를 구성합니다.

확장성 고려 사항

확장 집합

웹 및 비즈니스 계층의 경우 별도 VM을 배포하는 대신 가상 머신 확장 집합을 사용하는 것이 좋습니다. 확장 집합을 사용하면 동일한 VM 집합을 쉽게 배포하고 관리할 수 있습니다. VM을 신속하게 확장해야 하는 경우 확장 집합을 고려합니다.

확장 집합에 배포된 VM을 구성하는 방법에는 두 가지가 있습니다.

  • VM이 배포된 후에 확장명을 사용하여 VM을 구성합니다. 이렇게 하면 확장명이 없는 VM보다 새 VM 인스턴스를 시작하는 데 시간이 더 오래 걸릴 수 있습니다.

  • 사용자 지정 디스크 이미지를 사용하여 관리 디스크를 배포합니다. 이 옵션을 사용하면 배포 시간이 단축될 수 있습니다. 하지만 그러러면 이미지를 최신 상태로 유지해야 합니다.

자세한 내용은 확장 집합 디자인 고려 사항을 참조하세요. 이 디자인 고려 사항은 대부분 Azure Stack Hub에 해당되지만 다음과 같은 몇 가지 주의 사항이 있습니다.

  • Azure Stack Hub의 가상 머신 확장 집합은 오버프로비전 또는 롤링 업그레이드를 지원하지 않습니다.

  • Azure Stack Hub에서는 가상 머신 확장 집합을 자동 크기 조정할 수 없습니다.

  • 가상 머신 확장 집합에 대해 관리되지 않는 디스크 대신 Azure Stack Hub에서 관리 디스크를 사용하는 것이 좋습니다.

  • 현재 Azure Stack Hub에는 모든 Azure Stack Hub 인프라 VM, 개별 VM 및 확장 집합 인스턴스를 차지하는 700개의 VM 제한이 있습니다.

구독 제한

각 Azure Stack Hub 테넌트 구독에는 Azure Stack Hub 운영자가 구성한 지역당 최대 VM 수를 포함하여 기본 제한이 있습니다. 자세한 내용은 Azure Stack Hub 서비스, 계획, 제안, 구독 개요를 참조하세요. Azure Stack Hub의 할당량 유형도 참조하세요.

보안 고려 사항

가상 네트워크는 Azure의 트래픽 격리 경계입니다. 기본적으로 한 가상 네트워크의 VM은 다른 가상 네트워크의 VM과 직접 통신할 수 없습니다.

NSG. NSG(네트워크 보안 그룹)를 사용하여 인터넷과의 트래픽을 제한합니다. 자세한 내용은 Microsoft 클라우드 서비스 및 네트워크 보안을 참조하세요.

DMZ NVA(네트워크 가상 어플라이언스)를 추가하여 인터넷과 Azure 가상 네트워크 사이에 DMZ를 만드는 것도 좋은 방법입니다. NVA는 방화벽, 패킷 조사, 감사, 사용자 지정 라우팅과 같은 네트워크 관련 작업을 수행하는 가상 어플라이언스를 통칭하는 용어입니다.

암호화. 중요한 미사용 데이터를 암호화하고 Azure Stack Hub의 Key Vault 사용하여 데이터베이스 암호화 키를 관리합니다. 자세한 내용은 Azure VM에서 SQL Server에 대한 Azure Key Vault 통합 구성을 참조하세요. 또한 Key Vault에 데이터베이스 연결 문자열과 같은 애플리케이션 비밀을 저장하는 것이 좋습니다.

다음 단계