SQL Server를 사용한 Azure의 Windows N계층 애플리케이션Windows N-tier application on Azure with SQL Server

이 참조 아키텍처에서는 데이터 계층에 대해 Windows에서 SQL Server를 사용 하 여 N 계층 응용 프로그램에 대해 구성 된 vm (가상 컴퓨터) 및 가상 네트워크를 배포 하는 방법을 보여 줍니다.This reference architecture shows how to deploy virtual machines (VMs) and a virtual network configured for an N-tier application, using SQL Server on Windows for the data tier. 이 솔루션을 배포합니다.Deploy this solution.

Microsoft Azure를 사용하는 N계층 아키텍처N-tier architecture using Microsoft Azure

이 아키텍처의 Visio 파일을 다운로드합니다.Download a Visio file of this architecture.

ArchitectureArchitecture

이 아키텍처의 구성 요소는 다음과 같습니다.The architecture has the following components.

일반General

  • 리소스 그룹.Resource group. 리소스 그룹 은 Azure 리소스를 관리 하는 데 사용 되며, 수명, 소유자 또는 기타 기준에 따라 관리 될 수 있습니다.Resource groups are used to group Azure resources so they can be managed by lifetime, owner, or other criteria.

  • 가용성 영역.Availability zones. 가용성 영역은 Azure 지역 내에서 물리적 위치입니다.Availability zones are physical locations within an Azure region. 각 영역은 독립적인 전원, 냉각 및 네트워킹을 포함 하는 하나 이상의 데이터 센터로 구성 됩니다.Each zone consists of one or more datacenters with independent power, cooling, and networking. 영역에 Vm을 배치 하면 응용 프로그램이 영역 내에서 오류에 대해 복원 력이 있게 됩니다.By placing VMs across zones, the application becomes resilient to failures within a zone.

네트워킹 및 부하 분산Networking and load balancing

  • 가상 네트워크 및 서브넷.Virtual network and subnets. 모든 Azure VM은 서브넷으로 분할 될 수 있는 가상 네트워크에 배포 됩니다.Every Azure VM is deployed into a virtual network that can be segmented into subnets. 각 계층에 대해 별도의 서브넷을 만듭니다.Create a separate subnet for each tier.

  • Application gateway.Application gateway. Application Gateway 는 계층 7 부하 분산 장치입니다.Application Gateway is a layer 7 load balancer. 이 아키텍처에서 HTTP 요청을 웹 프런트 엔드로 라우팅합니다.In this architecture, it routes HTTP requests to the web front end. 또한 application Gateway는 일반적인 악용 및 취약점으로부터 애플리케이션을 보호하는 WAF(웹 애플리케이션 방화벽)을 제공합니다.Application Gateway also provides a web application firewall (WAF) that protects the application from common exploits and vulnerabilities.

  • 부하 분산 장치.Load balancers. Azure 표준 Load Balancer 를 사용 하 여 웹 계층에서 비즈니스 계층으로, 비즈니스 계층에서 SQL Server로 네트워크 트래픽을 분산 합니다.Use Azure Standard Load Balancer to distribute network traffic from the web tier to the business tier, and from the business tier to SQL Server.

  • Nsgs ( 네트워크 보안 그룹 ).Network security groups (NSGs). Nsgs 를 사용 하 여 가상 네트워크 내의 네트워크 트래픽을 제한 합니다.Use NSGs to restrict network traffic within the virtual network. 예를 들어 여기에 표시된 3계층 아키텍처에서 데이터베이스 계층은 비즈니스 계층 및 관리 서브넷뿐 아니라 웹 프론트 엔드의 트래픽을 허용하지 않습니다.For example, in the three-tier architecture shown here, the database tier does not accept traffic from the web front end, only from the business tier and the management subnet.

  • DDoS Protection.DDoS Protection. Azure 플랫폼이 DDoS(분산 서비스 거부) 공격에 대한 기본 보호를 제공하지만 DDoS Protection 표준을 사용하는 것이 좋습니다. 그러면 DDoS 완화를 강화하게 됩니다.Although the Azure platform provides basic protection against distributed denial of service (DDoS) attacks, we recommend using DDoS Protection Standard, which has enhanced DDoS mitigation features. 보안 고려사항을 참조하세요.See Security considerations.

  • Azure DNS.Azure DNS. Azure DNS는 DNS 도메인에 대한 호스팅 서비스입니다.Azure DNS is a hosting service for DNS domains. 이 서비스는 Microsoft Azure 인프라를 사용하여 이름 확인을 제공합니다.It provides name resolution using Microsoft Azure infrastructure. Azure에 도메인을 호스트하면 다른 Azure 서비스와 동일한 자격 증명, API, 도구 및 대금 청구를 사용하여 DNS 레코드를 관리할 수 있습니다.By hosting your domains in Azure, you can manage your DNS records using the same credentials, APIs, tools, and billing as your other Azure services.

