대상 풀에서 리전 백엔드 서비스로 네트워크 부하 분산기 전환

1. 소개

이 가이드에서는 기존 네트워크 부하 분산기를 대상 풀 백엔드에서 리전 백엔드 서비스로 전환하는 방법을 안내합니다.

학습할 내용

  • 리전별 백엔드 서비스의 이점 이해
  • 대상 풀이 있는 네트워크 부하 분산기 만들기
  • 대상 풀 유효성 검사 수행
  • 비관리형 인스턴스 그룹을 사용하여 리전별 백엔드 서비스 만들기
  • 대상 풀에서 백엔드 서비스로 마이그레이션 수행
  • 백엔드 서비스 유효성 검사 수행

필요한 항목

  • 부하 분산기 경험

2. 네트워크 부하 분산을 위한 리전별 백엔드 서비스 개요

Google Cloud 고객은 네트워크 부하 분산을 통해 Google Cloud 리전의 가상 머신 간에 외부 트래픽을 분산하는 강력한 도구를 사용할 수 있습니다. 고객이 더 간편하게 수신 트래픽을 관리하고 부하 분산기의 작동 방식을 제어할 수 있도록 최근 Google Cloud는 네트워크 부하 분산에 백엔드 서비스 지원을 추가했습니다. 이를 통해 배포 중인 고객에게 개선된 규모, 속도, 성능, 복원력이 제공되며 모두 쉽게 관리할 수 있습니다.

이제 Google Cloud는 네트워크 부하 분산으로 백엔드 서비스를 지원합니다. 이는 이전의 접근 방식인 대상 풀에 비해 크게 개선된 기능입니다. 백엔드 서비스는 부하 분산기가 수신 트래픽을 연결된 백엔드로 분산하는 방법을 정의하고 부하 분산기의 작동 방식을 세밀하게 제어합니다.

3. 리전 백엔드 서비스의 이점

리전 백엔드 서비스를 부하 분산기로 선택하면 환경에 많은 이점이 있습니다.

267db35a58145be.png

리전별 백엔드 서비스는 즉시 다음과 같은 기능을 제공합니다.

  • 통합 상태 확인을 통한 충실도 높은 상태 확인 - 이제 리전 백엔드 서비스를 통해 부하 분산 상태 확인 기능을 최대한 활용하여 기존 HTTP 상태 확인의 제약에서 벗어날 수 있습니다. 커스텀 요청 및 응답 문자열 또는 HTTPS를 지원하는 TCP 상태 점검은 규정 준수를 위해 네트워크 부하 분산 고객에게 흔히 요청되었습니다.
  • 장애 조치 그룹으로 복원력 향상 - 장애 조치 그룹을 사용하면 인스턴스 그룹을 기본 그룹으로 지정하고 다른 인스턴스를 보조 그룹으로 지정하고, 활성 그룹의 인스턴스 상태가 특정 기준점 미만이 되면 트래픽을 장애 조치할 수 있습니다. 장애 조치 메커니즘을 보다 세부적으로 제어하기 위해 연결 유지 또는 pacemaker와 같은 에이전트를 사용하고 백엔드 인스턴스 상태 변경에 따라 정상 또는 실패한 상태 점검을 표시할 수 있습니다.
  • 관리형 인스턴스 그룹을 통한 확장성 및 고가용성 - 리전 백엔드 서비스는 관리형 인스턴스 그룹을 백엔드로 지원합니다. 이제 백엔드 가상 머신 인스턴스의 템플릿을 지정하고 CPU 사용률 또는 기타 모니터링 측정항목에 따른 자동 확장을 활용할 수 있습니다.

이 외에도 연결 지향 프로토콜 (TCP)에 연결 드레이닝을 활용하고 대규모 배포에는 더 빠른 프로그래밍 시간을 활용할 수 있습니다.

Codelab 네트워크 토폴로지

이 가이드에서는 기존 네트워크 부하 분산기를 대상 풀 백엔드에서 리전 백엔드 서비스로 전환하는 방법을 안내합니다.

리전 백엔드 서비스로 이동하면 레거시가 아닌 상태 점검 (TCP, SSL, HTTP, HTTPS, HTTP/2), 관리형 인스턴스 그룹, 연결 드레이닝, 장애 조치 정책과 같은 기능을 활용할 수 있습니다.

이 가이드에서는 리전 백엔드 서비스를 대신 사용하도록 다음 샘플 대상 풀 기반 네트워크 부하 분산기를 전환하는 방법을 설명합니다.

b2ac8a09e53e27f8.png

이전: 대상 풀을 사용한 네트워크 부하 분산

백엔드 서비스 기반 네트워크 부하 분산기 배포는 다음과 같이 표시됩니다.

f628fdad64c83af3.png

이후: 리전 백엔드 서비스로 네트워크 부하 분산

이 예시에서는 us-central-1a 영역에 인스턴스 2개와 us-central-1c 영역에 인스턴스 2개가 있는 기존 대상 풀 기반 네트워크 부하 분산기가 있다고 가정합니다.

