이 문서는 설계자와 운영 및 관리 팀. 이 문서는 사용할 수 있는 예제 패턴을 설명합니다. Google Cloud의 자체 배포용. 이 패턴에서 로드 밸런서는 트래픽을 컴퓨팅 엔진 인스턴스 관리형 인스턴스 그룹 콘텐츠를 제공합니다. 중단 시 업데이트 외부 HTTP(S) 부하 분산 정적 사이트로 구성 및 페일오버 클라우드 스토리지. 이 자습서를 완료하려면 사용자가 제어하는 ​​등록된 도메인 이름이 필요합니다. 이 문서와 함께 사용하고 싶습니다. 프로덕션 배포에서 웹 사이트에는 더 많은 파일과 관리형 인스턴스 그룹 가상 머신의 추가 애플리케이션 코드 (VM) 이 문서에 표시된 것보다 그런 다음 Cloud Storage는 더 많은 최소한의 기능을 제공하는 제한된 정적 버전. 웜 장애 조치에서 시나리오에서 사용자는 관리형 인스턴스 그룹이 완전한 웹 사이트 경험을 위해 트래픽을 복구하고 제공할 수 있습니다. 이 자습서에서는 리소스를 배포하여 다음과 같이 환경을 생성합니다. 다음 이미지: 장애 조치가 필요한 경우 로드 밸런서 구성을 직접 업데이트합니다. 다음 이미지와 같이 Cloud Storage에 대한 트래픽: 이 웜 장애 조치 패턴은 다른 관리형 실행 비용의 균형을 맞춥니다. 기본 지역일 때만 사용하는 다른 지역의 인스턴스 그룹 실패하다. Cloud Storage를 사용하는 정적 사이트 비용은 실행하는 것보다 저렴합니다. 다른 관리형 인스턴스 그룹이지만 로드를 업데이트할 때 약간의 지연이 있습니다. 호스팅 옵션 간의 밸런서 구성. 제한된 웹 사이트 Cloud Storage에서의 경험은 사용할 수 없는 웹사이트보다 낫고 열악합니다. 고객 경험. 외부 대신 Cloud DNS를 사용하는 대체 접근 방식 장애 조치를 제어하기 위한 HTTP(S) 부하 분산은 다음을 참조하세요. Compute Engine 및 Cloud Storage와 함께 Cloud DNS를 사용하여 웜 복구 가능한 웹 서버를 배포합니다. 이 패턴은 Cloud DNS가 있거나 사용하려는 경우에 유용합니다. Google Cloud에서 안정적인 애플리케이션을 실행하려면 다음을 설계하는 것이 좋습니다. 중단을 처리하기 위한 애플리케이션 인프라. 애플리케이션에 따라 및 비즈니스 요구 사항에 따라 콜드 장애 조치, 웜 장애 조치 또는 핫 장애 조치가 필요할 수 있습니다. 장애 조치 패턴. 최적의 접근 방식을 결정하는 방법에 대한 자세한 내용은 자신의 응용 프로그램은 다음을 참조하십시오. 재해 복구 계획 가이드. 이 문서는 기본 아파치 웹 서버, 그러나 인프라 배포에 대한 동일한 접근 방식은 다른 생성해야 하는 애플리케이션 환경. ## 목표 - - 커스텀 VM 이미지로 지역 관리형 인스턴스 그룹을 만듭니다. - Cloud Storage 버킷을 만듭니다. - 외부 HTTP(S) 부하 분산을 만들고 구성합니다. - 업데이트된 로드 밸런서를 사용하여 웜 웹 서버 장애 조치 테스트 구성. - 업데이트된 로드 밸런서 구성으로 복구 및 장애 복구를 테스트합니다. ## 비용 이 가이드에서는 청구 가능한 다음 Google Cloud 구성요소를 사용합니다. - - 컴퓨팅 엔진 - 네트워킹 - 클라우드 스토리지 예상 사용량을 기반으로 비용 견적을 생성하려면 가격 계산기를 사용하십시오. ## 시작하기 전에 - - Google Cloud 계정에 로그인합니다. 당신이 처음이라면 구글 클라우드, 우리 제품이 어떻게 수행되는지 평가하기 위해 계정을 만드십시오. 실제 시나리오. 신규 고객은 $300의 무료 크레딧을 받을 수 있습니다. 워크로드를 실행, 테스트 및 배포합니다. - Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다. - 클라우드 프로젝트에 결제가 사용 설정되어 있는지 확인하세요. 하는 법을 배우다 프로젝트에서 결제가 사용 설정되어 있는지 확인하세요. - Compute Engine API를 사용 설정합니다. - Google Cloud CLI를 설치하고 초기화합니다. - Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다. - 클라우드 프로젝트에 결제가 사용 설정되어 있는지 확인하세요. 하는 법을 배우다 프로젝트에서 결제가 사용 설정되어 있는지 확인하세요. - Compute Engine API를 사용 설정합니다. - Google Cloud CLI를 설치하고 초기화합니다. 다음에서 Google Cloud CLI를 실행할 수 있습니다. 설치하지 않고 콘솔 구글 클라우드 CLI. 다음에서 gcloud CLI를 실행하려면 콘솔, Cloud Shell 사용 ## 환경 준비 이 섹션에서는 리소스 이름에 대한 몇 가지 변수를 정의하고 위치. 이러한 변수는 Google Cloud CLI 명령에서 다음과 같이 사용됩니다. 리소스를 배포합니다. 달리 명시되지 않는 한 이 문서 전체에서 모든 명령을 입력합니다. 클라우드 쉘 또는 로컬 개발 환경. - 바꾸다 자신의 프로젝트 ID로. 원한다면, 리소스를 검색하고 식별하는 데 도움이 되는 고유한 이름 접미사를 제공합니다. 그들과 같은 프로젝트_ID 앱 다음과 같이 두 지역을 지정합니다. 그리고 미국 서부1 및 해당 지역 중 하나 내의 영역(예: 미국-서부2 . 이 영역은 초기 기본 VM이 있는 위치를 정의합니다. 관리형 인스턴스 그룹의 이미지를 만드는 데 사용되는 생성 미국 서부1-a 마지막으로 다음과 같이 정적 웹사이트에 사용되는 도메인을 설정합니다. example.com 프로젝트_ID= 프로젝트_ID NAME_SUFFIX= 앱 REGION1= 미국-서부1 REGION2= 미국-서부2 구역= us-west1-a 도메인= example.com ## VPC 및 서브넷 생성 VM에 대한 네트워크 액세스를 제공하려면 Virtual Private Cloud(VPC)를 생성합니다. 그리고 서브넷. 두 지역에 관리형 인스턴스 그룹이 필요하므로 하나를 만듭니다. 각 지역의 서브넷. 맞춤의 장점에 대한 자세한 내용은 사용자 환경에서 사용 중인 IP 주소 범위를 관리하기 위한 서브넷 모드, 참조 커스텀 모드 VPC 네트워크를 사용합니다. - 사용자 지정 서브넷 모드로 VPC를 생성합니다. gcloud compute networks create network-$NAME_SUFFIX --subnet-mode=custom 이제 새 VPC에 각각 하나씩 두 개의 서브넷을 만듭니다. 지역. 다음과 같은 고유한 주소 범위를 정의합니다. 그리고 10.1.0.0/20 , 저것 네트워크 범위에 적합: 10.2.0.0/20 gcloud compute networks subnets create n subnet-$NAME_SUFFIX-$REGION1 n --network=network-$NAME_SUFFIX n --range= 10.1.0.0/20n --지역=$REGION1 gcloud compute networks subnets create n subnet-$NAME_SUFFIX-$REGION2 n --network=network-$NAME_SUFFIX n --range= 10.2.0.0/20n --region=$REGION2 ## 방화벽 규칙 만들기 네트워크 트래픽이 VPC에서 올바르게 흐르도록 하려면 다음을 사용하십시오. 방화벽 규칙. - 로드에 대한 웹 트래픽 및 상태 확인을 허용하는 방화벽 규칙 생성 밸런서 및 관리형 인스턴스 그룹: gcloud compute firewall-rules create allow-http-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --direction=INGRESS n --priority=1000 n --action=ALLOW n --rules=tcp:80 n -- 소스 범위=0.0.0.0/0 n --target-tags=http-서버 gcloud compute firewall-rules create allow-health-check-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --action=allow n --direction=ingress n --source-ranges=130.211.0.0/22,35.191. 0.0/16 n --target-tags=allow-health-check n --rules=tcp:80 HTTP 규칙은 다음과 같은 모든 VM에 대한 트래픽을 허용합니다. http-servertag가 적용되고, 그리고 다음을 사용하는 모든 소스에서 0.0.0.0/0 범위. 을 위해 건강 검진 규칙, Google Cloud의 기본 범위는 플랫폼이 올바르게 리소스의 상태를 확인합니다. 기본 VM 이미지의 초기 구성에 SSH 트래픽을 허용하려면 범위 방화벽 규칙을 사용하여 환경에 --소스-범위 매개변수. 어떤 소스 범위를 결정하려면 네트워크 팀과 협력해야 할 수 있습니다. 조직에서 사용하는 바꾸다 고유한 IP 주소 범위 사용: IP_ADDRESS_SCOPE gcloud compute firewall-rules create allow-ssh-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --direction=INGRESS n --priority=1000 n --action=ALLOW n --rules=tcp:22 n -- 소스 범위= IP_ADDRESS_SCOPE 방화벽 규칙을 생성한 후 세 가지 규칙이 적용되었는지 확인하십시오. 추가: gcloud compute firewall-rules list n --project=$PROJECT_ID n --filter="NETWORK=network-$NAME_SUFFIX"다음 예제 출력은 세 가지 규칙이 올바르게 수행되었음을 보여줍니다. 만들어진: 이름 네트워크 방향 우선 순위 허용 allow-health-check-app network-app INGRESS 1000 tcp:80 allow-http-app network-app INGRESS 1000 tcp:80 allow-ssh-app network-app INGRESS 1000 tcp:22 ## 기본 VM 이미지 생성 및 구성 추가 구성 없이 배포하는 동일한 VM을 만들려면 커스텀 VM 이미지를 사용하세요. 이 이미지는 OS 및 Apache 구성을 캡처하고 다음 단계에서 관리형 인스턴스 그룹에 각 VM을 만드는 데 사용됩니다. VM에서 기본 영구 디스크의 index.html 파일 및 마운트 /var/www/example.com. 다음 위치에 있는 Apache 구성 파일 /etc/apache2/sites-available/example.com.conf는 마운트된 영구 디스크 위치 다음 다이어그램은 저장된 Apache에서 제공하는 기본 HTML 페이지를 보여줍니다. 영구 디스크에서: 다음 단계에서 이 환경을 구축합니다. - 영구 디스크가 연결된 기본 VM을 만듭니다. gcloud 컴퓨팅 인스턴스 생성 vm-base-$NAME_SUFFIX n --zone=$ZONE n --machine-type=n1-standard-1 n --subnet=subnet-$NAME_SUFFIX-$REGION1 n --tags=http-server n --image=debian-10-buster-v20210420 n --image-project=debian-cloud n --boot-disk-size=10GB n --boot-disk-type=pd-balanced n --boot-disk- device-name=vm-base-$NAME_SUFFIX n --create-disk=type=pd-ssd,name=disk-base-$NAME_SUFFIX,크기=10GB,device-name=disk-base-$NAME_SUFFIX 이 문서의 시작 부분에 정의된 매개변수를 사용하여 VM의 이름을 지정하고 올바른 서브넷에 연결하십시오. 이름은 다음 매개변수에서도 지정됩니다. 부팅 디스크 및 데이터 디스크. 간단한 웹 사이트를 설치 및 구성하려면 다음을 사용하여 기본 VM에 연결합니다. SSH: gcloud compute ssh vm-base-$NAME_SUFFIX --zone=$ZONE VM에 대한 SSH 세션에서 VM을 구성하는 스크립트를 생성합니다. 당신의 선택의 편집자. 다음 예제는 나노 편집자: 나노 구성 VM. 다음 구성 스크립트를 파일에 붙여넣습니다. 빈/배시 NAME_SUFFIX= 앱 # 기본 웹사이트 파일을 위한 디렉토리 생성 sudo mkdir -p /var/www/example.com sudo chmod a+w /var/www/example.com sudo chown -R www-데이터: /var/www/example.com # 디스크 이름을 찾은 다음 포맷하고 마운트 DISK_NAME="google-disk-base-$NAME_SUFFIX"DISK_PATHfind /dev/disk/by-id -name DISK_NAME}"| xargs -Ireadlink -f n sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,$DISK_PATH 폐기 sudo 마운트 -o 폐기, 기본값 $DISK_PATH /var/www/example.com # 아파치 설치 sudo apt-get 업데이트&& sudo apt-get -y install apache2 # 마운트된 영구 디스크에 기본 HTML 파일을 씁니다. sudo 티 -a /var/www/example.com/index.html >/dev/null EOF' HA / DR 예시

