Test/Cloud

GCP_Cloud Load Balancing

kiostory 2020. 8. 7. 16:38

https://cloud.google.com/load-balancing/docs

 

Cloud Load Balancing 문서  |  부하 분산  |  Google Cloud

HTTP(S), 내부, TCP/SSL, UDP 등 다양한 부하 분산 옵션에 관한 문서

cloud.google.com

 

네트워크 및 HTTP 부하 분산기 설정하기

 

Cloud Shell에서 기본 영역을 설정합니다.

gcloud config set compute/zone us-central1-a

 

기본 리전을 설정합니다.

gcloud config set compute/region us-central1

 

리전 및 영역 문서에서 리전 및 영역 선택에 관해 자세히 알아보세요.

참고: 내 머신에서 gcloud를 실행하면 다른 세션에서도 config 설정이 유지됩니다. Cloud Shell에서는 신규 세션 시작 또는 재연결 시마다 새로 설정해야 합니다.

 

 

 

---------------------------------------------------

 

 

 

여러 웹 서버 인스턴스 만들기

머신 클러스터에서 제공하는 것을 시뮬레이션하려면 인스턴스 템플릿  관리 형 인스턴스 그룹을 사용하여 정적 콘텐츠를 제공하는 간단한 Nginx 웹 서버 클러스터를 만듭니다 . 인스턴스 템플릿은 클러스터의 모든 가상 머신 (디스크, CPU, 메모리 등)의 모양을 정의합니다. 관리 형 인스턴스 그룹은 인스턴스 템플릿을 사용하여 여러 가상 머신 인스턴스를 인스턴스화합니다.

Nginx 웹 서버 클러스터를 생성하려면 다음을 생성합니다.

  • 시작시 모든 가상 머신 인스턴스에서 Nginx 서버를 설정하는 데 사용할 시작 스크립트
  • 시작 스크립트를 사용하기위한 인스턴스 템플릿
  • 타겟 풀
  • 인스턴스 템플릿을 사용하는 관리 형 인스턴스 그룹

여전히 Cloud Shell에서 모든 가상 머신 인스턴스에서 사용할 시작 스크립트를 만듭니다. 이 스크립트는 시작시 Nginx 서버를 설정합니다.

cat << EOF > startup.sh #! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"\$HOSTNAME"'/' /var/www/html/index.nginx-debian.html EOF

시작 스크립트를 사용하는 인스턴스 템플릿을 만듭니다.

gcloud compute instance-templates create nginx-template \ --metadata-from-file startup-script=startup.sh

(산출)

Created [...]. NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP nginx-template n1-standard-1 2015-11-09T08:44:59.007-08:00

대상 풀을 만듭니다. 대상 풀은 그룹의 모든 인스턴스에 대한 단일 액세스 포인트를 허용하며 향후 단계의로드 밸런싱에 필요합니다.

gcloud compute target-pools create nginx-pool

(산출)

Created [...]. NAME REGION SESSION_AFFINITY BACKUP HEALTH_CHECKS nginx-pool us-central1

인스턴스 템플릿을 사용하여 관리 형 인스턴스 그룹을 만듭니다.

gcloud compute instance-groups managed create nginx-group \ --base-instance-name nginx \ --size 2 \ --template nginx-template \ --target-pool nginx-pool

(산출)

Created [...]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED nginx-group us-central1-a zone nginx 0 2 nginx-template no

접두사가 붙은 이름을 가진 2 개의 가상 머신 인스턴스가 생성됩니다 nginx-. 몇 분 정도 걸릴 수 있습니다.

Compute Engine 인스턴스를 나열하면 생성 된 모든 인스턴스가 표시됩니다.

gcloud compute instances list

(산출)

NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS nginx-7wvi us-central1-a n1-standard-1 10.240.X.X X.X.X.X RUNNING nginx-9mwd us-central1-a n1-standard-1 10.240.X.X X.X.X.X RUNNING

이제 EXTERNAL_IP주소 를 통해 포트 80의 컴퓨터에 연결할 수 있도록 방화벽을 구성 합니다.

gcloud compute firewall-rules create www-firewall --allow tcp:80

http://EXTERNAL_IP/이전 명령을 실행 한 결과 표시된대로 외부 IP 주소를 통해 각 인스턴스에 연결할 수 있어야합니다 .

실습 진행 상황을 확인하십시오. 아래의 내 진행 상황 확인을 클릭 하여 웹 서버 그룹을 만들 었는지 확인하십시오 .

 

웹 서버 그룹 만들기

Check my progress

Network Load Balancer 생성

네트워크 부하 분산을 사용하면 주소, 포트 및 프로토콜 유형과 같은 수신 IP 프로토콜 데이터를 기반으로 시스템 부하의 균형을 맞출 수 있습니다. HTTP (S) 부하 분산과 함께 사용할 수없는 몇 가지 옵션도 제공됩니다. 예를 들어 SMTP 트래픽과 같은 추가 TCP / UDP 기반 프로토콜의 부하를 분산 할 수 있습니다. 애플리케이션이 TCP 연결 관련 특성에 관심이있는 경우 네트워크 부하 분산을 사용하면 앱에서 패킷을 검사 할 수 있지만 HTTP (S) 부하 분산은 그렇지 않습니다.

