Gelişmiş Yük Dengeleme Optimizasyonları Codelab

1. Giriş

İleri düzey yük dengeleme optimizasyonları codelab'ine hoş geldiniz.

Bu codelab'de, genel harici uygulama yük dengeleyicisi 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 belgeyi ( https://cloud.google.com/load-balancing/docs/load-balancing-overview) incelemeniz önerilir.

c3fb1d3f027e8640.png

Şekil 1. Global harici uygulama yük dengeleyicisiyle hedef varış noktası 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 HTTPS yük dengeleyici oluşturacaksınız. Yük dengeleyici, Envoy tabanlı yük dengeleyicinin desteklediği gelişmiş özellikler listesindeki çeşitli özelliklerden yararlanır. Dağıtım tamamlandıktan sonra, simüle edilmiş bir yük oluşturup ayarladığınız yapılandırmaların uygun şekilde çalıştığını doğrulayacaksınız.

Neler öğreneceksiniz?

  • Yük dengeleyicinizi hassas bir şekilde ayarlamak 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 güvenlik duvarı kuralı oluşturacaksınız. Güvenlik duvarı kuralı, tüm IP'lerin http trafiği için 80 numaralı bağlantı noktasında test uygulamasının web sitesinin harici IP'sine erişmesine izin vermek için 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ıklı olma durumunu 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ının kalıplarını içeren yönetilen örnek grupları oluşturmanız gerekir. İlk olarak, 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 bir arka uç için bir örnek şablonuna referans veren bir yönetilen örnek grubu oluşturacağız.

Yönetilen örnek grupları, kapsam olarak 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şturulurken referans alınacak önceden oluşturulmuş bir başlangıç komut dosyası görebilirsiniz. Bu başlangıç komut dosyası, web uygulaması simüle etmek için kullanacağımız web sunucusu özelliklerini yükleyip etkinleştirir. Bu komut dosyasını inceleyebilirsiniz.

Örnek şablonlarını oluşturma

İlk adım, bir örnek şablonu 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 bir 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 Sunucusu İşlevselliğini Doğrulama

Her örnek, aşağıdakine benzer bir şey oluşturmak için basit bir PHP komut dosyasıyla Apache web sunucusu çalıştıracak şekilde yapılandırılır:

Sayfa şu konumdan sunuldu: us-east1-a-mig-ww2h

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

Şimdi, 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 altındaki 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 sorunsuz 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 birçok gelişmiş özelleştirme seçeneği 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 adresini ayırma

Bu adım için, daha sonra yük dengeleyiciye eklenecek olan genel olarak kullanılabilir bir statik 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 edin.

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 bir arka uç hizmetine eklememiz gerekir.

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

Aşağıdaki komutu çalıştırarak arka uçların eklendiğini doğrulayabilirsiniz.

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 haritası oluşturma

Ş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 ucu oluşturma

Yük dengeleyici oluşturma sürecindeki son adım, ön ucu oluşturmaktır. Bu işlem, daha önce ayırdığınız IP adresini oluşturduğunuz yük dengeleyici URL eşlemesiyle 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'sine 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 aldığınız IP adresiyle çalıştığını onaylayabilirsiniz.

6. Yük dengeleyicinin çalıştığını doğrulama

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

Siege-vm oluşturma

Şimdi 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 bağlantısı oluşturabilirsiniz. Oluşturulduktan sonra SSH'ı tıklayarak bir terminal başlatın ve bağlanın.

Bağlandıktan sonra yük oluşturmak için aşağıdaki komutu çalıştırın. Daha önce harici HTTP yük dengeleyici için 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ğılımını Kontrol Etme

Siege çalışırken trafiğin iki yönetilen örnek grubuna eşit olarak dağıtıldığını kontrol etme zamanı geldi.

Stop the Siege

Gelişmiş trafik bölme özelliğinin çalıştığını gösterdiğinize göre artık kuşatmayı durdurabilirsiniz. Bunu yapmak için siege-vm'nin SSH terminaline dönün ve çalışan siege'i durdurmak için CTRL+C tuşlarına basın.

7. Hizmet yük dengeleme politikasını yapılandırma

Hizmet LB Politikası Oluşturma

Temel ayar tamamlandığına göre şimdi bir hizmet yük dengeleme politikası oluşturup ileri seviye ö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 kullanmak için bir politika oluşturacağız. Ancak diğer özellikleri denemekten çekinmeyin.

Cloud Shell'den

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

Aşağıdaki gcloud komutuyla politikamızın başarıyla oluşturulduğunu 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

Yeni politikayı artık 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ç sağlığını ayarlama

Bu noktada, yeni hizmet yük dengeleme politikası arka uç hizmetinize uygulanmıştır. Bu nedenle, teknik olarak doğrudan temizleme işlemine geçebilirsiniz. Ancak bu kod laboratuvarı kapsamında, yeni politikanın nasıl çalıştığını göstermek için bazı ek üretim düzenlemeleri de yapacağız.

Otomatik kapasite boşaltma özelliği, toplam sağlıklı arka uç 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 bağlantısı kurup bunları sağlıksız hale getireceğiz. %25 eşiğiyle, sanal makinelerin dördüne SSH ile bağlanmanız ve Apache sunucusunu kapatmanız gerekir.

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

sudo apachectl stop

Bu noktada, otomatik kapasite boşaltma özelliği tetiklenir ve us-east1-b-mig yeni istek almaz.

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

Siege'i yeniden başlatma

Yeni özelliği doğrulamak için kuşatma VM'sini tekrar kullanacağız. Önceki adımda oluşturduğunuz sanal makineye SSH ile bağlanalım. Oluşturulduktan sonra SSH'ı tıklayarak bir terminal başlatın ve bağlanın.

Bağlandıktan sonra yük oluşturmak için aşağıdaki komutu çalıştırın. Daha önce harici HTTP yük dengeleyici için 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 noktada, tüm isteklerin us-east1-a-mig'e gönderildiğini fark edeceksiniz.

Stop the Siege

Gelişmiş trafik bölme özelliğinin çalıştığını gösterdiğinize göre artık kuşatmayı durdurabilirsiniz. Bunu yapmak için siege-vm'nin SSH terminaline dönün ve çalışan siege'i durdurmak için CTRL+C tuşlarına basın.

10. Temizleme adımları

Laboratuvar ortamıyla işimiz bittiğine göre artık bu ortamı kapatabiliriz. Lütfen test ortamını silmek için 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 tebrik ederiz.

İşlediğimiz konular

  • Hizmet yük dengeleme politikasıyla harici uygulama yük dengeleyicisi oluşturma.
  • Arka uç hizmetinizi otomatik kapasite boşaltma özelliğiyle yapılandırın.

Sonraki adımlar

  • Hizmet yük dengeleme politikası tarafından sağlanan diğer özellikleri deneyin.