가상 머신Virtual machines

  • Always On 가용성 그룹을 SQL Server 합니다.SQL Server Always On Availability Group. 복제 및 장애 조치(failover)를 사용하여 데이터 계층에서 높은 가용성을 제공합니다.Provides high availability at the data tier, by enabling replication and failover. 장애 조치(failover)에 대해 WSFC(Windows Server 장애 조치 클러스터) 기술을 사용합니다.It uses Windows Server Failover Cluster (WSFC) technology for failover.

  • AD DS(Active Directory Domain Services) 서버.Active Directory Domain Services (AD DS) Servers. 장애 조치(failover) 클러스터 및 관련 클러스터형 역할에 대한 컴퓨터 개체는 AD DS(Active Directory Domain Services)에서 만들어집니다.The computer objects for the failover cluster and its associated clustered roles are created in Active Directory Domain Services (AD DS).

  • 클라우드 미러링 모니터 서버.Cloud Witness. 장애 조치(failover) 클러스터는 쿼럼이 있는 것으로 알려진 해당 노드의 절반을 초과하여 실행되어야 합니다.A failover cluster requires more than half of its nodes to be running, which is known as having quorum. 클러스터에 노드가 두 개만 있는 경우 네트워크 파티션이 있으면 각 노드가 주 노드인 것으로 간주 될 수 있습니다.If the cluster has just two nodes, a network partition could cause each node to think it's the primary node. 그 경우에 연결을 차단하고 쿼럼을 설정할 감시 가 필요합니다.In that case, you need a witness to break ties and establish quorum. 감시는 쿼럼을 설정하려면 연결 차단기로 작동할 수 있는 공유 디스크 같은 리소스입니다.A witness is a resource such as a shared disk that can act as a tie breaker to establish quorum. 클라우드 감시는 Azure Blob Storage를 사용하는 감시의 한 유형입니다.Cloud Witness is a type of witness that uses Azure Blob Storage. 쿼럼의 개념에 대한 자세한 알려면 클러스터 및 풀 쿼럼 이해를 참조합니다.To learn more about the concept of quorum, see Understanding cluster and pool quorum. 클라우드 감시에 대한 자세한 내용은 장애 조치(Failover) 클러스터에 대한 클라우드 감시 배포를 참조하세요.For more information about Cloud Witness, see Deploy a Cloud Witness for a Failover Cluster.

  • Jumpbox.Jumpbox. 요새 호스트라고도 합니다.Also called a bastion host. 관리자가 다른 VM에 연결할 때 사용하는 네트워크의 보안 VM입니다.A secure VM on the network that administrators use to connect to the other VMs. jumpbox는 안전 목록에 있는 공용 IP 주소의 원격 트래픽만 허용하는 NSG를 사용합니다.The jumpbox has an NSG that allows remote traffic only from public IP addresses on a safe list. NSG는 RDP(원격 데스크톱) 트래픽을 허용해야 합니다.The NSG should permit remote desktop (RDP) traffic.

권장 사항Recommendations

개발자의 요구 사항이 여기에 설명된 아키텍처와 다를 수 있습니다.Your requirements might differ from the architecture described here. 여기서 추천하는 권장 사항을 단지 시작점으로 활용하세요.Use these recommendations as a starting point.

가상 머신Virtual machines

Vm을 구성 하는 방법에 대 한 권장 사항은 Azure에서 WINDOWS VM 실행을 참조 하세요.For recommendations on configuring the VMs, see Run a Windows VM on Azure.

가상 네트워크Virtual network

가상 네트워크를 만들 때 각 서브넷의 리소스에 필요한 IP 주소 수를 결정 합니다.When you create the virtual network, determine how many IP addresses your resources in each subnet require. CIDR 표기법을 사용 하 여 필요한 IP 주소에 사용할 수 있는 크기의 서브넷 마스크와 네트워크 주소 범위를 지정 합니다.Specify a subnet mask and a network address range large enough for the required IP addresses, using CIDR notation. 표준 개인 IP 주소 블록(10.0.0.0/8, 172.16.0.0/12 및 192.168.0.0/16)에 해당하는 주소 공간을 사용합니다.Use an address space that falls within the standard private IP address blocks, which are 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16.

나중에 가상 네트워크와 온-프레미스 네트워크 간에 게이트웨이를 설정 해야 하는 경우 온-프레미스 네트워크와 겹치지 않는 주소 범위를 선택 합니다.Choose an address range that does not overlap with your on-premises network, in case you need to set up a gateway between the virtual network and your on-premises network later. 가상 네트워크를 만든 후에는 주소 범위를 변경할 수 없습니다.Once you create the virtual network, you can't change the address range.

기능 및 보안 요구 사항을 염두에 두고 서브넷을 구성합니다.Design subnets with functionality and security requirements in mind. 동일한 계층이나 역할에 속한 모든 VM은 동일한 서브넷에 속해야 합니다. 이때 서브넷은 보안 경계가 될 수 있습니다.All VMs within the same tier or role should go into the same subnet, which can be a security boundary. 가상 네트워크 및 서브넷을 설계 하는 방법에 대 한 자세한 내용은 Azure Virtual Network 계획 및 디자인을 참조 하세요.For more information about designing virtual networks and subnets, see Plan and design Azure Virtual Networks.

Application GatewayApplication Gateway

Application Gateway를 구성 하는 방법에 대 한 자세한 내용은 Application Gateway 구성 개요를 참조 하세요.For information about configuring Application Gateway, see Application Gateway configuration overview.

부하 분산 장치Load balancers

VM을 인터넷에 직접 노출시키는 대신 각 VM에 개인 IP 주소를 부여합니다.Don't expose the VMs directly to the Internet, but instead give each VM a private IP address. 클라이언트는 Application Gateway와 연결된 공용 IP 주소를 사용하여 연결합니다.Clients connect using the public IP address associated with the Application Gateway.