Cloud Storage로의 웜 장애 조치가 포함된 Compute Engine 웹사이트에 오신 것을 환영합니다p>

*:80> ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/example.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined EOF # Apache 구성 파일을 활성화하고 서비스를 다시 로드합니다. sudo a2dissite 000-기본값 sudo a2ensite example.com.conf sudo systemctl reload apache2 업데이트 에 설정된 값과 일치하는 변수 이 문서의 시작 부분(예: NAME_SUFFIX 앱. 파일을 작성하고 편집기를 종료하십시오. 예를 들어 Nano에서는 다음을 사용합니다. Ctrl-O를 눌러 파일을 작성한 다음 종료합니다. Ctrl-X. 구성 스크립트를 실행 가능하게 만든 다음 실행합니다. chmod +x configure-vm../configure-vm. VM에 대한 SSH 세션을 종료합니다. 출구 VM의 IP 주소를 가져와서 사용 curl기본 웹 페이지를 보려면 다음을 수행하십시오. curl $(gcloud 컴퓨팅 인스턴스는 vm-base-$NAME_SUFFIX n --zone $ZONE n --format="value(networkInterfaces.accessConfigs.[0].natIPn을 설명합니다. 다음 예제 출력과 같이 기본 웹 사이트가 반환됩니다. HA / DR 예시