자세한 내용은 네트워크 부하 분산 설정을 참조하십시오 .

인스턴스 그룹을 대상으로하는 L3 네트워크 부하 분산기를 만듭니다.

gcloud compute forwarding-rules create nginx-lb \ --region us-central1 \ --ports=80 \ --target-pool nginx-pool

(산출)

Created [https://www.googleapis.com/compute/v1/projects/...].

프로젝트의 모든 Compute Engine 전달 규칙을 나열합니다.

gcloud compute forwarding-rules list

(산출)

NAME REGION IP_ADDRESS IP_PROTOCOL TARGET nginx-lb us-central1 X.X.X.X TCP us-central1/targetPools/nginx-pool

그런 다음 이전 명령을 실행 한 결과로 표시된 주소가있는 브라우저 http://IP_ADDRESS/에서 로드 밸런서를 방문 할 수 있습니다 IP_ADDRESS.

실습 진행 상황을 확인하십시오. 아래의 내 진행 상황 확인을 클릭 하여 웹 서버를 가리키는 L3 Network Load Balancer를 생성했는지 확인하십시오.

 

웹 서버를 가리키는 L3 Network Load Balancer 생성

Check my progress

HTTP (s)로드 밸런서 생성

HTTP (S) 부하 분산은 인스턴스로 향하는 HTTP (S) 요청에 대한 전역 부하 분산을 제공합니다. 일부 URL은 한 인스턴스 세트로 라우팅하고 다른 URL은 다른 인스턴스로 라우팅하는 URL 규칙을 구성 할 수 있습니다. 해당 그룹에 충분한 용량이 있고 요청에 적합한 경우 요청은 항상 사용자에게 가장 가까운 인스턴스 그룹으로 라우팅됩니다. 가장 가까운 그룹에 용량이 충분하지 않으면 요청은 용량이있는 가장 가까운 그룹으로 전송됩니다.

문서에서 HTTP (s) 부하 분산기에 대해 자세히 알아보세요 .

먼저 상태 확인을 만듭니다 . 상태 확인은 인스턴스가 HTTP 또는 HTTPS 트래픽에 응답하는지 확인합니다.

gcloud compute http-health-checks create http-basic-check

(산출)

Created [https://www.googleapis.com/compute/v1/projects/...]. NAME HOST PORT REQUEST_PATH http-basic-check 80 /

HTTP 서비스를 정의하고 포트 이름을 인스턴스 그룹의 관련 포트에 매핑합니다. 이제 부하 분산 서비스는 트래픽을 명명 된 포트로 전달할 수 있습니다.

gcloud compute instance-groups managed \ set-named-ports nginx-group \ --named-ports http:80

(산출)

Updated [https://www.googleapis.com/compute/v1/projects/...].

백엔드 서비스 만들기 :

gcloud compute backend-services create nginx-backend \ --protocol HTTP --http-health-checks http-basic-check --global

(산출)

Created [https://www.googleapis.com/compute/v1/projects/...]. NAME BACKENDS PROTOCOL nginx-backend HTTP

백엔드 서비스에 인스턴스 그룹을 추가합니다.

gcloud compute backend-services add-backend nginx-backend \ --instance-group nginx-group \ --instance-group-zone us-central1-a \ --global

(산출)

Updated [https://www.googleapis.com/compute/v1/projects/...].

모든 수신 요청을 모든 인스턴스로 보내는 기본 URL 맵을 만듭니다.

gcloud compute url-maps create web-map \ --default-service nginx-backend

(산출)

Created [https://www.googleapis.com/compute/v1/projects/...]. NAME DEFAULT_SERVICE Web-map nginx-backend

요청되는 URL에 따라 트래픽을 다른 인스턴스로 전달하려면 콘텐츠 기반 라우팅을 참조하세요 .

URL 맵으로 요청을 라우팅 할 대상 HTTP 프록시를 만듭니다.

gcloud compute target-http-proxies create http-lb-proxy \ --url-map web-map

(산출)

Created [https://www.googleapis.com/compute/v1/projects/...]. NAME URL_MAP http-lb-proxy web-map

수신 요청을 처리하고 라우팅하는 전역 전달 규칙을 만듭니다. 전달 규칙은 지정된 IP 주소, IP 프로토콜 및 포트에 따라 특정 대상 HTTP 또는 HTTPS 프록시로 트래픽을 보냅니다. 전역 전달 규칙은 여러 포트를 지원하지 않습니다.

gcloud compute forwarding-rules create http-content-rule \ --global \ --target-http-proxy http-lb-proxy \ --ports 80

(산출)

Created [https://www.googleapis.com/compute/v1/projects/...].

전역 전달 규칙을 만든 후 구성이 적용되는 데 몇 분 정도 걸릴 수 있습니다.

gcloud compute forwarding-rules list

(산출)

NAME REGION IP_ADDRESS IP_PROTOCOL TARGET http-content-rule X.X.X.X TCP http-lb-proxy nginx-lb us-central1 X.X.X.X TCP us-central1/....

전달 규칙에 대한 http-content-rule IP_ADDRESS를 기록해 둡니다.

브라우저에서에 연결할 수 있어야합니다 http://IP_ADDRESS/. 3 ~ 5 분 정도 걸릴 수 있습니다. 연결되지 않으면 잠시 기다린 후 브라우저를 다시로드하십시오.