네트워크 트래픽이 VM으로 전달되도록 부하 분산 장치 규칙을 정의합니다.Define load balancer rules to direct network traffic to the VMs. 예를 들어 HTTP 트래픽을 허용하려면 프론트 엔드 구성의 포트 80을 백엔드 주소 풀의 포트 80으로 매핑합니다.For example, to enable HTTP traffic, map port 80 from the front-end configuration to port 80 on the back-end address pool. 클라이언트가 포트 80으로 HTTP 요청을 전송하면 부하 분산 장치가 소스 IP 주소를 포함하는 해싱 알고리즘을 사용하여 백엔드 IP 주소를 선택합니다.When a client sends an HTTP request to port 80, the load balancer selects a back-end IP address by using a hashing algorithm that includes the source IP address. 클라이언트 요청은 백 엔드 주소 풀의 모든 VM에 걸쳐 분산됩니다.Client requests are distributed across all the VMs in the back-end address pool.

네트워크 보안 그룹Network security groups

NSG 규칙을 사용하여 계층 사이의 트래픽을 제한합니다.Use NSG rules to restrict traffic between tiers. 위에 표시된 3계층 아키텍처에서 웹 계층은 데이터베이스 계층과 직접 통신하지 않습니다.In the three-tier architecture shown above, the web tier does not communicate directly with the database tier. 이 규칙을 적용 하려면 데이터베이스 계층이 웹 계층 서브넷에서 들어오는 트래픽을 차단 해야 합니다.To enforce this rule, the database tier should block incoming traffic from the web tier subnet.

  1. 가상 네트워크의 모든 인바운드 트래픽을 거부 합니다.Deny all inbound traffic from the virtual network. (규칙에 VIRTUAL_NETWORK 태그를 사용합니다.)(Use the VIRTUAL_NETWORK tag in the rule.)
  2. 비즈니스 계층 서브넷의 인바운드 트래픽을 허용합니다.Allow inbound traffic from the business tier subnet.
  3. 데이터베이스 계층 서브넷 자체의 인바운드 트래픽을 허용합니다.Allow inbound traffic from the database tier subnet itself. 이 규칙은 데이터베이스 복제와 장애 조치에 필요한 데이터베이스 VM 간 통신을 허용합니다.This rule allows communication between the database VMs, which is needed for database replication and failover.
  4. jumpbox 서브넷에서 RDP 트래픽(3389 포트)을 허용합니다.Allow RDP traffic (port 3389) from the jumpbox subnet. 관리자는 이 규칙을 사용하여 jumpbox에서 데이터베이스 계층에 연결할 수 있습니다.This rule lets administrators connect to the database tier from the jumpbox.

첫 번째 규칙보다 우선 순위가 높은 2–4 규칙을 만들어 재정의합니다.Create rules 2 – 4 with higher priority than the first rule, so they override it.

SQL Server Always On 가용성 그룹SQL Server Always On Availability Groups

SQL Server의 고가용성을 위해 Always On 가용성 그룹을 사용하는 것이 좋습니다.We recommend Always On Availability Groups for SQL Server high availability. Windows Server 2016 전 버전에서는 Always On 가용성 그룹에 도메인 컨트롤러가 필요하며, 가용성 그룹의 모든 노드가 동일한 AD 도메인에 속해야 합니다.Prior to Windows Server 2016, Always On Availability Groups require a domain controller, and all nodes in the availability group must be in the same AD domain.

다른 계층은 가용성 그룹 수신기를 통해 데이터베이스에 연결됩니다.Other tiers connect to the database through an availability group listener. 수신기는 SQL 클라이언트가 SQL Server의 물리적 인스턴스의 이름을 알지 못해도 연결할 수 있도록 해 줍니다.The listener enables a SQL client to connect without knowing the name of the physical instance of SQL Server. 데이터베이스에 액세스하는 VM은 도메인에 연결되어야 합니다.VMs that access the database must be joined to the domain. 클라이언트(여기서는 다른 계층)는 DNS를 사용하여 수신기의 가상 네트워크 이름을 IP 주소로 해석합니다.The client (in this case, another tier) uses DNS to resolve the listener's virtual network name into IP addresses.

다음과 같이 SQL Server Always On 가용성 그룹을 구성합니다.Configure the SQL Server Always On Availability Group as follows:

  1. WSFC(Windows Server 장애 조치 클러스터링) 클러스터, SQL Server Always On 가용성 그룹과 주 복제본을 만듭니다.Create a Windows Server Failover Clustering (WSFC) cluster, a SQL Server Always On Availability Group, and a primary replica. 자세한 내용은 Always On 가용성 그룹 시작을 참조하세요.For more information, see Getting Started with Always On Availability Groups.

  2. 고정 개인 IP 주소를 사용하여 내부 부하 분산 장치를 만듭니다.Create an internal load balancer with a static private IP address.

  3. 가용성 그룹 수신기를 만든 다음 수신기의 DNS 이름을 내부 부하 분산 장치의 IP 주소로 매핑합니다.Create an availability group listener, and map the listener's DNS name to the IP address of an internal load balancer.

  4. SQL Server 수신 포트(기본값: TCP 포트 1433)에 대한 부하 분산 장치 규칙을 만듭니다.Create a load balancer rule for the SQL Server listening port (TCP port 1433 by default). 부하 분산 장치 규칙은 Direct Server Return이라고도 불리는 부동 IP 를 지원해야 합니다.The load balancer rule must enable floating IP, also called Direct Server Return. 이로 인해 VM은 클라이언트에 직접 응답하여 주 복제본에 대한 직접 연결을 지원하게 됩니다.This causes the VM to reply directly to the client, which enables a direct connection to the primary replica.

    참고

    부동 IP가 지원된 경우에는 부하 분산 장치 규칙의 프론트 엔드 포트 번호가 백엔드 포트 번호와 같아야 합니다.When floating IP is enabled, the front-end port number must be the same as the back-end port number in the load balancer rule.