Cloud Storage로의 웜 장애 조치가 포함된 Compute Engine 웹사이트에 오신 것을 환영합니다p>

gcloud compute images create image-disk-$NAME_SUFFIX n --source-disk=disk-base-$NAME_SUFFIX n --source-disk-zone=$ZONE # 인스턴스 템플릿 생성 gcloud compute instance-templates create template-$NAME_SUFFIX-$REGION1 n --machine-type=n1-standard-1 n --subnet=projects/$PROJECT_ID/regions/$REGION1/subnetworks/subnet-$NAME_SUFFIX-$REGION1 n --region=$REGION1 n --tags=http-server n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ 값\ /dev/sdb /var/www/example. com\ ext4\ 폐기,기본값,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -an --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,자동 삭제=예 gcloud compute instance-templates create template-$NAME_SUFFIX-$REGION2 n --machine-type=n1-standard-1 n --subnet=projects/$PROJECT_ID/regions/$REGION2/subnetworks/subnet-$NAME_SUFFIX-$REGION2 n --region=$REGION2 n --tags=http-server n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ 값\ /dev/sdb /var/www/example. com\ ext4\ 폐기,기본값,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -an --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,자동 삭제=예 # VM 인스턴스에 대한 상태 확인 만들기 gcloud compute health-checks create http-basic-check-$NAME_SUFFIX n --port 80 # 관리형 인스턴스 그룹 만들기 gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$REGION1 n --template=template-$NAME_SUFFIX-$REGION1 n --size=2 n --region=$REGION1 n --health-check=http- 기본 확인-$NAME_SUFFIX gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$REGION2 n --template=template-$NAME_SUFFIX-$REGION2 n --size=2 n --region=$REGION2 n --health-check=http- 기본 확인-$NAME_SUFFIX ## 로드 밸런서 생성 및 구성 사용자가 웹 사이트에 액세스하려면 VM을 통과하는 트래픽을 허용해야 합니다. 관리형 인스턴스 그룹에서 실행되는 또한 자동으로 리디렉션하고 싶습니다. 관리형 인스턴스 그룹에 영역 장애가 있는 경우 새 VM에 대한 트래픽. 다음 섹션에서는 외부 로드 밸런서 포트의 HTTP 트래픽에 대한 백엔드 서비스 사용 80, 이전 단계에서 만든 상태 확인을 사용하고 외부 IP를 매핑합니다. 백엔드 서비스를 통해 주소를 지정합니다. 자세한 내용은 다음을 참조하십시오. 간단한 외부 HTTP 부하 분산기를 설정하는 방법입니다. - 애플리케이션에 대한 로드 밸런서를 만들고 구성합니다. # HTTP 포트 80에 대한 포트 규칙 구성 gcloud compute instance-groups set-named-ports n instance-group-$NAME_SUFFIX-$REGION1 n --named-ports http:80 n --region $REGION1 gcloud compute instance-groups set-named-ports n instance-group-$NAME_SUFFIX-$REGION2 n --named-ports http:80 n --region $REGION2 # 백엔드 서비스를 만들고 여기에 관리형 인스턴스 그룹을 추가합니다. gcloud compute backend-services create n web-backend-service-$NAME_SUFFIX n --protocol=HTTP n --port-name=http n --health-checks=http-basic-check-$NAME_SUFFIX n --global gcloud compute backend-services add-backend n web-backend-service-$NAME_SUFFIX n --instance-group=instance-group-$NAME_SUFFIX-$REGION1 n --instance-group-region=$REGION1 n --global gcloud compute backend-services add-backend n web-backend-service-$NAME_SUFFIX n --instance-group=instance-group-$NAME_SUFFIX-$REGION2 n --instance-group-region=$REGION2 n --global # 백엔드 서비스를 위한 URL 맵 생성 gcloud compute url-maps create web-map-http-$NAME_SUFFIX n --default-service web-backend-service-$NAME_SUFFIX # HTTP 트래픽에 대한 전달 구성 gcloud compute target-http-proxies create n http-lb-proxy-$NAME_SUFFIX n --url-map web-map-http-$NAME_SUFFIX gcloud compute forwarding-rules create n http-content-rule-$NAME_SUFFIX n --global n --target-http-proxy=http-lb-proxy-$NAME_SUFFIX n --ports=80 웹 트래픽에 대한 전달 규칙의 IP 주소를 가져옵니다. IP_ADDRESSgcloud compute forwarding-rules describe http-content-rule-$NAME_SUFFIX n --global n --format="value(IPAddressn 사용 curl 또는 웹 브라우저를 열어 IP를 사용하여 웹 사이트를 봅니다. 이전 단계에서 로드 밸런서의 주소: 컬 $IP_ADDRESS 로드 밸런서가 배포를 완료하고 트래픽을 백엔드로 올바르게 전달합니다. 다음과 같은 경우 HTTP 404 오류가 반환됩니다. 로드 밸런서가 아직 배포 중입니다. 필요한 경우 몇 분 정도 기다렸다가 웹 사이트에 다시 액세스하십시오. 다음 예제 출력과 같이 기본 웹 사이트가 반환됩니다. HA / DR 예시

