Microsoft IIS 백엔드를 사용한 리전 간 부하 분산

이 가이드는 Google Compute Engine HTTP(S) 부하 분산기 서비스를 사용하여 여러 Compute Engine 리전Microsoft 인터넷 정보 서비스(IIS) 웹 서버에 트래픽을 분산하는 방법을 설명합니다.

시나리오

www.example.com 사이트의 트래픽 부하를 분산해야 합니다. 가장 가까운 리전으로 수신 요청을 라우팅하려고 합니다. 또한 장애가 발생하거나 리전에 있는 인스턴스가 한도 용량에 도달하면 그 다음으로 가까운 리전의 정상 인스턴스로 요청을 장애 조치할 수 있어야 합니다.

이 시나리오 구성을 마치면 단일 전역 IP 주소를 통해 요청을 처리하는 HTTP(S) 부하 분산기를 얻게 됩니다. 이 IP 주소를 사용하면 각 수신 요청을 연결 유형, 즉 HTTP 또는 HTTPS에 따라 라우팅할 수 있습니다. HTTPS 요청의 경우 부하 분산기에서 요청을 전송하는 클라이언트와 부하 분산기 간에 SSL/TLS 암호화를 구현할 것입니다.

다음 다이어그램은 부하 분산기 아키텍처를 보여줍니다.

리전 간 부하 분산 다이어그램

부하 분산기는 구성 가능성을 최대한 지원하기 위해 여러 가지 구성요소로 이루어져 있습니다. 각 구성 요소의 기능에 대한 설명은 HTTP(S) 부하 분산 개요를 참조하세요.

기본 요건

이 가이드는 다음과 같은 가정을 바탕으로 진행됩니다.

백엔드 인스턴스 설정

이 섹션에서는 서로 다른 리전에 두 백엔드 서비스를 만듭니다. 각 백엔드 서비스는 백엔드 인스턴스 2개를 포함하며 각 인스턴스는 Windows Server 2012에서 Microsoft IIS 웹 서버를 실행합니다. 각각의 서버를 힘들게 구성할 필요 없이 한 서버 인스턴스에서 디스크 이미지를 만든 후 이 이미지를 사용해 다른 서버 인스턴스를 만들면 됩니다.

소스 이미지 인스턴스 만들기

소스 이미지로 사용할 인스턴스를 만드는 방법은 다음과 같습니다.

  1. 로컬 Windows 머신에서 PowerShell을 엽니다.
  2. us-central1 리전의 새 Windows Server 2012 인스턴스를 만들고 해당 인스턴스에 rdp-tagwww-tag 태그를 추가합니다. 이후 이 태그를 타겟팅하는 방화벽 규칙을 만들어 인스턴스에 대한 외부 액세스를 사용 설정합니다.

    PS C:\> gcloud compute instances create src-img ^
         --zone us-central1-f --image windows-2012-r2 ^
         --tags rdp-tag,www-tag

소스 이미지 인스턴스를 만든 후 인스턴스에 대한 외부 액세스를 허용하도록 방화벽 규칙을 설정합니다.

  1. rdp-tag 태그가 지정된 모든 인스턴스에 포트 3389의 외부 액세스를 허용하는 방화벽 규칙을 만듭니다. 이 규칙을 사용하면 RDP를 통해 소스 이미지 인스턴스와 rdp-tag 태그를 사용하는 이후의 모든 인스턴스에 액세스할 수 있습니다.

    PS C:\> gcloud compute firewall-rules create rdp-rule ^
         --allow tcp:3389 --source-ranges 0.0.0.0/0 ^
         --target-tags rdp-tag
  2. www-tag 태그가 지정된 모든 인스턴스에 포트 80의 외부 액세스를 허용하는 또 다른 방화벽 규칙을 만듭니다. 이 규칙을 사용하면 소스 이미지 인스턴스와 www-tag 태그를 사용하는 이후의 모든 인스턴스에서 HTTP 트래픽을 주고 받을 수 있습니다.

     PS C:> gcloud compute firewall-rules create www-rule ^
         --allow tcp:80 --source-ranges 0.0.0.0/0 ^
         --target-tags www-tag

소스 이미지 인스턴스 구성