SQL 클라이언트가 연결을 시도하면 부하 분산 장치가 연결 요청을 주 복제본으로 라우팅합니다.When a SQL client tries to connect, the load balancer routes the connection request to the primary replica. 다른 복제본으로의 장애 조치(failover)가 이루어지면 부하 분산 장치는 자동으로 새로운 요청을 새로운 주 복제본에 라우팅합니다.If there is a failover to another replica, the load balancer automatically routes new requests to a new primary replica. 자세한 내용은 SQL Server Always On 가용성 그룹에 대한 ILB 수신기 구성을 참조하세요.For more information, see Configure an ILB listener for SQL Server Always On Availability Groups.

장애 조치(failover)가 진행되는 동안에는 기존 클라이언트 연결이 닫힙니다.During a failover, existing client connections are closed. 장애 조치(failover)가 완료되면 새로운 연결이 새로운 주 복제본으로 라우팅됩니다.After the failover completes, new connections will be routed to the new primary replica.

애플리케이션에서 쓰기보다 읽기가 훨씬 많이 발생한다면 읽기 전용 쿼리 중 일부를 보조 복제본으로 부하 분산할 수 있습니다.If your application makes significantly more reads than writes, you can offload some of the read-only queries to a secondary replica. 수신기를 사용하여 읽기 전용 보조 복제본에 연결(읽기 전용 라우팅)을 참조하세요.See Using a Listener to Connect to a Read-Only Secondary Replica (Read-Only Routing).

가용성 그룹의 수동 장애 조치(failover)를 강제로 수행하여 배포 환경을 테스트합니다.Test your deployment by forcing a manual failover of the availability group.

JumpboxJumpbox

공용 인터넷으로부터 애플리케이션 워크로드를 실행하는 VM에 대한 RDP 액세스를 허용하지 않습니다.Don't allow RDP access from the public Internet to the VMs that run the application workload. 대신 이러한 Vm에 대 한 모든 RDP 액세스는 jumpbox을 통과 해야 합니다.Instead, all RDP access to these VMs should go through the jumpbox. 관리자는 jumpbox에 로그인한 다음, jumpbox에서 다른 VM에 로그인하게 됩니다.An administrator logs into the jumpbox, and then logs into the other VM from the jumpbox. jumpbox는 인터넷에서 수신되는 RDP 트래픽 중 알려진 안전한 IP 주소만을 허용합니다.The jumpbox allows RDP traffic from the Internet, but only from known, safe IP addresses.

jumpbox에는 최소 성능 요구 사항이 있으므로 작은 VM 크기를 선택합니다.The jumpbox has minimal performance requirements, so select a small VM size. jumpbox에 대한 공용 IP 주소를 만듭니다.Create a public IP address for the jumpbox. 다른 Vm과 동일한 가상 네트워크에 jumpbox를 추가 하 고 별도의 관리 서브넷에 추가 합니다.Place the jumpbox in the same virtual network as the other VMs, but in a separate management subnet.

jumpbox를 보호하려면 안전한 공용 IP 주소 집합의 RDP 연결만 허용하는 NSG 규칙을 추가합니다.To secure the jumpbox, add an NSG rule that allows RDP connections only from a safe set of public IP addresses. 관리 서브넷으로부터 수신되는 RDP 트래픽을 허용하도록 다른 서브넷에 대한 NSG를 구성합니다.Configure the NSGs for the other subnets to allow RDP traffic from the management subnet.

확장성 고려 사항Scalability considerations

확장 집합Scale sets

웹 및 비즈니스 계층의 경우 별도의 Vm을 배포 하는 대신 가상 머신 확장 집합 을 사용 하는 것이 좋습니다.For the web and business tiers, consider using virtual machine scale sets instead of deploying separate VMs. 확장 집합을 통해 동일한 VM 집합을 쉽게 배포하고 관리하며, 성능 메트릭에 따라 VM의 크기를 자동으로 조정할 수 있습니다.A scale set makes it easy to deploy and manage a set of identical VMs, and autoscale the VMs based on performance metrics. VM들의 부하가 늘어나면 부하 분산 장치에 VM이 자동으로 추가됩니다.As the load on the VMs increases, additional VMs are automatically added to the load balancer. VM을 신속하게 확장해야 하거나 자동 확장이 필요한 경우 확장 집합을 사용합니다.Consider scale sets if you need to quickly scale out VMs, or need to autoscale.

확장 집합에 배포된 VM을 구성하는 방법에는 두 가지가 있습니다.There are two basic ways to configure VMs deployed in a scale set:

  • VM이 배포된 후에 확장명을 사용하여 VM을 구성합니다.Use extensions to configure the VM after it's deployed. 이렇게 하면 확장명이 없는 VM보다 새 VM 인스턴스를 시작하는 데 시간이 더 오래 걸릴 수 있습니다.With this approach, new VM instances may take longer to start up than a VM with no extensions.

  • 사용자 지정 디스크 이미지를 사용하여 관리 디스크를 배포합니다.Deploy a managed disk with a custom disk image. 이 옵션을 사용하면 배포 시간이 단축될 수 있습니다.This option may be quicker to deploy. 하지만 그러러면 이미지를 최신 상태로 유지해야 합니다.However, it requires you to keep the image up-to-date.

자세한 내용은 확장 집합 디자인 고려 사항을 참조하세요.For more information, see Design considerations for scale sets.

자동 확장 솔루션을 사용할 때는 사전에 미리 프로덕션 수준 워크로드로 테스트해야 합니다.When using any autoscale solution, test it with production-level workloads well in advance.

구독 제한Subscription limits

