Gelişmiş Yük Dengeleme Optimizasyonları Codelab

1. Giriş

Gelişmiş yük dengeleme optimizasyonları codelab'ine hoş geldiniz.

Bu codelab'de, global harici uygulama yük dengeleyici için gelişmiş yük dengeleme seçeneklerini nasıl yapılandıracağınızı öğreneceksiniz. Başlamadan önce, bulut yük dengeleme hakkındaki dokümanı ( https://cloud.google.com/load-balancing/docs/load-balancing-overview) incelemeniz önerilir.

c3fb1d3f027e8640.png

Şekil 1. Küresel harici uygulama yük dengeleyiciyle hedef uç nokta seçme iş akışı.

Codelab topolojisi ve kullanım alanları

2f7368df335d3de9.png

Şekil 2. HTTP Yük Dengeleyici Yönlendirme Topolojisi

Bu kod laboratuvarı sırasında iki yönetilen örnek grubu oluşturacaksınız. Global harici bir https yük dengeleyicisi oluşturursunuz. Yük dengeleyici, envoy tabanlı yük dengeleyicinin desteklediği gelişmiş özellikler listesinden çeşitli özelliklerden yararlanır. Dağıtımdan sonra yük simülasyonu oluşturur ve ayarladığınız yapılandırmaların düzgün şekilde çalıştığını doğrularsınız.

Neler öğreneceksiniz?

  • Yük dengeleyicinizde ince ayar yapmak için ServiceLbPolicy'yi yapılandırma.

Gerekenler

2. Başlamadan önce

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

API'leri etkinleştirme

Gerekli tüm hizmetleri etkinleştirin

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com
gcloud services enable networkservices.googleapis.com

3. VPC ağını oluşturma

VPC ağı oluşturma

Cloud Shell'den

gcloud compute networks create httplbs --subnet-mode=auto

Çıkış

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs].
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
httplbs  AUTO         REGIONAL

VPC güvenlik duvarı kuralları oluşturma

VPC'yi oluşturduktan sonra bir güvenlik duvarı kuralı oluşturacaksınız. Güvenlik duvarı kuralı, tüm IP'lerin http trafiği için test uygulamasının web sitesinin 80 numaralı bağlantı noktasındaki harici IP'sine erişmesine izin vermek amacıyla kullanılır.

Cloud Shell'den

gcloud compute firewall-rules create httplb-allow-http-rule \
--allow tcp:80 \
--network httplbs \
--source-ranges 0.0.0.0/0 \
--priority 700

Çıkış

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule].
Creating firewall...done.
NAME                    NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
httplb-allow-http-rule  httplbs  INGRESS    700       tcp:80        False

Bu codelab'de, sanal makinelerin sağlığını ayarlayacağız. Bu nedenle, SSH'ye izin vermek için güvenlik duvarı kuralları da oluşturacağız.

Cloud Shell'den

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

Çıkış

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh].
Creating firewall...done.
NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

4. Yönetilen örnek gruplarını ayarlama

HTTP yük dengeleyici tarafından kullanılan arka uç kaynaklarına yönelik kalıpları içeren yönetilen örnek grupları oluşturmanız gerekir. Öncelikle, her bölge için oluşturulacak sanal makinelerin yapılandırmasını tanımlayan örnek şablonlar oluşturacağız. Ardından, her bölgedeki arka uç için bir örnek şablonuna referans veren bir yönetilen örnek grubu oluşturacağız.

Yönetilen örnek grupları, alt bölgesel veya bölgesel olabilir. Bu laboratuvar alıştırmasında bölgesel yönetilen örnek grupları oluşturacağız.

Bu bölümde, örnek oluşturulduğunda referans alınacak önceden oluşturulmuş bir başlangıç komut dosyasını görebilirsiniz. Bu başlangıç komut dosyası, web uygulamasını simüle etmek için kullanacağımız web sunucusu özelliklerini yükler ve etkinleştirir. Bu komut dosyasını inceleyebilirsiniz.

Örnek Şablonları Oluşturma

İlk adım, örnek şablon oluşturmaktır.

Cloud Shell'den