이제 소스 이미지 인스턴스에 새 Windows 사용자를 만들고 RDP 연결을 설정합니다.

  1. 웹브라우저에서 GCP ConsoleVM 인스턴스 페이지로 이동하고 소스 이미지 인스턴스의 이름(src-img)을 클릭합니다.
  2. Windows 비밀번호 설정 버튼을 클릭합니다.
  3. 새 Windows 비밀번호 설정 대화상자에서 사용자 이름을 추가하고 설정을 클릭해 인스턴스에 사용자 계정을 만듭니다.
  4. 제공된 비밀번호를 복사하고 대화상자를 닫습니다.
  5. 인스턴스의 콘솔 페이지에서 RDP를 클릭합니다.

    • Chrome RDP 확장 프로그램을 설치한 경우 확장 프로그램 창이 열립니다. 인스턴스 연결 의사를 확인하고 사용자 이름과 비밀번호를 입력한 후 확인을 클릭해 인스턴스에 연결합니다.
    • Chrome RDP 확장 프로그램을 설치하지 않기로 선택한 경우에는 인스턴스용 RDP 파일을 다운로드할 수 있는 옵션이 제공됩니다. 이 파일을 사용하여 Windows 원격 데스크톱 연결 또는 원하는 타사 클라이언트를 사용하는 인스턴스에 연결합니다.

소스 이미지 인스턴스를 사용해 RDP 연결을 설정한 후 IIS를 설치하고 기본 홈페이지를 추가합니다.

  1. 소스 이미지 인스턴스에서 PowerShell을 관리자 권한으로 엽니다.
  2. PowerShell에서 다음을 붙여넣어 IIS 서비스 및 종속 항목을 설치합니다.

    PS C:\> Dism /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /All
  3. 서비스를 설치한 후 IIS의 기본 웹 디렉토리인 C:\inetpub\wwwroot에 새 홈페이지를 만듭니다.

    PS C:\> Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html

소스 이미지 인스턴스의 콘텐츠 제공 확인

웹브라우저에서 VM 인스턴스 페이지로 이동합니다. 인스턴스의 외부 IP를 클릭해 인스턴스에서 앞서 만든 홈페이지를 제공하는지 확인합니다.

소스 이미지 인스턴스에서 재사용 가능한 Windows Server 2012 이미지 만들기

소스 이미지 인스턴스가 제대로 구성되었고 콘텐츠를 제공할 수 있는지 확인한 후 인스턴스의 루트 영구 디스크에서 재사용 가능한 디스크 이미지를 만듭니다.

  1. 소스 이미지 인스턴스에서 PowerShell을 관리자 권한으로 엽니다.
  2. 다음 명령어를 실행해 시스템의 복제를 준비합니다.

     PS C:> GCESysprep

    GCESysprep 작업이 완료되면 RDP 세션과의 연결이 자동으로 끊어집니다.

  3. 로컬 머신에서 루트 영구 디스크를 유지하면서 소스 인스턴스를 삭제하려면 다음 명령어를 실행합니다.

     PS C:> gcloud compute instances delete src-img --keep-disks boot

  4. 인스턴스를 삭제한 후 유지된 루트 영구 디스크에서 새 이미지를 만듭니다.

     PS C:> gcloud compute images create win-be-img --source-disk src-img --source-disk-zone us-central1-f

소스 이미지를 사용해 인스턴스 템플릿 만들기

구성된 Windows 서버에서 디스크 이미지를 만들었으므로 이제 이 이미지를 인스턴스 템플릿의 소스 이미지로 사용할 수 있습니다. 나중에 이 템플릿을 사용해 새 인스턴스를 만드는 관리형 인스턴스 그룹 2개를 구성할 것입니다.

로컬 머신에서 다음을 실행하고 win-be-img를 소스 이미지로, rdp-tagwww-tag를 인스턴스 태그로 사용해 인스턴스 템플릿을 만듭니다.

PS C:\> gcloud compute instance-templates create win-be-tmpl ^
    --tags rdp-tag,www-tag ^
    --image win-be-img

각 리전의 관리형 인스턴스 그룹 만들기

이제 각 리전의 관리형 인스턴스 그룹을 만듭니다. 각 인스턴스 그룹을 만들면 앞에서 정의한 인스턴스 템플릿에 따라 동일한 두 인스턴스로 그룹이 채워집니다. 나중에 이 인스턴스 그룹을 백엔드 대상으로 처리하도록 부하 분산기를 구성할 것입니다.