각 Azure 구독에는 지역당 최대 VM 개수를 비롯해 기본적인 제한이 적용됩니다.Each Azure subscription has default limits in place, including a maximum number of VMs per region. 지원 요청을 제출하여 제한을 늘릴 수 있습니다.You can increase the limit by filing a support request. 자세한 내용은 Azure 구독 및 서비스 제한, 할당량 및 제약 조건을 참조 하세요.For more information, see Azure subscription and service limits, quotas, and constraints.

Application GatewayApplication Gateway

Application Gateway은 고정 용량 모드 또는 자동 크기 조정 모드를 지원 합니다.Application Gateway supports fixed capacity mode or autoscaling mode. 고정 용량 모드는 워크로드가 일관적이고 예측 가능한 시나리오에 유용합니다.Fixed capacity mode is useful for scenarios with consistent and predictable workloads. 가변 트래픽이 있는 작업에는 자동 크기 조정 모드를 사용 하는 것이 좋습니다.Consider using autoscaling mode for workloads with variable traffic. 자세한 내용은 자동 크기 조정 및 영역 중복 Application Gateway v2 를 참조 하세요.For more information, see Autoscaling and Zone-redundant Application Gateway v2

가용성 고려 사항Availability considerations

가용성 영역은 단일 지역 내에서 최상의 복원 력을 제공 합니다.Availability zones provide the best resiliency within a single region. 고가용성이 필요한 경우 장애 조치 (failover)를 위해 Azure Traffic Manager를 사용 하 여 두 지역에 걸쳐 응용 프로그램을 복제 하는 것이 좋습니다.If you need even higher availability, consider replicating the application across two regions, using Azure Traffic Manager for failover. 자세한 내용은 고가용성을 위한 다중 지역 N 계층 애플리케이션을 참조하세요.For more information, see Multi-region N-tier application for high availability.

모든 지역에서 가용성 영역을 지원 하지는 않지만 모든 영역에서 모든 VM 크기가 지원 되는 것은 아닙니다.Not all regions support availability zones, and not all VM sizes are supported in all zones. 다음 Azure CLI 명령을 실행 하 여 지역 내의 각 VM 크기에 대해 지원 되는 영역을 찾습니다.Run the following Azure CLI command to find the supported zones for each VM size within a region:

az vm list-skus --resource-type virtualMachines --zone false --location <location> \
    --query "[].{Name:name, Zones:locationInfo[].zones[] | join(','@)}" -o table

가용성 영역을 지원 하지 않는 지역에이 아키텍처를 배포 하는 경우 가용성 집합 내의 각 계층에 대 한 vm을 배치 합니다.If you deploy this architecture to a region that does not support availability zones, put the VMs for each tier inside an availability set. 동일한 가용성 집합 내의 Vm은 중복성을 위해 여러 물리적 서버, 계산 랙, 저장소 단위 및 네트워크 스위치에 배포 됩니다.VMs within the same availability set are deployed across multiple physical servers, compute racks, storage units, and network switches for redundancy. 확장 집합은 자동으로 배치 그룹 을 사용합니다. 이 기능은 암시적인 가용성 집합으로 작동합니다.Scale sets automatically use placement groups, which act as an implicit availability set.

가용성 영역에 배포 하는 경우 Azure Load Balancer의 표준 SKU 및 Application Gateway의 v2 SKU를 사용 합니다.When deploying to availability zones, use the Standard SKU of Azure Load Balancer and the v2 SKU of Application Gateway. 이러한 Sku는 영역 간 중복성을 지원 합니다.These SKUs support cross-zone redundancy. 자세한 내용은 다음을 참조하세요.For more information, see:

단일 Application Gateway 배포가 게이트웨이의 여러 인스턴스를 실행할 수 있습니다.A single Application Gateway deployment can run multiple instances of the gateway. 프로덕션 워크 로드의 경우 둘 이상의 인스턴스를 실행 합니다.For production workloads, run at least two instances.

상태 프로브Health probes

Application Gateway 및 Load Balancer는 모두 상태 프로브를 사용 하 여 VM 인스턴스의 가용성을 모니터링 합니다.Application Gateway and Load Balancer both use health probes to monitor the availability of VM instances.

  • Application Gateway는 항상 HTTP 프로브를 사용 합니다.Application Gateway always uses an HTTP probe.
  • Load Balancer는 HTTP 또는 TCP를 테스트할 수 있습니다.Load Balancer can test either HTTP or TCP. 일반적으로 VM이 HTTP 서버를 실행 하는 경우 HTTP 프로브를 사용 합니다.Generally, if a VM runs an HTTP server, use an HTTP probe. 그렇지 않으면 TCP를 사용 합니다.Otherwise, use TCP.

프로브가 시간 제한 기간 내에 인스턴스에 연결할 수 없는 경우 게이트웨이 또는 부하 분산 장치는 해당 VM에 대 한 트래픽 전송을 중지 합니다.If a probe can't reach an instance within a timeout period, the gateway or load balancer stops sending traffic to that VM. 검색은 계속 확인 하 고 vm을 다시 사용할 수 있게 되 면 VM을 백 엔드 풀로 반환 합니다.The probe continues to check and will return the VM to the back-end pool if the VM becomes available again.

Http 프로브는 지정 된 경로에 HTTP GET 요청을 보내고 HTTP 200 응답을 수신 합니다.HTTP probes send an HTTP GET request to a specified path and listen for an HTTP 200 response. 이 경로는 루트 경로("/")일 수도 있고, 애플리케이션의 상태를 확인하는 일부 사용자 지정 로직을 구현하는 상태 모니터링 엔드포인트일 수도 있습니다.This path can be the root path ("/"), or a health-monitoring endpoint that implements some custom logic to check the health of the application. 엔드포인트는 익명의 HTTP 요청을 허용해야 합니다.The endpoint must allow anonymous HTTP requests.