Cloud Storage로의 웜 장애 조치가 포함된 Compute Engine 웹사이트에 오신 것을 환영합니다p>

관리형 인스턴스 그룹은 복구되어 전체 웹 사이트에 대한 트래픽을 제공할 수 있습니다. 경험. - 도메인 확인 Cloud Storage 버킷과 함께 사용하려는 소유한 도메인의 이름과 일치하도록 Cloud Storage 버킷을 만듭니다. 다음을 사용하고 싶습니다. gsutil mb gsstatic-web.$DOMAIN 그만큼 이 문서의 시작 부분에 정의된 DOMAIN변수는 다음과 같이 사용됩니다. . 이 예는 다음 위치에 정적 파일을 저장합니다. example.com static-web.example.com. 다음에서 Cloud Storage 버킷에 복사할 로컬 파일을 만듭니다. 다음 단계: cat< index.html HA / DR example

Welcome to a test static web server with warm failover from Cloud Storagep>

HA / DR example

Welcome to a test static web server with warm failover from Cloud Storagep>

curlagain, or open your web browser, to access the IP address of the load balancer: curl $IP_ADDRESS It might take a few minutes for the load balancer to update the configuration and to correctly direct traffic back to your managed instance groups. If needed, wait a few minutes and try to access the website again. The main website from the managed instance groups is returned, as shown in the following example output: HA / DR example p>Welcome to a Compute Engine website with warm failover to Cloud Storagep> ## Clean up To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, either delete the project that contains the resources, or keep the project and delete the individual resources. To delete the individual resources created in this document, complete the following steps: - Delete the Cloud Storage bucket: gsutil rm -r gsstatic-web.$DOMAIN Delete the load balancer configuration: gcloud compute forwarding-rules delete n http-content-rule-$NAME_SUFFIX --global --quiet gcloud compute target-http-proxies delete n http-lb-proxy-$NAME_SUFFIX --quiet gcloud compute url-maps delete web-map-http-$NAME_SUFFIX --quiet gcloud compute url-maps delete web-map-http-bucket-$NAME_SUFFIX --quiet gcloud compute backend-services delete n web-backend-service-$NAME_SUFFIX --global --quiet gcloud compute backend-buckets delete web-bucket-$NAME_SUFFIX --quiet Delete the managed instance groups and health check: gcloud compute instance-groups managed delete n instance-group-$NAME_SUFFIX-$REGION1 n --region=$REGION1 --quiet gcloud compute instance-groups managed delete n instance-group-$NAME_SUFFIX-$REGION2 n --region=$REGION2 --quiet gcloud compute health-checks delete http-basic-check-$NAME_SUFFIX --quiet Delete the instance templates, images, base VM, and persistent disks: gcloud compute instance-templates delete n template-$NAME_SUFFIX-$REGION1 --quiet gcloud compute instance-templates delete n template-$NAME_SUFFIX-$REGION2 --quiet gcloud compute images delete image-$NAME_SUFFIX --quiet gcloud compute images delete image-disk-$NAME_SUFFIX --quiet gcloud compute instances delete vm-base-$NAME_SUFFIX n --zone=$ZONE --quiet Delete the firewall rules. gcloud compute firewall-rules delete n allow-health-check-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete n allow-ssh-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete n allow-http-$NAME_SUFFIX --quiet Delete the subnet and VPC. gcloud compute networks subnets delete n subnet-$NAME_SUFFIX-$REGION1 --region=$REGION1 --quiet gcloud compute networks subnets delete n subnet-$NAME_SUFFIX-$REGION2 --region=$REGION2 --quiet gcloud compute networks delete network-$NAME_SUFFIX --quiet ## What's next - - For an alternative approach that uses Cloud DNS instead of external HTTP(S) Load Balancing to control the failover, see Deploy a warm recoverable web server using Cloud DNS with Compute Engine and Cloud Storage. This pattern is useful if you have, or want to use, Cloud DNS. - To learn how how to determine the best approach for your own applications and which recovery method to use, see the Disaster recovery planning guide. - To see other patterns for applications, such as cold and hot failover, see Disaster recovery scenarios for applications. - For more ways to handle scale and availability, see the Patterns for scalable and resilient apps. - Explore reference architectures, diagrams, tutorials, and best practices about Google Cloud. Take a look at our Cloud Architecture Center.