관리형 인스턴스 그룹을 만드는 방법은 다음과 같습니다.

  1. 로컬 머신에서 다음 명령어를 실행해 us-central1-f 영역에 새 관리형 인스턴스 그룹을 만들고 동일한 두 인스턴스로 채웁니다.

     PS C:> gcloud compute instance-groups managed create us-be-group ^
          --base-instance-name us ^
          --size 2 ^
          --zone us-central1-f ^
          --template win-be-tmpl

  2. europe-west1-d 영역에도 동일한 작업을 수행합니다.

    PS C:\> gcloud compute instance-groups managed create eu-be-group ^
          --base-instance-name eu ^
          --size 2 ^
          --zone europe-west1-d ^
          --template win-be-tmpl

백엔드 인스턴스의 실행 상태 확인

웹브라우저에서 VM 인스턴스 페이지로 이동합니다. 각 백엔드의 외부 IP를 클릭해 백엔드에서 앞서 만든 홈페이지를 제공하는지 확인합니다.

부하 분산 서비스 만들기 및 구성

Compute Engine 부하 분산 서비스는 여러 가지 구성요소로 이루어집니다. 이 섹션에서는 이러한 구성요소를 만들고 서로 연결합니다.

  1. 로컬 머신에서 다음을 실행하여 새 상태 확인을 만듭니다. 부하 분산기에서 이 상태 확인을 사용해 백엔드 인스턴스의 상태를 확인합니다.

    PS C:\> gcloud compute http-health-checks create basic-check
  2. 백엔드 서비스를 만듭니다.

    PS C:\> gcloud compute backend-services create be-srv ^
          --protocol HTTP --http-health-check basic-check
  3. 인스턴스 그룹을 백엔드 서비스의 백엔드 대상으로 추가합니다.

    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group us-be-group --zone us-central1-f
    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group eu-be-group --zone europe-west1-d
  4. 수신되는 모든 요청이 모든 인스턴스로 전달되는 기본 URL 맵을 만듭니다.

    PS C:\> gcloud compute url-maps create lb-map --default-service be-srv
  5. SSL 인증서 리소스를 만듭니다. 부하 분산기에서 이 리소스를 사용해 트래픽을 암호화하고 복호화합니다.

    이미 비공개 키 및 인증 기관의 SSL 인증서가 있는 경우 아래 명령어를 실행하고 이를 사용해 새로운 SSLCertificate 리소스를 만들 수 있습니다. 인증서가 없다면 테스트 용도의 자체 서명 인증서를 만들어 사용하면 됩니다. 자세한 내용은 SSL 인증서를 참조하세요.

    SSL 인증서 리소스를 만들려면 다음 명령어를 실행합니다. <crt_file_path>를 인증서의 로컬 파일 경로로, <key_file_path>를 비공개 키의 파일 경로로 바꿉니다.

    PS C:\> gcloud beta compute ssl-certificates create www-cert ^
    --certificate  --private-key 
  6. 대상 HTTP 및 HTTPS 프록시를 만들어 URL 맵에 요청을 라우팅합니다. 프록시는 HTTPS 부하 분산을 위해 SSL 인증서를 포함하는 부하 분산기의 일부분이므로 이 단계에서 인증서도 로드합니다.

     PS C:> gcloud compute target-http-proxies create http-lb-proxy ^
          --url-map lb-map
     PS C:> gcloud beta compute target-https-proxies create https-lb-proxy ^
          --url-map lb-map --ssl-certificate www-cert

  7. 부하 분산기가 트래픽을 안정적으로 수신할 수 있도록 전역 고정 IP 주소를 부하 분산기의 전역 전달 규칙에 할당해야 합니다. 전역 고정 IP 리소스를 만들려면 다음 명령어를 실행합니다.

     PS C:> gcloud compute addresses create lb-ip --global

    IP 주소를 메모해 둡니다.

  8. 수신되는 HTTP 및 HTTPS 요청을 처리하는 전역 전달 규칙 2개를 만듭니다. 각 전달 규칙은 지정된 IP 주소, IP 프로토콜, 포트에 따라 생성된 대상 프록시 중 하나로 트래픽을 전송합니다.

    다음 명령어의 <lb_ip_addr>을 이전 단계에서 만든 고정 IP 주소로 바꿉니다.

    PS C:\> gcloud compute forwarding-rules create http-fwd-rule ^
          --address  --global ^
          --target-http-proxy http-lb-proxy --port-range 80
    PS C:\> gcloud beta compute forwarding-rules create https-fwd-rule ^
          --address  --global ^
          --target-https-proxy https-lb-proxy --port-range 443