이러한 전환에 필요한 대략적인 단계는 다음과 같습니다.

  1. 대상 풀 인스턴스를 인스턴스 그룹으로 그룹화합니다. 백엔드 서비스는 관리형 또는 비관리형 인스턴스 그룹에서만 작동합니다. 단일 대상 풀에 배치할 수 있는 인스턴스 수에는 제한이 없지만 인스턴스 그룹에는 최대 크기가 있습니다. 대상 풀에 있는 최대 인스턴스 수가 이 최대 개수보다 많으면 백엔드를 여러 인스턴스 그룹에 분할해야 합니다. 기존 배포에 백업 대상 풀이 포함된 경우 해당 인스턴스에 대해 별도의 인스턴스 그룹을 만듭니다. 이 인스턴스 그룹이 장애 조치 그룹으로 구성됩니다.
  2. 리전 백엔드 서비스를 만듭니다. 배포에 백업 대상 풀이 포함된 경우 백엔드 서비스를 만드는 동안 장애 조치율을 지정해야 합니다. 이는 대상 풀 배포를 위해 이전에 구성된 장애 조치율과 일치해야 합니다.
  3. 이전에 만든 인스턴스 그룹을 백엔드 서비스에 추가합니다. 배포에 백업 대상 풀이 포함된 경우 백엔드 서비스에 추가할 때 해당 장애 조치 인스턴스 그룹을 --failover 플래그로 표시합니다.
  4. 새 백엔드 서비스를 가리키는 전달 규칙을 구성합니다. 다음 두 가지 옵션이 있습니다.
  • (권장) 백엔드 서비스를 가리키도록 기존 전달 규칙을 업데이트합니다. 또는
  • 백엔드 서비스를 가리키는 새 전달을 만듭니다. 이를 위해서는 부하 분산기의 프런트엔드에 대한 새 IP 주소를 만들어야 합니다. 그런 다음 DNS 설정을 수정하여 이전 대상 풀 기반 부하 분산기의 IP 주소에서 새 IP 주소로 원활하게 전환되도록 합니다.

자습형 환경 설정

  1. Cloud 콘솔에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

  1. 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.

이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 신규 사용자에게는 미화$300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

bce75f34b2c53987.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

f6ef2b5f13479f3a.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.

Cloud Shell에 로그인하여 프로젝트 ID 설정

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID

echo $projectid

4. VPC 네트워크 만들기

VPC 네트워크

Cloud Shell 사용

gcloud compute networks create network-lb --subnet-mode custom

서브넷 만들기

Cloud Shell 사용

gcloud compute networks subnets create network-lb-subnet \
        --network network-lb --range 10.0.0.0/24 --region us-central1

방화벽 규칙 만들기

Cloud Shell 사용

gcloud compute --project=$projectid firewall-rules create www-firewall-network-lb --direction=INGRESS --priority=1000 --network=network-lb --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=network-lb-tag

비관리형 인스턴스 만들기

영역당 인스턴스 2개, us-central1-a 및 us-central1-c

Cloud Shell에서 인스턴스 1 만들기

gcloud compute instances create www1 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-a \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"

Cloud Shell에서 인스턴스 2 만들기

gcloud compute instances create www2 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-a \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart 
echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"

Cloud Shell에서 인스턴스 3 만들기

gcloud compute instances create www3 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-c \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update 
sudo apt-get install apache2 -y 
sudo service apache2 restart 
echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"

Cloud Shell에서 인스턴스 4 만들기

gcloud compute instances create www4 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-c \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update 
sudo apt-get install apache2 -y 
sudo service apache2 restart
echo '<!doctype html><html><body><h1>www4</h1></body></html>' | tee /var/www/html/index.html"

이 VM 인스턴스에 외부 트래픽을 허용하는 방화벽 규칙 만들기

Cloud Shell 사용

gcloud compute --project=$projectid firewall-rules create www-firewall-network-lb --direction=INGRESS --priority=1000 --network=network-lb --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=network-lb-tag

부하 분산기의 고정 외부 IP 주소 만들기

Cloud Shell 사용

gcloud compute addresses create network-lb-ip-1 \
    --region us-central1

기존 HTTP 상태 점검 리소스 추가

Cloud Shell 사용

gcloud compute http-health-checks create basic-check

5. 전달 규칙 및 대상 풀 만들기

대상 풀 만들기

gcloud compute target-pools create www-pool \
            --region us-central1 --http-health-check basic-check

대상 풀(us-central1-a)에 인스턴스를 추가합니다.

gcloud compute target-pools add-instances www-pool \
--instances www1,www2 \
--instances-zone us-central1-a

대상 풀(us-central1-c)에 인스턴스를 추가합니다.

gcloud compute target-pools add-instances www-pool \
--instances www3,www4 \
--instances-zone us-central1-c

전달 규칙 추가

gcloud compute forwarding-rules create www-rule \
--region us-central1 \
--ports 80 \
--address network-lb-ip-1 \
--target-pool www-pool