상태 프로브에 대 한 자세한 내용은 다음을 참조 하세요.For more information about health probes, see:

상태 프로브 끝점을 디자인 하는 방법에 대 한 고려 사항은 상태 끝점 모니터링 패턴을 참조 하세요.For considerations about designing a health probe endpoint, see Health Endpoint Monitoring pattern.

비용 고려 사항Cost considerations

Azure 가격 책정 계산기 를 사용 하 여 비용을 예측 합니다.Use the Azure Pricing Calculator to estimates costs. 다음은 몇 가지 기타 고려 사항입니다.Here are some other considerations.

가상 머신 크기 집합Virtual machine scale sets

Virtual machine scale sets는 모든 Windows VM 크기에서 사용할 수 있습니다.Virtual machine scale sets are available on all Windows VM sizes. 배포 하는 Azure Vm에 대해서만 요금이 청구 되 고 저장소 및 네트워킹과 같은 사용 되는 기본 인프라 리소스는 추가로 청구 됩니다.You are only charged for the Azure VMs you deploy and any additional underlying infrastructure resources consumed such as storage and networking. Virtual machine scale sets 서비스에는 증분 요금이 부과 되지 않습니다.There are no incremental charges for the virtual machine scale sets service.

단일 Vm 가격 옵션은 Windows vm 가격 책정 을 참조 하세요.For single VMs pricing options See Windows VMs pricing

데이터베이스 가져오기SQL server

Azure SQL DBaas를 선택 하는 경우 Always On 가용성 그룹 및 도메인 컨트롤러 컴퓨터를 구성할 필요가 없기 때문에 비용을 절감할 수 있습니다.If you choose Azure SQL DBaas, you can save on cost because don't need to configure an Always On Availability Group and domain controller machines. 단일 데이터베이스에서 관리 되는 인스턴스 또는 탄력적 풀로 시작 하는 몇 가지 배포 옵션이 있습니다.There are several deployment options starting from single database up to managed instance, or elastic pools. 자세한 내용은 AZURE SQL 가격 책정을 참조 하세요.For more information see Azure SQL pricing.

SQL server Vm 가격 책정 옵션은 Sql vm 가격을 참조 하세요.For SQL server VMs pricing options see SQL VMs pricing.

부하 분산 장치Load balancers

구성 된 부하 분산 및 아웃 바운드 규칙의 수에 대해서만 요금이 청구 됩니다.You are charged only for the number of configured load-balancing and outbound rules. 인바운드 NAT 규칙은 무료입니다.Inbound NAT rules are free. 규칙이 구성 되지 않은 경우에는 표준 Load Balancer에 대 한 시간당 요금이 청구 되지 않습니다.There is no hourly charge for the Standard Load Balancer when no rules are configured.

자세한 내용은 Microsoft Azure Well-Architected Framework의 비용 섹션을 참조하세요.For more information, see the cost section in Microsoft Azure Well-Architected Framework.

보안 고려 사항Security considerations

가상 네트워크는 Azure의 트래픽 격리 경계입니다.Virtual networks are a traffic isolation boundary in Azure. 기본적으로 하나의 가상 네트워크에 있는 Vm은 다른 가상 네트워크의 Vm과 직접 통신할 수 없습니다.By default, VMs in one virtual network can't communicate directly with VMs in a different virtual network. 그러나 가상 네트워크 피어 링을 사용 하 여 가상 네트워크를 명시적으로 연결할 수 있습니다.However, you can explicitly connect virtual networks by using virtual network peering.

Nsgs.NSGs. Nsgs ( 네트워크 보안 그룹 )를 사용 하 여 인터넷으로 들어오고 나가는 트래픽을 제한 합니다.Use network security groups (NSGs) to restrict traffic to and from the internet. 자세한 내용은 Microsoft 클라우드 서비스 및 네트워크 보안을 참조하세요.For more information, see Microsoft cloud services and network security.

DMZ.DMZ. NVA(네트워크 가상 어플라이언스)를 추가하여 인터넷과 Azure 가상 네트워크 사이에 DMZ를 만드는 것도 좋은 방법입니다.Consider adding a network virtual appliance (NVA) to create a DMZ between the Internet and the Azure virtual network. NVA는 방화벽, 패킷 조사, 감사, 사용자 지정 라우팅과 같은 네트워크 관련 작업을 수행하는 가상 어플라이언스를 통칭하는 용어입니다.NVA is a generic term for a virtual appliance that can perform network-related tasks, such as firewall, packet inspection, auditing, and custom routing. 자세한 내용은 Azure와 인터넷 사이에 DMZ 구현을 참조하세요.For more information, see Implementing a DMZ between Azure and the Internet.

암호화.Encryption. 중요한 미사용 데이터를 암호화하고 Azure Key Vault를 사용하여 데이터베이스 암호화 키를 관리합니다.Encrypt sensitive data at rest and use Azure Key Vault to manage the database encryption keys. Key Vault는 암호화 키를 HSM(하드웨어 보안 모듈)에 저장합니다.Key Vault can store encryption keys in hardware security modules (HSMs). 자세한 내용은 Azure VM에서 SQL Server에 대한 Azure Key Vault 통합 구성을 참조하세요.For more information, see Configure Azure Key Vault Integration for SQL Server on Azure VMs. 또한 Key Vault에 데이터베이스 연결 문자열과 같은 애플리케이션 비밀을 저장하는 것이 좋습니다.It's also recommended to store application secrets, such as database connection strings, in Key Vault.