전역 전달 규칙을 만든 후 구성을 적용하기까지 몇 분이 걸릴 수 있습니다. 적용 진행 상황을 확인하려면 Google Cloud Platform Console에서 구성을 모니터링하거나 로컬 머신에서 다음 명령어를 실행합니다.

PS C:\> gcloud compute backend-services get-health be-srv

백엔드로 트래픽 전송

부하 분산 서비스를 구성했으므로 이제 전달 규칙으로 트래픽을 전송하고 다른 인스턴스로 분산되는 트래픽을 살펴볼 수 있습니다.

백엔드로 트래픽을 전송하는 방법은 다음과 같습니다.

  1. GCP Console에서 HTTP(S) 부하 분산기 페이지를 엽니다.
  2. 수신 트래픽 열의 IP 주소를 클릭합니다. 기본 홈페이지가 표시되어야 합니다.

백엔드 액세스 제한

모든 것이 제대로 작동하는지 확인한 후 HTTP(S) 트래픽이 부하 분산 서비스에서만 들어올 수 있도록 방화벽 규칙을 수정합니다.

  1. 로컬 머신에서 다음 명령어를 실행해 www-rule 방화벽 규칙을 업데이트합니다. 허용되는 소스 IP를 HTTP(S) 부하 분산 상태 확인 IP 범위인 130.211.0.0/22로 제한합니다.

    PS C:\> gcloud compute firewall-rules update www-rule ^
           --source-ranges 130.211.0.0/22 ^
           --target-tags www-tag
  2. 웹브라우저에서 VM 인스턴스 페이지로 이동합니다.

  3. 각 인스턴스를 클릭해 인스턴스에 지금 액세스할 수 없는지 확인합니다.

중단 시뮬레이션

하나의 리전에 있는 한 개 이상의 인스턴스에서 중단을 시뮬레이션하면 나머지 정상 인스턴스 간의 부하 분산이 어떻게 이루어질지 관찰할 수 있습니다.

인스턴스의 추가 요청 수신을 중지하는 방법은 다음과 같습니다.

  1. 인스턴스로의 RDP 연결을 설정합니다.
  2. 인스턴스에서 PowerShell을 관리자 권한으로 엽니다.
  3. 다음 명령어를 실행하여 인스턴스에 새 방화벽 규칙을 만듭니다. 이 명령어는 상태 검사기의 상태 확인 트래픽을 차단하고 부하 분산기에서 인스턴스로 향하는 새 HTTP 연결을 모두 막습니다.

    PS C:\> netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
  4. 로컬 머신에서 다음 명령어를 실행해 인스턴스가 UNHEALTHY 상태를 보고하는지 확인합니다.

    PS C:\> gcloud compute backend-services get-health be-srv
  5. 인스턴스가 UNHEALTHY 상태를 보고하기 시작하면 부하 분산기에 요청을 전송합니다. 정상 상태의 인스턴스만 응답해야 합니다.

  6. 중단 시뮬레이션을 완료한 후 방화벽 규칙을 삭제해 인스턴스 연결을 복원하면 됩니다. 비정상적인 인스턴스에서 PowerShell을 관리자 권한으로 열었다면 다음 명령어를 실행하여 규칙을 삭제합니다.

    PS C:\> netsh advfirewall firewall delete rule name="Outage Test"

삭제

Microsoft IIS 가이드를 완료했으면 이후에 요금이 청구되지 않도록 Google Cloud Platform에서 만든 리소스를 삭제할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

Cloud Platform 프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 프로젝트 페이지로 이동합니다.

    프로젝트 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

인스턴스 삭제

Compute Engine 인스턴스를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 다음 옆에 있는 체크박스를 클릭합니다. 삭제할 인스턴스
  3. 페이지 상단의 삭제 삭제를 클릭하여 인스턴스를 삭제합니다.

영구 디스크 삭제

Compute Engine 디스크를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 디스크 페이지로 이동합니다.

    디스크 페이지로 이동

  2. 다음 옆에 있는 체크박스를 클릭합니다. 삭제할 디스크
  3. 페이지 상단의 삭제 삭제를 클릭하여 디스크를 삭제합니다.

다음 단계

Compute Engine에서의 Windows 사용에 대해 자세히 알아보기

Compute Engine의 Windows 인스턴스에 관한 문서를 검토하세요.

다른 가이드 사용해 보기

다른 Google Cloud Platform 기능을 직접 사용해 보기. 가이드를 살펴보세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서