gcloud compute instance-templates create test-template \
   --network=httplbs \
   --tags=allow-ssh,http-server \
   --image-family=debian-9 \
   --image-project=debian-cloud \
   --metadata=startup-script='#! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

Çıkış

NAME           MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template  n1-standard-1               2021-11-09T09:24:35.275-08:00

Artık aşağıdaki gcloud komutuyla örnek şablonlarımızın başarıyla oluşturulduğunu doğrulayabilirsiniz:

Cloud Shell'den

gcloud compute instance-templates list

Çıkış

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template         n1-standard-1         2021-11-09T09:24:35.275-08:00

Örnek gruplarını oluşturma

Şimdi, daha önce oluşturduğumuz örnek şablonlarından yönetilen örnek grubu oluşturmamız gerekiyor.

Cloud Shell'den

gcloud compute instance-groups managed create us-east1-a-mig \
--size=1 \
--template=test-template \
--zone=us-east1-a

Çıkış

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-a-mig  us-east1-a  zone   us-east1-a-mig       0     1            test-template      no

Cloud Shell'den

gcloud compute instance-groups managed create us-east1-b-mig \
--size=5 \
--template=test-template \
--zone=us-east1-b

Çıkış

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-b-mig  us-east1-b  zone   us-east1-b-mig       0     5            test-template      no

Aşağıdaki gcloud komutuyla örnek gruplarımızın başarıyla oluşturulduğunu doğrulayabiliriz:

Cloud Shell'den

gcloud compute instance-groups list

Çıkış

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-east1-a-mig        us-east1-a    zone    httplbs          Yes      1
us-east1-b-mig        us-east1-b    zone    httplbs          Yes      5

Web sunucusunun işlevini doğrulama

Her örnek, aşağıdaki gibi bir öğe oluşturan basit bir PHP komut dosyasına sahip bir Apache web sunucusu çalıştıracak şekilde yapılandırılır:

Sayfanın sunulduğu yer: us-east1-a-mig-ww2h

Web sunucularınızın doğru şekilde çalıştığından emin olmak için Compute Engine -> Sanal makine örnekleri bölümüne gidin. Yeni örneklerinizin (ör. us-east1-a-mig-xxx), örnek grubu tanımlarına göre oluşturulduğundan emin olun.

Ardından, web sunucusunun çalıştığından emin olmak için tarayıcınızda web sunucusuna bir web isteği gönderin (bu işlemin başlaması bir dakika sürebilir). Compute Engine'daki sanal makine örnekleri sayfasında, örnek grubunuz tarafından oluşturulan bir örneği seçin ve harici (herkese açık) IP'sini tıklayın.

Alternatif olarak, tarayıcınızda http://<IP_Address> adresine gidin.

5. Yük dengeleyiciyi ayarlama

Durum denetimi oluşturma

Öncelikle, hizmetlerimizin başarılı bir şekilde çalıştığından emin olmak için temel bir durum denetimi oluşturmamız gerekir. Temel bir durum denetimi oluşturacağız. Daha gelişmiş özelleştirmeler de mevcuttur.

Cloud Shell'den

gcloud compute health-checks create http http-basic-check \
    --port 80

Çıkış

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check].
NAME              PROTOCOL
http-basic-check  HTTP

Harici IP Adresi Rezervasyon

Bu adımda, daha sonra Yük Dengeleyici'ye eklenecek, dünya genelinde kullanılabilen statik bir IP adresi ayırmanız gerekir.

Cloud Shell'den

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

Çıkış

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].

Ayrılmış IP adresini not ettiğinizden emin olun.

gcloud compute addresses describe lb-ipv4-2 \
    --format="get(address)" \
    --global

Arka Uç Hizmetleri Oluşturma

Şimdi, daha önce oluşturduğumuz yönetilen örnek grupları için bir arka uç hizmeti oluşturmamız gerekiyor.

Cloud Shell'den

gcloud compute backend-services create east-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

Çıkış

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service].
NAME                  BACKENDS  PROTOCOL
east-backend-service            HTTP

Arka uç hizmetlerine MIG ekleme

Arka uç hizmetlerini oluşturduğumuza göre, daha önce oluşturduğumuz yönetilen örnek gruplarını her arka uç hizmetine eklememiz gerekiyor.