DDoS 보호.DDoS protection. Azure 플랫폼은 기본적으로 기본 DDoS 보호를 제공합니다.The Azure platform provides basic DDoS protection by default. 이 기본 보호는 전체 Azure 인프라를 보호할 대상으로 지정합니다.This basic protection is targeted at protecting the Azure infrastructure as a whole. 기본 DDoS 보호가 자동으로 설정되지만 DDoS Protection 표준을 사용하는 것이 좋습니다.Although basic DDoS protection is automatically enabled, we recommend using DDoS Protection Standard. 표준 보호는 애플리케이션의 네트워크 트래픽 패턴을 기반으로 적응형 조정을 사용하여 위협을 검색합니다.Standard protection uses adaptive tuning, based on your application's network traffic patterns, to detect threats. 그러면 인프라 수준의 DDoS 정책에 의해 알려지지 않을 수 있는 DDoS 공격에 대한 완화를 적용할 수 있습니다.This allows it to apply mitigations against DDoS attacks that might go unnoticed by the infrastructure-wide DDoS policies. 표준 보호는 Azure Monitor를 통해 경고, 원격 분석 및 분석도 제공합니다.Standard protection also provides alerting, telemetry, and analytics through Azure Monitor. 자세한 내용은 Azure DDoS Protection: 모범 사례 및 참조 아키텍처를 참조하세요.For more information, see Azure DDoS Protection: Best practices and reference architectures.

DevOps 고려 사항DevOps considerations

이 아키텍처에서는 Azure 리소스 및 해당 종속성을 프로 비전 하는 [Azure 빌딩 블록 템플릿] [azbb]을 사용 합니다.In this architecture you use [Azure Building Blocks templates][azbb-template] for provisioning the Azure resources and its dependencies. 모든 주 리소스와 해당 종속성이 동일한 가상 네트워크에 있기 때문에 동일한 기본 작업으로 격리 되므로 워크 로드의 특정 리소스를 팀에 더 쉽게 연결 하 여 팀에서 해당 리소스의 모든 측면을 독립적으로 관리할 수 있습니다.Since all the main resources and their dependencies are in the same virtual network, they are isolated in the same basic workload, that makes it easier to associate the workload's specific resources to a team, so that the team can independently manage all aspects of those resources. 이 격리를 통해 DevOps에서 지속적인 통합 및 지속적인 업데이트 (CI/CD)를 수행할 수 있습니다.This isolation enables DevOps to perform continuous integration and continuous delivery (CI/CD).

또한 다양 한 배포 템플릿을 사용 하 여 몇 분 내에 다른 환경을 프로 비전 하는 Azure DevOps Services 와 통합할 수 있습니다. 예를 들어, 필요한 경우에만 프로덕션 시나리오를 복제 하거나 테스트 환경을 로드 하 여 비용을 절감할 수 있습니다.Also, you can use different deployment templates and integrate them with Azure DevOps Services to provision different environments in minutes, for example to replicate production like scenarios or load testing environments only when needed, saving cost.

이 시나리오로 가상 머신은 가상 머신 확장을 사용 하 여 구성 됩니다 .이는 맬웨어 방지 및 보안 에이전트와 같은 특정 추가 소프트웨어를 설치할 수 있는 가능성을 제공 하기 때문입니다.In this sceanario you virtual machines are configured by using Virtual Machine Extensions, since they offer the possibility of installing certain additional software, such as anti malware and security agents. Vm 확장은 VM을 만들 때만 설치 되 고 실행 됩니다.VM Extensions are installed and executed only at VM creation time. 즉, 운영 체제가 이후 단계에서 잘못 구성 된 경우 올바른 상태로 다시 이동 하려면 수동으로 작업 해야 합니다.That means if the Operating System gets configured incorrectly at a later stage, it will require a manual intervention to move it back to its correct state..

특히 DSC (필요한 상태 구성)에서 구성 관리 도구를 사용 하 여 Active Directory 및 SQL Server Always On 가용성 그룹을 구성할 수 있습니다.Configuration Management Tools, in particular Desired State Configuration (DSC), are used in this architecture to configure Active Directory and a SQL Server Always On Availability Group.

Azure Monitor를 사용하여 인프라의 성능을 분석 및 최적화하고 가상 머신에 로그인하지 않고 네트워킹 문제를 모니터링 및 진단하는 것이 좋습니다.Consider using the Azure Monitor to Analyze and optimize the performance of your infrastructure, Monitor and diagnose networking issues without logging into your virtual machines. Application Insights은 실제로 전체 Azure 가로의 상태를 확인 하기 위한 풍부한 메트릭과 로그를 제공 하는 Azure Monitor의 구성 요소 중 하나입니다.Application Insights is actually one of the components of Azure Monitor, which gives you rich metrics and logs to verify the state of your complete Azure landscape. Azure Monitor는 인프라의 상태를 준수 하는 데 도움이 됩니다.Azure Monitor will help you to follow the state of your infrastructure.

응용 프로그램의 데이터 계층 성능이 심각한 영향을 미칠 수 있으므로 응용 프로그램 코드를 지 원하는 계산 요소를 모니터링 하는 것은 물론 특히 데이터베이스에서 데이터 플랫폼을 모니터링 해야 합니다.Make sure not only to monitor your compute elements supporting your application code, but your data platform as well, in particular your databases, since a low performance of the data tier of an application could have serious consequences.