대상 풀 기능 검증

부하 분산기 → 프런트엔드 (www-rule)를 선택하여 프런트엔드 IP 주소를 식별합니다.

워크스테이션 터미널에서 curl 명령어를 사용하여 외부 IP 주소에 액세스하고 대상 인스턴스 4개의 부하 분산을 관찰합니다. 확인이 완료되면 터미널을 닫습니다.

while true; do curl -m1 IP_ADDRESS; done

6. 네트워크 부하 분산기를 대상 풀에서 백엔드 서비스로 전환

백엔드 서비스를 위한 통합 상태 확인 만들기

gcloud compute health-checks create tcp my-tcp-health-check --port 80 --region us-central1

대상 풀의 기존 인스턴스에서 인스턴스 그룹 만들기

gcloud compute --project=$projectid instance-groups unmanaged create www-instance-group-central1a --zone=us-central1-a

gcloud compute --project=$projectid instance-groups unmanaged add-instances www-instance-group-central1a --zone=us-central1-a --instances=www1,www2

대상 풀의 기존 인스턴스에서 인스턴스 그룹 만들기

gcloud compute --project=$projectid instance-groups unmanaged create www-instance-group-central1c --zone=us-central1-c

gcloud compute --project=$projectid instance-groups unmanaged add-instances www-instance-group-central1c --zone=us-central1-c --instances=www3,www4

백엔드 서비스를 만들고 새로 만든 상태 점검과 연결

gcloud compute backend-services create my-backend-service --region us-central1 --health-checks my-tcp-health-check --health-checks-region us-central1 --load-balancing-scheme external

백엔드 서비스 구성 및 인스턴스 그룹 추가

gcloud compute backend-services add-backend my-backend-service --instance-group www-instance-group-central1a --instance-group-zone us-central1-a --region us-central1

gcloud compute backend-services add-backend my-backend-service --instance-group www-instance-group-central1c --instance-group-zone us-central1-c --region us-central1

백엔드 서비스를 지원하도록 기존 전달 규칙 업데이트

전달 규칙 이름은 ‘www-rule’입니다. 및 관련 IP 주소를 확인할 수 있습니다.

부하 분산기 → 프런트엔드 선택

또한 4개의 대상 풀을 살펴보면

부하 분산기 선택 → 'www-pool' 선택

기존 전달 규칙을 업데이트하여 트래픽을 백엔드 서비스로 라우팅

gcloud compute forwarding-rules set-target www-rule --region=us-central1 --backend-service my-backend-service --region us-central1

부하 분산기 'www-pool' 확인 더 이상 프런트엔드 'www-rule'로 구성되지 않습니다. (아래 스크린샷 참조)

부하 분산기 → www-pool을 선택합니다.

9a393b3ca4e0942c.png

프런트엔드 전달 규칙이 이제 부하 분산기 'my-backend-service'와 연결되어 있는지 검증

부하 분산기 → 프런트엔드 선택

규칙 이름은 ‘www-rule’입니다. IP 주소가 유지되고 부하 분산기 'my-backend-service'가 유지됨 현재 사용 중

워크스테이션 터미널에서 curl 명령어를 사용하여 외부 IP 주소에 액세스하고 새로 연결된 백엔드 서비스의 부하 분산을 관찰합니다. 확인이 완료되면 터미널을 닫습니다.

while true; do curl -m1 IP_ADDRESS; done

7. 정리 단계

gcloud compute forwarding-rules delete www-rule --region=us-central1 --quiet
 
gcloud compute backend-services delete my-backend-service --region us-central1 --quiet
 
gcloud compute target-pools delete www-pool --region us-central1 --quiet
 
gcloud compute addresses delete network-lb-ip-1 --region us-central1 --quiet

gcloud compute firewall-rules delete www-firewall-network-lb --quiet
 
gcloud compute instances delete www4 --zone us-central1-c --quiet
 
gcloud compute instances delete www3 --zone us-central1-c --quiet
 
gcloud compute instances delete www2 --zone us-central1-a --quiet

gcloud compute instances delete www1 --zone us-central1-a --quiet
 
gcloud compute networks subnets delete network-lb-subnet --region us-central1 --quiet

gcloud compute networks delete network-lb --quiet

gcloud compute instance-groups unmanaged delete www-instance-group-central1a --zone us-central1-a --quiet

gcloud compute instance-groups unmanaged delete www-instance-group-central1c --zone us-central1-c --quiet

8. 축하합니다.

축하합니다. Codelab을 완료했습니다.

학습한 내용

  • 리전별 백엔드 서비스의 이점 이해
  • 대상 풀이 있는 네트워크 부하 분산기 만들기
  • 대상 풀 유효성 검사 수행
  • 비관리형 인스턴스 그룹을 사용하여 리전별 백엔드 서비스 만들기
  • 대상 풀에서 백엔드 서비스로 마이그레이션 수행
  • 백엔드 서비스 유효성 검사 수행