Cloud Shell'den

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global

Cloud Shell'den

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global

Arka uçların eklendiğini doğrulamak için aşağıdaki komutu çalıştırın.

Cloud Shell'den

gcloud compute backend-services list

Çıkış

NAME                  BACKENDS                                                                                               PROTOCOL
east-backend-service  us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig  HTTP

URL Eşlemesi Oluştur

Şimdi bir URL eşlemesi oluşturacağız.

gcloud compute url-maps create web-map-http \
    --default-service=east-backend-service \
    --global

Çıkış

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http].
NAME          DEFAULT_SERVICE
web-map-http  backendServices/east-backend-service

HTTP ön uç oluşturma

Yük dengeleyici oluşturmanın son adımı, ön uç oluşturmaktır. Bu işlem, daha önce ayırdığınız IP adresini oluşturduğunuz yük dengeleyici URL haritasıyla eşler.

Cloud Shell'den

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

Çıkış

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

Ardından, daha önce ayrılan IP adresini HTTP proxy ile eşleyecek bir genel iletim kuralı oluşturmanız gerekir.

Cloud Shell'den

gcloud compute forwarding-rules create http-content-rule \
    --load-balancing-scheme EXTERNAL_MANAGED \
    --address=lb-ipv4-2 \
    --global \
    --target-http-proxy=http-lb-proxy-adv \
    --ports=80

Bu noktada, yük dengeleyicinin daha önce not ettiğiniz IP adresiyle çalıştığını onaylayabilirsiniz.

6. Yük Dengeleyici'nin Çalıştığını Doğrulama

Yük dengeleme özelliğinin çalıştığını doğrulamak için bir miktar yük oluşturmanız gerekir. Bunu yapmak için yükü simüle edecek yeni bir sanal makine oluşturacağız.

Sege-vm oluşturma

Artık yük oluşturmak için kullanacağınız siege-vm'yi oluşturacaksınız.

Cloud Shell'den

gcloud compute instances create siege-vm \
    --network=httplbs \
    --zone=us-east1-a \
    --machine-type=e2-medium \
    --tags=allow-ssh,http-server \
    --metadata=startup-script='sudo apt-get -y install siege'

Çıkış

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm].
NAME      ZONE             MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
siege-vm  us-central1-ir1  e2-medium                  10.132.0.15  34.143.20.68  RUNNING

Ardından, oluşturduğunuz sanal makineye SSH ile bağlanabilirsiniz. Oluşturulduktan sonra SSH'yi tıklayarak bir terminal açıp bağlanın.

Bağlantı kurulduktan sonra yük oluşturmak için aşağıdaki komutu çalıştırın. Harici HTTP yük dengeleyici için daha önce ayırdığınız IP adresini kullanın.

Cloud Shell'den

siege -c 20 http://$lb-ipv4-2

Çıkış

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

Yük Dağıtımını Kontrol Etme

Kuşatma işlemi başladıktan sonra trafiğin iki yönetilen örnek grubuna eşit şekilde dağıtılıp dağıtılmadığını kontrol etmenin zamanı gelmiştir.

Kuşatma'yı Durdurun

Gelişmiş trafik bölme özelliğinin işe yaradığını kanıtladığınıza göre, kuşatmayı sonlandırmanın zamanı geldi. Bunu yapmak için siege-vm SSH terminaline dönün ve siege'in çalışmasını durdurmak için CTRL+C tuşlarına basın.

7. Hizmet LB Politikası'nı yapılandırma

Hizmet dengeleyici politikası oluşturma

Temel ayar tamamlandığında bir Hizmet LB Politikası oluşturacak ve gelişmiş özellikleri deneyeceğiz. Örnek olarak, hizmeti bazı gelişmiş yük dengeleme ayarlarını kullanacak şekilde yapılandıracağız. Bu örnekte, otomatik kapasite boşaltma özelliğini kullanacak bir politika oluşturacağız. Diğer özellikleri de deneyebilirsiniz.

Cloud Shell'den

gcloud beta network-services service-lb-policies create http-policy \
    --auto-capacity-drain --location=global