응용 프로그램이 실행 되는 Azure 환경을 테스트 하기 위해 응용 프로그램 코드와 동일한 메커니즘을 통해 버전 제어 및 배포 해야 하며, DevOps 테스트 패러다임을 사용 하 여 테스트 하 고 유효성을 검사할 수 있습니다.In order to test the Azure environment where the applications are running, it should be version-controlled and deployed through the same mechanisms as application code, then it can be tested and validated using DevOps testing paradigms too.

자세한 내용은 Azure Well-Architected Framework에서 작동 가능한 작업 섹션을 참조 하세요.For more information, see the Operational Excellence section in Azure Well-Architected Framework.

솔루션 배포Deploy the solution

이 참조 아키텍처에 대한 배포는 GitHub에서 사용할 수 있습니다.A deployment for this reference architecture is available on GitHub. 전체 배포는 AD DS를 구성 하는 스크립트 실행, Windows Server 장애 조치 (failover) 클러스터 및 SQL Server 가용성 그룹을 포함 하 여 최대 1 시간까지 걸릴 수 있습니다.The entire deployment can take up to an hour, which includes running the scripts to configure AD DS, the Windows Server failover cluster, and the SQL Server availability group.

가용성 영역을 지 원하는 지역을 지정 하면 Vm이 가용성 영역에 배포 됩니다.If you specify a region that supports availability zones, the VMs are deployed into availability zones. 그렇지 않으면 Vm이 가용성 집합에 배포 됩니다.Otherwise, the VMs are deployed into availability sets. 가용성 영역을 지 원하는 지역 목록은 지역별 서비스 지원을 참조 하세요.For a list of regions that support availability zones, see Services support by region.

사전 요구 사항Prerequisites

  1. 참조 아키텍처 GitHub 리포지토리의 zip 파일을 복제, 포크 또는 다운로드합니다.Clone, fork, or download the zip file for the reference architectures GitHub repository.

  2. Azure CLI 2.0을 설치합니다.Install Azure CLI 2.0.

  3. Node 및 NPM 설치Install Node and NPM

  4. Azure 빌딩 블록 npm 패키지를 설치합니다.Install the Azure building blocks npm package.

    npm install -g @mspnp/azure-building-blocks
    
  5. 명령 프롬프트, bash 프롬프트 또는 PowerShell 프롬프트에서 다음과 같은 Azure 계정에 로그인합니다.From a command prompt, bash prompt, or PowerShell prompt, sign into your Azure account as follows:

    az login
    

배포 단계Deployment steps

  1. 참조 아키텍처 GitHub 리포지토리의 virtual-machines\n-tier-windows 폴더로 이동합니다.Navigate to the virtual-machines\n-tier-windows folder of the reference architectures GitHub repository.

  2. n-tier-windows.json 파일을 엽니다.Open the n-tier-windows.json file.

  3. 파일에서 n-tier-windows.json 및의 모든 인스턴스를 검색 [replace-with-password] [replace-with-safe-mode-password] 하 고 강력한 암호로 바꿉니다.In the n-tier-windows.json file, search for all instances of [replace-with-password] and [replace-with-safe-mode-password] and replace them with a strong password. 파일을 저장합니다.Save the file.

    참고

    관리자 사용자 이름을 변경하는 경우 JSON 파일에서 extensions 블록을 업데이트해야 합니다.If you change the administrator user name, you must also update the extensions blocks in the JSON file.

  4. 다음 명령을 실행하여 아키텍처를 배포합니다.Run the following command to deploy the architecture.

    azbb -s <your subscription_id> -g <resource_group_name> -l <location> -p n-tier-windows.json --deploy
    
  5. 배포가 완료 되 면 Azure Portal 열고 리소스 그룹으로 이동 합니다.When the deployment is complete, open the Azure portal and navigate to the resource group. ' Sqlcw '로 시작 하는 저장소 계정을 찾습니다.Find the storage account that begins with 'sqlcw'. 클러스터의 클라우드 감시에 사용 되는 저장소 계정입니다.This is the storage account that will be used for the cluster's cloud witness. 저장소 계정으로 이동 하 여 액세스 키 를 선택 하 고 값을 복사 key1 합니다.Navigate into the storage account, select Access Keys, and copy the value of key1. 또한 저장소 계정의 이름을 복사 합니다.Also copy the name of the storage account.

  6. n-tier-windows-sqlao.json 파일을 엽니다.Open the n-tier-windows-sqlao.json file.

  7. 파일에서 n-tier-windows-sqlao.json 및의 모든 인스턴스를 검색 [replace-with-password] [replace-with-sql-password] 하 고 강력한 암호로 바꿉니다.In the n-tier-windows-sqlao.json file, search for all instances of [replace-with-password] and [replace-with-sql-password] and replace them with a strong password.

    참고

    관리자 사용자 이름을 변경하는 경우 JSON 파일에서 extensions 블록을 업데이트해야 합니다.If you change the administrator user name, you must also update the extensions blocks in the JSON file.

  8. 파일에서 n-tier-windows-sqlao.json 및의 모든 인스턴스를 검색 하 [replace-with-storageaccountname] [replace-with-storagekey] 고 5 단계의 값으로 바꿉니다.In the n-tier-windows-sqlao.json file, search for all instances of [replace-with-storageaccountname] and [replace-with-storagekey] and replace them with the values from step 5. 파일을 저장합니다.Save the file.

  9. 다음 명령을 실행 하 SQL Server Always On를 구성 합니다.Run the following command to configure SQL Server Always On.

    azbb -s <your subscription_id> -g <resource_group_name> -l <location> -p n-tier-windows-sqlao.json --deploy
    

다음 단계Next steps