1. Giriş
Bu Codelab, otomatik bölgesel yük devretme için Private Service Connect (PSC) durumunu ele alır. PSC sağlığı, gelişmiş hizmet esnekliği ve kullanılabilirliği sağlayan bir ağ özelliğidir.
PSC durumu, hizmet üreticilerinin özelleştirilmiş durum politikaları (hangi durumun sağlıklı veya sağlıksız bir hizmeti tanımladığı) belirlemesine ve bu sinyalleri, PSC arka uçlarıyla hizmete bağlanan hizmet tüketicilerine otomatik olarak yaymasına olanak tanır. Bu özellik, özellikle bölgeler arası otomatik yük devretmeyi desteklemek için tasarlanmıştır. Bölgesel bir üretici hizmetinin durumu kötüleşirse tüketici yük dengeleyici, trafiği bu bölgeye yönlendirmeyi otomatik olarak durdurur ve trafiği başka bir bölgedeki sağlıklı bir hizmete yönlendirir.
Aykırı değer algılama gibi bölgeler arası yük devretme için kullanılan önceki yöntemlere kıyasla PSC durumu, doğrudan üretici hizmeti arka uçlarının (VM örneği grupları veya ağ uç noktaları) toplu durumuna dayandığı için daha doğru bir yük devretme sinyali sunar. Üreticiler kendi durum mantıklarını tanımlayabilir. Böylece üretici, yalnızca hizmet gerçekten gerekli durum ölçütlerini karşıladığında trafik alır.
Öğrenecekleriniz
- PSC durumunun bileşenleri ve üretici hizmetinin durumunu belirlemek için birlikte nasıl çalıştıkları
- gcloud komutlarını kullanarak bir üretici hizmeti için PSC sağlık durumunu uygulama
- Üretici PSC durum politikasındaki durum sinyallerini kullanmak için bölgeler arası PSC tüketici erişimi yük dengeleyicisinin yapılandırılması
- Hizmet arızası senaryolarını test etme ve bölgeler arası otomatik yük devretmeyi doğrulama
İhtiyacınız olanlar
- Google Cloud projesi
- Önceden tanımlanmış
roles/compute.adminrolüne veyaroles/admingibi geniş kapsamlı bir temel role ya da eskiroles/ownerrolüne verilen IAM izinleri - Google Cloud ağ kavramları ve Google Cloud KSA kullanımı hakkında bilgi sahibi olma
2. Kavramlar
PSC ağ iletişimi
Bu Codelab ağ topolojisi, iki etkin Google Cloud bölgesinde bir tüketici ve bir üretici VPC ağı içerir.
Tüketici tarafında, PSC ağ uç noktası grubu (NEG) arka uçlarıyla bölgeler arası dahili uygulama yük dengeleyici üzerinden üretici hizmetine erişmek için kullanılan bölgesel alt ağlar ve istemci sanal makine örnekleri bulunur. Küresel (bölgeler arası) istemci girişi için bölgesel IP adresleriyle iki bölgesel yük dengeleyici iletim kuralı vardır. Arka uç hizmeti, farklı bölgelerdeki NEG'leri destekleyen küresel bir kaynaktır. Yük devretme senaryosunda, bölgesel ön uç iletim kurallarından birine bağlanan bir istemci, sağlıklı bir genel arka uca yönlendirilebilir.
Şekil 1. Codelab ağ topolojisi
Üretici tarafında, bölgesel bir PSC hizmet eki kaynağı aracılığıyla bir hizmeti kullanıma sunan bölgesel dahili geçişli ağ yük dengeleyicileri olan bölgesel alt ağlar bulunur. Arka uç hizmetleri bölgesel yönetilen örnek grupları (MIG'ler) içerir ve http istekleri kontrol edilip 200 (OK) yanıtları doğrulanarak durum denetimi yapılır.
Hangi yük dengeleyicilerin PSC durumunu desteklediğini görmek için üretici yapılandırması ile ilgili Private Service Connect uyumluluğu hakkındaki en son belgelere bakın.
Hizmet durumu
Yük dengeleyici oluşturulurken yapılandırılan üretici arka uç hizmeti durum denetimi, PSC durumu özelliği için kaynak sinyal görevi görür. Sağlık kaynağı kaynağı, tek bir arka uç hizmetinin sağlık durumunu belirlemek için bu sinyali sağlık toplama politikası kaynağında tanımlanan ek kısıtlamalarla birlikte kullanır.
Varsayılan olarak, aşağıdaki kısıtlamaların her ikisi de karşılandığında bir hizmetin sağlıklı olduğu kabul edilir:
- Arka uçların en az
x'ı sağlıklı olmalıdır (varsayılan değer60). - Minimum
ysayıda arka ucun durumu iyi olmalıdır (varsayılan değer1).
Bileşik durum denetimi, tüm bölgesel üretici hizmetinin genel durumunu belirlemek için tüm arka uç hizmetlerinin tüm durum kaynaklarını referans alır. Bu laboratuvarda, her bölgesel üretici hizmetinin yalnızca bir arka uç hizmeti durumu kaynağı vardır ve bu kaynak, tek bir bileşik durum kontrolünde toplanır.
Şekil 2. PSC sağlık kaynağı modeli
Bileşik durum denetimi kaynak tanımı, üretici hizmeti yük dengeleyicisinin iletme kuralını da ifade eder. Tüketici erişimi yük dengeleyici arka uç PSC NEG, üretici PSC hizmet eki ve üretici yük dengeleyici yönlendirme kuralına mantıksal olarak bağlıdır. Bu işlem, tüketici erişimi yük dengeleyicisini üretici hizmetinin bileşik durum denetimi durumuna bağlar. Bölgesel üretici hizmetinin genel hizmet durumu daha sonra uygun arka uç seçimi yapmak için tüketici yük dengeleyicisine yayılır.
3. Proje ayarlama
Projenize erişme
Bu Codelab, tek bir Google Cloud projesi kullanacak şekilde yazılmıştır. Yapılandırma adımlarında gcloud ve Linux kabuk komutları kullanılır.
NOT: Üretim dağıtımında, PSC tüketici kaynakları ve üretici hizmetleri genellikle farklı projelerde bulunur.
Aşağıdaki komutu kullanarak Google Cloud projenizin komut satırına erişerek başlayın:
- Cloud Shell
http://shell.cloud.google.com/veya gcloudKSA'nın yüklü olduğu yerel bir terminal
Proje kimliğinizi ayarlama
gcloud config set project YOUR_PROJECT_ID_HERE
Kabuk ortamı değişkenlerini ayarlama
export PROJECT_ID=$(gcloud config list --format="value(core.project)")
export REGION_1="us-west1"
export ZONE_1="us-west1-c"
export REGION_2="us-east1"
export ZONE_2="us-east1-c"
echo ${PROJECT_ID}
echo ${REGION_1}
echo ${ZONE_1}
echo ${REGION_2}
echo ${ZONE_2}
API hizmetlerini etkinleştirme
gcloud services enable compute.googleapis.com
gcloud services enable dns.googleapis.com
4. Üretici hizmeti
Ortak kaynaklar oluşturma
Ağ oluştur
gcloud compute networks create vnet-producer --subnet-mode=custom
Alt ağ oluşturma
# create subnet for service workload in region 1
gcloud compute networks subnets create subnet-foo \
--network=vnet-producer \
--region=${REGION_1} \
--range=172.16.1.0/24 \
--enable-private-ip-google-access
# create subnet for psc nat in region 1
gcloud compute networks subnets create subnet-foo-pscnat \
--network=vnet-producer \
--region=${REGION_1} \
--range=192.168.1.0/29 \
--purpose=PRIVATE_SERVICE_CONNECT
# create subnet for service workload in region 2
gcloud compute networks subnets create subnet-bar \
--network=vnet-producer \
--region=${REGION_2} \
--range=172.16.2.0/24 \
--enable-private-ip-google-access
# create subnet for psc nat in region 2
gcloud compute networks subnets create subnet-bar-pscnat \
--network=vnet-producer \
--region=${REGION_2} \
--range=192.168.2.0/29 \
--purpose=PRIVATE_SERVICE_CONNECT
Güvenlik duvarı bileşenleri oluşturma
VM kaynaklarına trafiğe izin vermek için güvenlik duvarı kuralları gerekir (varsayılan güvenlik duvarı kuralları, girişi reddetmek ve çıkışa izin vermektir). Politikalar, ağ güvenlik duvarı politikası kaynağı oluşturarak, politikaya kurallar oluşturup ekleyerek ve ardından politikayı bir VPC ağıyla ilişkilendirerek güvenlik duvarı kurallarını dağıtmanın tercih edilen yoludur.
# create fw policy
gcloud compute network-firewall-policies create fw-policy-producer --global
# create fw policy rules
gcloud compute network-firewall-policies rules create 1001 \
--description="allow iap for ssh" \
--firewall-policy=fw-policy-producer \
--global-firewall-policy \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp:22 \
--src-ip-ranges=35.235.240.0/20
gcloud compute network-firewall-policies rules create 1002 \
--description="allow health checks" \
--firewall-policy=fw-policy-producer \
--global-firewall-policy \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp,udp,icmp \
--src-ip-ranges=130.211.0.0/22,35.191.0.0/16
gcloud compute network-firewall-policies rules create 1003 \
--description="allow psc nat clients" \
--firewall-policy=fw-policy-producer \
--global-firewall-policy \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp:80 \
--src-ip-ranges=192.168.1.0/29,192.168.2.0/29
# associate fw policy to vnet
gcloud compute network-firewall-policies associations create \
--firewall-policy=fw-policy-producer \
--network=vnet-producer \
--name=fw-policy-association-producer \
--global-firewall-policy
Cloud Router ve NAT ağ geçitleri oluşturma
# create routers for nat in each region
gcloud compute routers create cr-nat-foo \
--network=vnet-producer \
--asn=16550 \
--region=${REGION_1}
gcloud compute routers create cr-nat-bar \
--network=vnet-producer \
--asn=16550 \
--region=${REGION_2}
# create nat gateways in each region
gcloud compute routers nats create natgw-foo \
--router=cr-nat-foo \
--region=${REGION_1} \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges
gcloud compute routers nats create natgw-bar \
--router=cr-nat-bar \
--region=${REGION_2} \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges
HTTP sunucusu içeren bir sanal makine başlangıç yapılandırması oluşturma
cat > vm-server-startup.sh << 'EOF'
#! /bin/bash
apt-get update
apt-get install apache2 -y
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone)"
echo "Page served from: $vm_hostname in zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
EOF
1. bölgede hizmeti foo ayarlayın
Hizmet işlem birimi oluşturma
# create managed instance group template
gcloud compute instance-templates create mig-template-foo \
--machine-type=e2-micro \
--network=vnet-producer \
--region=${REGION_1} \
--subnet=subnet-foo \
--no-address \
--shielded-secure-boot \
--metadata-from-file=startup-script=vm-server-startup.sh
# create regional managed instance group
gcloud compute instance-groups managed create mig-foo \
--region=${REGION_1} \
--size=2 \
--template=mig-template-foo \
--base-instance-name=service-foo
Hizmet yük dengeleyici bileşenleri oluşturma
# create lb health check
gcloud compute health-checks create http hc-foo-http \
--region=${REGION_1} \
--port=80 \
--enable-logging
# create backend service
gcloud compute backend-services create ilb-foo \
--load-balancing-scheme=INTERNAL \
--protocol=tcp \
--region=${REGION_1} \
--health-checks=hc-foo-http \
--health-checks-region=${REGION_1}
# add managed instance group to backend service
gcloud compute backend-services add-backend ilb-foo \
--instance-group=mig-foo \
--instance-group-region=${REGION_1} \
--region=${REGION_1}
# create forwarding rule
gcloud compute forwarding-rules create fr-foo \
--region=${REGION_1} \
--load-balancing-scheme=INTERNAL \
--network=vnet-producer \
--subnet=subnet-foo \
--address=172.16.1.99 \
--ip-protocol=TCP \
--ports=80 \
--backend-service=ilb-foo \
--backend-service-region=${REGION_1} \
--allow-global-access
PSC hizmetini yayınlama
# create psc service attachment
gcloud compute service-attachments create psc-sa-foo \
--region=${REGION_1} \
--target-service=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=subnet-foo-pscnat
2. bölgede hizmet bar'yi ayarlayın
Hizmet işlem birimi oluşturma
# create managed instance group template
gcloud compute instance-templates create mig-template-bar \
--machine-type=e2-micro \
--network=vnet-producer \
--region=${REGION_2} \
--subnet=subnet-bar \
--no-address \
--shielded-secure-boot \
--metadata-from-file=startup-script=vm-server-startup.sh
# create regional managed instance group
gcloud compute instance-groups managed create mig-bar \
--region=${REGION_2} \
--size=2 \
--template=mig-template-bar \
--base-instance-name=service-bar
Hizmet yük dengeleyici bileşenleri oluşturma
# create lb health check
gcloud compute health-checks create http hc-bar-http \
--region=${REGION_2} \
--port=80 \
--enable-logging
# create backend service
gcloud compute backend-services create ilb-bar \
--load-balancing-scheme=INTERNAL \
--protocol=tcp \
--region=${REGION_2} \
--health-checks=hc-bar-http \
--health-checks-region=${REGION_2}
# add managed instance group to backend service
gcloud compute backend-services add-backend ilb-bar \
--instance-group=mig-bar \
--instance-group-region=${REGION_2} \
--region=${REGION_2}
# create forwarding rule
gcloud compute forwarding-rules create fr-bar \
--region=${REGION_2} \
--load-balancing-scheme=INTERNAL \
--network=vnet-producer \
--subnet=subnet-bar \
--address=172.16.2.99 \
--ip-protocol=TCP \
--ports=80 \
--backend-service=ilb-bar \
--backend-service-region=${REGION_2} \
--allow-global-access
PSC hizmetini yayınlama
# create psc service attachment
gcloud compute service-attachments create psc-sa-bar \
--region=${REGION_2} \
--target-service=projects/${PROJECT_ID}/regions/${REGION_2}/forwardingRules/fr-bar \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=subnet-bar-pscnat
5. Tüketici erişimi
Müşteri kaynaklarını ayarlama
Ağ bileşenleri oluşturma
# create vpc network
gcloud compute networks create vnet-consumer --subnet-mode=custom
# create client subnet in each region
gcloud compute networks subnets create subnet-client-1 \
--network=vnet-consumer \
--region=${REGION_1} \
--range=10.10.1.0/24 \
--enable-private-ip-google-access
gcloud compute networks subnets create subnet-client-2 \
--network=vnet-consumer \
--region=${REGION_2} \
--range=10.10.2.0/24 \
--enable-private-ip-google-access
Tüketici uygulaması (proxy tabanlı) yük dengeleyicisi için yalnızca proxy alt ağları gerekir. Bu alt ağlar, arka uçlara trafik gönderirken proxy tabanlı yük dengeleyiciler tarafından dahili kaynak adresleri olarak kullanılan bir IP adresi havuzu sağlar.
# create proxy subnet in each region
gcloud compute networks subnets create subnet-proxy-1 \
--purpose=GLOBAL_MANAGED_PROXY \
--role=ACTIVE \
--network=vnet-consumer \
--region=${REGION_1} \
--range=10.10.128.0/23
gcloud compute networks subnets create subnet-proxy-2 \
--purpose=GLOBAL_MANAGED_PROXY \
--role=ACTIVE \
--network=vnet-consumer \
--region=${REGION_2} \
--range=10.10.130.0/23
Güvenlik duvarı bileşenleri oluşturma
# create fw policy
gcloud compute network-firewall-policies create fw-policy-consumer --global
# create fw policy rules
gcloud compute network-firewall-policies rules create 1001 \
--description="allow iap for ssh" \
--firewall-policy=fw-policy-consumer \
--global-firewall-policy \
--action=allow \
--direction=INGRESS \
--layer4-configs=tcp:22 \
--src-ip-ranges=35.235.240.0/20
# associate fw policy to vnet
gcloud compute network-firewall-policies associations create \
--firewall-policy=fw-policy-consumer \
--network=vnet-consumer \
--name=fw-policy-association-consumer \
--global-firewall-policy
Yük dengeleyici bileşenleri oluşturma
# create psc network endpoint group per region
gcloud compute network-endpoint-groups create neg-foo \
--network-endpoint-type=private-service-connect \
--psc-target-service=projects/${PROJECT_ID}/regions/${REGION_1}/serviceAttachments/psc-sa-foo \
--region=${REGION_1} \
--network=vnet-consumer \
--subnet=subnet-client-1
gcloud compute network-endpoint-groups create neg-bar \
--network-endpoint-type=private-service-connect \
--psc-target-service=projects/${PROJECT_ID}/regions/${REGION_2}/serviceAttachments/psc-sa-bar \
--region=${REGION_2} \
--network=vnet-consumer \
--subnet=subnet-client-2
# verify psc connections
gcloud compute network-endpoint-groups list --format="value(selfLink, pscData.pscConnectionStatus)"
# create global backend service
gcloud compute backend-services create bes-foobar \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--global
# add negs to backend service
gcloud compute backend-services add-backend bes-foobar \
--network-endpoint-group=neg-foo \
--network-endpoint-group-region=${REGION_1} \
--global
gcloud compute backend-services add-backend bes-foobar \
--network-endpoint-group=neg-bar \
--network-endpoint-group-region=${REGION_2} \
--global
# create global url map
gcloud compute url-maps create ilb-foobar \
--default-service=bes-foobar \
--global
# create global target proxy
gcloud compute target-http-proxies create proxy-foobar \
--url-map=ilb-foobar \
--global
# create global forwarding rule for region 1
gcloud compute forwarding-rules create fr-foobar-1 \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=vnet-consumer \
--subnet=subnet-client-1 \
--subnet-region=${REGION_1} \
--address=10.10.1.99 \
--ports=80 \
--target-http-proxy=proxy-foobar \
--global
# create global forwarding rule for region 2
gcloud compute forwarding-rules create fr-foobar-2 \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=vnet-consumer \
--subnet=subnet-client-2 \
--subnet-region=${REGION_2} \
--address=10.10.2.99 \
--ports=80 \
--target-http-proxy=proxy-foobar \
--global
DNS kayıtları oluşturma
# create dns zone
gcloud dns managed-zones create zone-foobar \
--description="private zone for foobar" \
--dns-name=foobar.com \
--networks=vnet-consumer \
--visibility=private
# create geo dns record
gcloud dns record-sets create www.foobar.com \
--zone=zone-foobar \
--type=A \
--ttl=300 \
--routing-policy-type=GEO \
--routing-policy-item="location=${REGION_1},rrdatas=10.10.1.99" \
--routing-policy-item="location=${REGION_2},rrdatas=10.10.2.99"
İşlem kaynakları oluşturma
# create client vm in region 1
gcloud compute instances create client-1 \
--machine-type=e2-micro \
--zone=${ZONE_1} \
--subnet=subnet-client-1 \
--no-address \
--shielded-secure-boot
# create client vm in region 2
gcloud compute instances create client-2 \
--machine-type=e2-micro \
--zone=${ZONE_2} \
--subnet=subnet-client-2 \
--no-address \
--shielded-secure-boot
Hizmet temel çizgisini test etme
1. bölgedeki istemci sanal makinesine SSH ile bağlanma
gcloud compute ssh client-1 --zone=${ZONE_1}
# send request to service using hostname
curl -v www.foobar.com
# send request to load balancer forwarding rule region 1
curl 10.10.1.99
# send request to load balancer forwarding rule region 2
curl 10.10.2.99
# exit vm ssh
exit
İsteğe bağlı: Bölge 2'deki istemci sanal makinesinde aynı testleri deneyin: gcloud compute ssh client-2 --zone=${ZONE_2}
ÖNEMLİ NOKTA: region-x içindeki bir yönlendirme kuralına giren istemci istekleri için normal yük dengeleyici davranışı, aynı region-x içindeki arka uçları tercih etmektir. Tüm arka uç kaynaklarının durumu iyi ise en düşük gecikmeye sahip bölge kazanır. Global arka uçlar, uygun durum sinyaliyle diğer bölgeye yük devretme gerçekleştirir.
Ancak gerçek üretici hizmeti kaynakları, üretici VPC ağındaki üretici yük dengeleyicinin arkasında olduğundan bu sağlık sinyalleri daha önce tüketici yük dengeleyici için opak durumdaydı. Bu nedenle tüketici tarafı, bu tür arka uç yük devretme kararlarını veremiyordu. PSC Health, üretici tarafındaki hizmet sağlığı bilgilerini tüketici tarafına yayarak bu sorunu çözer.
6. Sağlıkla ilgili kaynaklar
PSC Health kaynakları, bölgesel hizmetin genel durumunu temsil etmek için üretici tarafından yapılandırılır. Durum politikası, hizmet üreticisinin işlevsel bir hizmet düzeyini korumak için uygun olarak tanımladığı şeye dayanır. Eşikler, üretici tarafından tanımlanan koşullar artık karşılanmadığında tüketicileri yük devretme konusunda bilgilendirmek için ayarlanır.
1. bölgede hizmet sağlığını foo ayarlayın
Sağlık toplama politikası oluşturma
gcloud beta compute health-aggregation-policies create foo-health-policy \
--region=${REGION_1} \
--healthy-percent-threshold=60 \
--min-healthy-threshold=1
Sağlık kaynağı oluşturma
gcloud beta compute health-sources create foo-health-source \
--region=${REGION_1} \
--source-type=BACKEND_SERVICE \
--sources=ilb-foo \
--health-aggregation-policy=foo-health-policy
Bileşik durum denetimi oluşturma
gcloud beta compute composite-health-checks create foo-health-composite \
--region=${REGION_1} \
--health-sources=foo-health-source \
--health-destination=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo
Hizmet foo sağlık yapılandırmasını doğrulama
Sağlık kaynağı yapılandırmaları, bölge başına liste (ve açıklama) komutlarıyla görüntülenebilir.
# show health aggregation policies
gcloud beta compute health-aggregation-policies list --regions=${REGION_1}
# show health sources
gcloud beta compute health-sources list --regions=${REGION_1}
# show composite health checks
gcloud beta compute composite-health-checks list --regions=${REGION_1}
2. bölgede hizmet durumu bar özelliğini ayarlayın
Sağlık toplama politikası oluşturma
gcloud beta compute health-aggregation-policies create bar-health-policy \
--region=${REGION_2} \
--healthy-percent-threshold=60 \
--min-healthy-threshold=1
Sağlık kaynağı oluşturma
gcloud beta compute health-sources create bar-health-source \
--region=${REGION_2} \
--source-type=BACKEND_SERVICE \
--sources=ilb-bar \
--health-aggregation-policy=bar-health-policy
Bileşik durum denetimi oluşturma
gcloud beta compute composite-health-checks create bar-health-composite \
--region=${REGION_2} \
--health-sources=bar-health-source \
--health-destination=projects/${PROJECT_ID}/regions/${REGION_2}/forwardingRules/fr-bar
Hizmet bar sağlık yapılandırmasını doğrulama
# show health aggregation policies
gcloud beta compute health-aggregation-policies list --regions=${REGION_2}
# show health sources
gcloud beta compute health-sources list --regions=${REGION_2}
# show composite health checks
gcloud beta compute composite-health-checks list --regions=${REGION_2}
Yapılandırma bölümünü tamamladık. Şimdi test aşamasına geçiyoruz.
7. Yük devretme testi
Hizmet foo bölgesi 1'deki kötü durum senaryosu
Bu senaryoda, iki sanal makine örneğinden birindeki web sunucusu durdurularak 1. bölgedeki PSC üretici hizmetinin foo arızalanması simüle edilir.
Sunucu sanal makinesi ayrıntılarını alma
# set env var for a foo service vm name
export FOO_FAIL_NAME=$(gcloud compute instance-groups managed list-instances mig-foo \
--limit=1 \
--region=${REGION_1} \
--format="value(name)")
echo ${FOO_FAIL_NAME}
# set env var for a foo service zone
export FOO_FAIL_ZONE=$(gcloud compute instance-groups managed list-instances mig-foo \
--limit=1 \
--region=${REGION_1} \
--format="value(ZONE)")
echo ${FOO_FAIL_ZONE}
Sunucu sanal makinesine SSH ile bağlanın ve http sunucusunu durdurun
gcloud compute ssh ${FOO_FAIL_NAME} --zone=${FOO_FAIL_ZONE}
# stop apache http server to fail service
sudo systemctl stop apache2
# verify service dead
sudo systemctl status apache2 | grep Active:
# exit vm ssh
exit
Bölgesel hizmetin durumunun kötü olduğunu doğrulama
# check health state of backend service
gcloud compute backend-services get-health ilb-foo --region=${REGION_1}
Çıkış şuna benzer şekilde görünmelidir:
backend: .../regions/<REGION_1>/instanceGroups/mig-foo
status:
healthStatus:
- forwardingRule: .../regions/<REGION_1>/forwardingRules/fr-foo
forwardingRuleIp: 172.16.1.99
healthState: UNHEALTHY
instance: .../zones/<ZONE_1x>/instances/<FOO_FAIL_NAME>
ipAddress: <FOO_FAIL_IP>
port: 80
- forwardingRule: .../regions/<REGION_1>/forwardingRules/fr-foo
forwardingRuleIp: 172.16.1.99
healthState: HEALTHY
instance: .../zones/<ZONE_1y>/instances/<FOO_OTHER_NAME>
ipAddress: <FOO_OTHER_IP>
port: 80
kind: compute#backendServiceGroupHealth
1. bölgedeki istemci sanal makinesine SSH ile bağlanma ve yük devretmeyi test etme
gcloud compute ssh client-1 --zone=${ZONE_1}
# send request to service using hostname
curl -v www.foobar.com
# curl to ilb vip in region 1
curl 10.10.1.99
# curl to ilb vip in region 2
curl 10.10.2.99
PSC durumu, tüketici yük dengeleyiciyi güncelledi ve 1. bölgedeki sağlıksız arka uç hizmetinden kaçınması için yönlendirdi. Bunun yerine, trafiği 2. bölgedeki sağlıklı hizmete bar yönlendirmiştir.
# exit client vm ssh
exit
Sunucu sanal makinesine SSH ile bağlanın ve http sunucusunu yeniden başlatın.
# ssh to foo service vm
gcloud compute ssh ${FOO_FAIL_NAME} --zone=${FOO_FAIL_ZONE}
# start apache http server to return service to healthy
sudo systemctl start apache2
# verify service running
sudo systemctl status apache2 | grep Active:
# exit vm ssh
exit
Sağlık politikasını değiştirme
Üreticiler, hizmet durumu politikalarını farklı ölçütlere göre ayarlayabilir. Sağlık toplama politikası kaynağı, farklı sağlık kaynaklarında (arka uç hizmetleri) sağlıklı bir durumu korumak için gereken minimum eşikleri belirtir.
bar hizmet durumu toplama politikasını güncelleme
gcloud beta compute health-aggregation-policies update bar-health-policy \
--region=${REGION_2} \
--description="min 40% threshold" \
--healthy-percent-threshold=40 \
--min-healthy-threshold=2
# verify new policy is applied
gcloud beta compute health-aggregation-policies list --regions=${REGION_2}
Bu üretici sağlık politikası değişikliğiyle aşağıdakiler sağlanır:
- Minimum sağlıklı eşik yüzdesini% 60'tan %40'a düşürür. Artık tek bir sanal makine örneği hatası,
--healthy-percent-threshold'ye göre sağlıksız bir durumu tetiklemeyecek (hata durumu% 50 olacak ve sağlıklı olması için yalnızca% 40 gerekecek). - Arka uçların minimum sağlıklı sayısını 1'den 2 sanal makine örneğine çıkarır. Artık tek bir sanal makine örneği hatası
--min-healthy-threshold'ye göre durumu kötü olarak işaretlenir (hata durumu 1 olur ancak sağlıklı olması için 2 olması gerekir).
Hizmet bar bölgesi 2'deki sağlıksız senaryo
Bu senaryoda, iki sanal makine örneğinden birindeki web sunucusu durdurularak 2. bölgedeki PSC üretici hizmetinin bar arızalanması simüle edilir.
Sunucu sanal makinesi ayrıntılarını alma
# set env var for a bar service vm name
export BAR_FAIL_NAME=$(gcloud compute instance-groups managed list-instances mig-bar \
--limit=1 \
--region=${REGION_2} \
--format="value(name)")
echo ${BAR_FAIL_NAME}
# set env var for a bar service zone
export BAR_FAIL_ZONE=$(gcloud compute instance-groups managed list-instances mig-bar \
--limit=1 \
--region=${REGION_2} \
--format="value(ZONE)")
echo ${BAR_FAIL_ZONE}
Sunucu sanal makinesine SSH ile bağlanın ve http sunucusunu durdurun
gcloud compute ssh ${BAR_FAIL_NAME} --zone=${BAR_FAIL_ZONE}
# stop apache http server to fail service
sudo systemctl stop apache2
# verify service dead
sudo systemctl status apache2 | grep Active:
# exit vm ssh
exit
Bölgesel hizmetin durumunun kötü olduğunu doğrulama
# check health state of backend service
gcloud compute backend-services get-health ilb-bar --region=${REGION_2}
Çıkış şuna benzer şekilde görünmelidir:
backend: .../regions/<REGION_2>/instanceGroups/mig-bar
status:
healthStatus:
- forwardingRule: .../regions/<REGION_2>/forwardingRules/fr-bar
forwardingRuleIp: 172.16.2.99
healthState: UNHEALTHY
instance: .../zones/<ZONE_2x>/instances/<BAR_FAIL_NAME>
ipAddress: <BAR_FAIL_IP>
port: 80
- forwardingRule: .../regions/<REGION_2>/forwardingRules/fr-bar
forwardingRuleIp: 172.16.2.99
healthState: HEALTHY
instance: .../zones/<ZONE_2y>/instances/<BAR_OTHER_NAME>
ipAddress: <BAR_OTHER_IP>
port: 80
kind: compute#backendServiceGroupHealth
2. bölgedeki istemci sanal makinesine SSH ile bağlanma ve yük devretmeyi test etme
gcloud compute ssh client-2 --zone=${ZONE_2}
# send request to service using hostname
curl -v www.foobar.com
# curl to ilb vip in region 1
curl 10.10.1.99
# curl to ilb vip in region 2
curl 10.10.2.99
PSC Health, tüketici yük dengeleyicisini güncelledi ve 2. bölgedeki sağlıksız arka uç hizmetinden kaçınacak şekilde yönlendirdi. Bunun yerine, 1. bölgedeki sağlıklı hizmete foo trafik yönlendirilmiştir.
Tüketici yük dengeleyicinin tüm üretici hizmetlerini sağlıksız olarak gördüğü bir durumda, yük dengeleyici sağlıklı bir örneğe yük devretme işlemi yapamaz. Beklenen davranış, yük dengeleyicinin trafiği durumu kötü olan tüm arka uçlara dağıtmasıdır (açık yük devretme).
# exit client vm ssh
exit
Test bölümü sona erdi. Şimdi temizlik zamanı.
8. Temizleme
# delete health resources
gcloud -q beta compute composite-health-checks delete foo-health-composite --region=${REGION_1}
gcloud -q beta compute health-sources delete foo-health-source --region=${REGION_1}
gcloud -q beta compute health-aggregation-policies delete foo-health-policy --region=${REGION_1}
gcloud -q beta compute composite-health-checks delete bar-health-composite --region=${REGION_2}
gcloud -q beta compute health-sources delete bar-health-source --region=${REGION_2}
gcloud -q beta compute health-aggregation-policies delete bar-health-policy --region=${REGION_2}
# delete consumer compute and load balancer resources
gcloud -q compute instances delete client-2 --zone=${ZONE_2}
gcloud -q compute instances delete client-1 --zone=${ZONE_1}
gcloud -q dns record-sets delete www.foobar.com --type=A --zone=zone-foobar
gcloud -q dns managed-zones delete zone-foobar
gcloud -q compute forwarding-rules delete fr-foobar-2 --global
gcloud -q compute forwarding-rules delete fr-foobar-1 --global
gcloud -q compute target-http-proxies delete proxy-foobar --global
gcloud -q compute url-maps delete ilb-foobar --global
gcloud -q compute backend-services delete bes-foobar --global
# delete consumer network resources
gcloud -q compute network-endpoint-groups delete neg-bar --region=${REGION_2}
gcloud -q compute network-endpoint-groups delete neg-foo --region=${REGION_1}
gcloud -q compute networks subnets delete subnet-proxy-2 --region=${REGION_2}
gcloud -q compute networks subnets delete subnet-proxy-1 --region=${REGION_1}
gcloud -q compute networks subnets delete subnet-client-2 --region=${REGION_2}
gcloud -q compute networks subnets delete subnet-client-1 --region=${REGION_1}
gcloud -q compute network-firewall-policies associations delete \
--firewall-policy=fw-policy-consumer \
--name=fw-policy-association-consumer \
--global-firewall-policy
gcloud -q compute network-firewall-policies delete fw-policy-consumer --global
gcloud -q compute networks delete vnet-consumer
# delete producer load balancer resources
gcloud -q compute service-attachments delete psc-sa-bar --region=${REGION_2}
gcloud -q compute service-attachments delete psc-sa-foo --region=${REGION_1}
gcloud -q compute forwarding-rules delete fr-bar --region=${REGION_2}
gcloud -q compute forwarding-rules delete fr-foo --region=${REGION_1}
gcloud -q compute backend-services delete ilb-bar --region=${REGION_2}
gcloud -q compute backend-services delete ilb-foo --region=${REGION_1}
gcloud -q compute health-checks delete hc-bar-http --region=${REGION_2}
gcloud -q compute health-checks delete hc-foo-http --region=${REGION_1}
# delete producer compute resources
gcloud -q compute instance-groups managed delete mig-bar --region=${REGION_2}
gcloud -q compute instance-groups managed delete mig-foo --region=${REGION_1}
gcloud -q compute instance-templates delete mig-template-bar --global
gcloud -q compute instance-templates delete mig-template-foo --global
# delete producer network resources
gcloud -q compute networks subnets delete subnet-bar-pscnat --region=${REGION_2}
gcloud -q compute networks subnets delete subnet-foo-pscnat --region=${REGION_1}
gcloud -q compute networks subnets delete subnet-bar --region=${REGION_2}
gcloud -q compute networks subnets delete subnet-foo --region=${REGION_1}
gcloud -q compute routers delete cr-nat-bar --region=${REGION_2}
gcloud -q compute routers delete cr-nat-foo --region=${REGION_1}
gcloud -q compute network-firewall-policies associations delete \
--firewall-policy=fw-policy-producer \
--name=fw-policy-association-producer \
--global-firewall-policy
gcloud -q compute network-firewall-policies delete fw-policy-producer --global
gcloud -q compute networks delete vnet-producer
# delete shell variables and script file
unset FOO_FAIL_NAME FOO_FAIL_ZONE BAR_FAIL_NAME BAR_FAIL_ZONE
unset PROJECT_ID REGION_1 ZONE_1 REGION_2 ZONE_2
rm vm-server-startup.sh
#
9. Sonuç
Tebrikler! PSC durumunu başarıyla yapılandırdınız ve otomatik bölgesel yük devretmeyi test ettiniz.
Bu geri bildirim formunu kullanarak yorum, soru veya düzeltme önerilerinizi paylaşabilirsiniz.
Teşekkürler!