Politikamızın başarıyla oluşturulduğunu aşağıdaki gcloud komutuyla doğrulayabiliriz:

Cloud Shell'den

gcloud beta network-services service-lb-policies list --location=global

Çıkış

NAME
http-policy

Hizmet LB politikasını arka uç hizmetine ekleme

Şimdi yeni politikayı yukarıdaki mevcut arka uç hizmetinize ekleyeceğiz.

Cloud Shell'den

gcloud beta compute backend-services update east-backend-service \
    --service-lb-policy=http-policy --global

8. Arka Uç Durumunu Ayarlama

Bu noktada, yeni hizmet lb'si politikası arka uç hizmetinize uygulanmıştır. Teknik olarak doğrudan temizleme işlemine atlayabilirsiniz. Ancak kod laboratuvarının bir parçası olarak, yeni politikanın nasıl çalıştığını göstermek için üretimde bazı ek düzenlemeler de yapacağız.

Otomatik kapasite tahliyesi özelliği, sağlıklı arka uçların toplam sayısı belirli bir eşiğin (%25) altına düştüğünde arka uç MIG'yi yük dengeleyiciden otomatik olarak kaldırır. Bu özelliği test etmek için us-east1-b-mig bölgesindeki sanal makinelere SSH ile bağlanıp bunları sağlıksız hale getireceğiz. %25 eşiğinde, dört sanal makineye SSH ile bağlanıp Apache sunucusunu kapatmanız gerekir.

Bunu yapmak için dört sanal makine seçin ve SSH'yi tıklayarak bir terminal açıp bağlanın. Ardından aşağıdaki komutu çalıştırın.

sudo apachectl stop

Bu noktada otomatik kapasite tahliyesi özelliği tetiklenir ve us-east1-b-mig yeni istek almaz.

9. Otomatik Kapasite Boşaltma Özelliğinin Çalıştığını Doğrulama

Kuşatma'yı yeniden başlatma

Yeni özelliği doğrulamak için kuşatma sanal makinesini tekrar kullanacağız. Önceki adımda oluşturduğunuz sanal makineye SSH uygulayalım. Oluşturulduktan sonra SSH'yi tıklayarak bir terminal açıp bağlanın.

Bağlantı kurulduktan sonra yük oluşturmak için aşağıdaki komutu çalıştırın. Harici HTTP yük dengeleyici için daha önce ayırdığınız IP adresini kullanın.

Cloud Shell'den

siege -c 20 http://$lb-ipv4-2

Çıkış

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

Bu aşamada, tüm isteklerin us-east1-a-mig'e gönderildiğini görürsünüz.

Stop the Siege

Gelişmiş trafik bölme özelliğinin işe yaradığını kanıtladığınıza göre, kuşatmayı sonlandırmanın zamanı geldi. Bunu yapmak için siege-vm SSH terminaline dönün ve siege'in çalışmasını durdurmak için CTRL+C tuşlarına basın.

10. Temizleme adımları

Artık laboratuvar ortamıyla işimiz bittiğine göre ortamı kaldırma zamanı. Test ortamını silmek için lütfen aşağıdaki komutları çalıştırın.

Cloud Shell'den

gcloud compute instances delete siege-vm --zone=us-east1-a

gcloud compute forwarding-rules delete http-content-rule --global
gcloud compute target-http-proxies delete http-lb-proxy-adv

gcloud compute url-maps delete web-map-http

gcloud compute backend-services delete east-backend-service --global

gcloud compute addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud beta network-services service-lb-policies delete http-policy --location=global

gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a
gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b

gcloud compute instance-templates delete test-template 

gcloud compute firewall-rules delete httplb-allow-http-rule
gcloud compute firewall-rules delete fw-allow-ssh

gcloud compute networks delete httplbs 

11. Tebrikler!

Codelab'i tamamladığınız için tebrikler.

Ele aldığımız konular

  • Hizmet lb'si politikasıyla harici bir uygulama yük dengeleyici oluşturma.
  • Arka uç hizmetinizi otomatik kapasite tahliyesi özelliğiyle yapılandırın.

Sonraki adımlar

  • Hizmet yükü dengeleme politikasının sunduğu diğer özellikleri deneyin.