Bu codelab hakkında
1. Giriş
Ağırlıklı yük dengeleme kullanarak bir HTTP sağlık durumu kontrolü tarafından bildirilen ağırlıklara göre trafiği yük dengeleyicinin arka uç örnekleri arasında dağıtmak için bir ağ yük dengeleyici yapılandırabilirsiniz.
Ağırlıklı yük dengeleme için aşağıdakilerin ikisini de yapılandırmanız gerekir:
- Arka uç hizmetinin yerel yük dengeleme politikasını (localityLbPolicy) WEIGHTED_MAGLEV olarak ayarlamanız gerekir.
- Arka uç hizmetini HTTP/HTTP2/HTTPS durum denetimi ile yapılandırmanız gerekir. HTTP durum denetimi yanıtları, her arka uç örneği için ağırlıkları ondalık gösterimde 0 ile 1.000 arasında tam sayı değerleriyle belirtmek üzere özel bir HTTP yanıtı üst bilgisi alanı olan X-Load-Balancing-Endpoint-Weight içermelidir.
Ağırlıklı yük dengeleme kullanan birden fazla arka uç hizmetine dayalı ağ yük dengeleyicisi için aynı örnek grubunu arka uç olarak kullanıyorsanız arka uç hizmetinin her durum denetimi için benzersiz bir istek yolu kullanmanız önerilir. Daha fazla bilgi için HTTP, HTTPS ve HTTP/2 sağlık kontrolleri için başarı ölçütleri başlıklı makaleyi inceleyin.
Durum denetimlerinin başarılı olması ve arka uç örneğinin iyi durumda kabul edilmesi için HTTP durum denetimi, HTTP 200 (OK) yanıtı döndürmelidir. Tüm arka uç örneklerinin durum denetimlerini geçtiği ve X-Load-Balancing-Endpoint-Weight'i sıfır ağırlıkla döndürdüğü durumlarda yük dengeleyici, yeni bağlantıları iyi durumda olan arka uçlar arasında eşit ağırlıkta olacak şekilde dağıtır. Yük dengeleyici, yeni bağlantıları sağlıksız arka uçlar arasında da dağıtabilir. Daha fazla bilgi için Trafik dağıtımı başlıklı makaleyi inceleyin.
Ağırlıklı yük dengeleme örnekleri için Arka uç seçimi ve bağlantı izleme başlıklı makaleyi inceleyin.
Ağırlıklı yük dengeleme aşağıdaki senaryolarda kullanılabilir:
- Bazı bağlantılar diğerlerinden daha fazla veri işlerse veya bazı bağlantılar diğerlerinden daha uzun süre aktif kalırsa arka uç yük dağıtımı eşit olmayabilir. Yüksek yüke sahip bir örnek, örnek başına daha düşük ağırlık sinyali vererek mevcut bağlantılara hizmet vermeye devam ederken yeni bağlantılardan aldığı payı azaltabilir.
- Bir arka uç aşırı yüklenmişse ve daha fazla bağlantı atamak mevcut bağlantıları bozabilirse bu tür arka uçlar kendisine sıfır ağırlık atar. Arka uç örneği, sıfır ağırlık sinyali vererek yeni bağlantılara hizmet vermeyi durdurur ancak mevcut bağlantılara hizmet vermeye devam eder.
- Bir arka uç, bakımdan önce mevcut bağlantıları boşaltıyorsa kendisine sıfır ağırlık atar. Arka uç örneği, sıfır ağırlık sinyali vererek yeni bağlantılara hizmet vermeyi durdurur ancak mevcut bağlantılara hizmet vermeye devam eder.
Neler öğreneceksiniz?
- Ağırlıklı yük dengeleme kullanarak trafiği yük dengeleyicinin arka uç örnekleri arasında bir HTTP durum denetimi tarafından bildirilen ağırlıklara göre dağıtmak için ağ yük dengeleyiciyi yapılandırma.
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Henüz bir Gmail veya Google Workspace hesabınız yoksa oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman bunu güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle
PROJECT_ID
olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Alternatif olarak, kendi adınızı deneyip kullanılabilir olup olmadığını görebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırmaya tabi olmamak için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:
Ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:
Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.
2. Yapılandırmayı başlatma
Codelab için tek bir proje gerekir.
Bu eğitimde, üç sanal makine örneği içeren bir örnek grubu oluşturacak ve her örneğe ağırlık atayacaksınız. Arka uç örneği ağırlıklarını bildirmek için bir HTTP durum denetimi oluşturursunuz. Ağırlıklı ağ yük dengeleyici, arka uç hizmetinde WEIGHTED_MAGLEV olarak yerel yük dengeleme politikasıyla etkinleştirilir.
Başlamadan önce
- Arka uç hizmeti tabanlı harici ağ yük dengeleme hizmetine genel bakış başlıklı makaleyi okuyun.
- Google Cloud CLI'yı yükleyin. Araca genel bakış için gcloud KSA'ya genel bakış başlıklı makaleyi inceleyin. Yük dengeleme ile ilgili komutları API ve gcloud CLI referansında bulabilirsiniz. Google Cloud CLI'yi daha önce çalıştırmadıysanız önce gcloud init komutunu çalıştırarak kimliğinizi doğrulayın.
- Compute API'yi etkinleştirin.
gcloud services enable compute.googleapis.com
Not: Yerellik yük dengeleme politikasını yapılandırmak ve sanal makine örneklerine ağırlık atamak için Google Cloud Console'u kullanamazsınız. Bunun yerine Google Cloud CLI'yı kullanın.
VPC ağı, alt ağlar ve güvenlik duvarı kuralları oluşturma
Yük dengeleyicinizin arka uç VM'lerine bağlantılara izin vermek için bir VPC ağı, alt ağ ve girişe izin veren güvenlik duvarı kuralları oluşturun.
- VPC ağı ve alt ağ oluşturun. a. VPC ağını oluşturmak için
gcloud compute networks create
komutunu:
çalıştırın.
gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. Bu örnekte, alt ağın birincil IPv4 adres aralığı 10.10.0.0/24
'dır.
Alt ağı oluşturmak için gcloud compute networks subnets create
komutunu çalıştırın:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
Aşağıdakini değiştirin:
NETWORK_NAME
: Oluşturulacak VPC ağının adı.SUBNET_NAME
: Oluşturulacak alt ağın adı.
- Hedef TCP bağlantı noktaları 80 ve 443'e gönderilen paketlerin arka uç sanal makinelerine teslim edilmesine izin vermek için bir giriş izin güvenlik duvarı kuralı oluşturun. Bu örnekte, güvenlik duvarı kuralı herhangi bir kaynak IP adresinden gelen bağlantılara izin veriyor. Güvenlik duvarı kuralı,
network-lb-tag
ağ etiketine sahip sanal makineler için geçerlidir. Güvenlik duvarı kuralını oluşturmak içingcloud compute firewall-rules create
komutunu çalıştırın:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=network-lb-tag
FIREWALL_RULE_NAME
kısmını, oluşturulacak güvenlik duvarı kuralının adıyla değiştirin.
Sanal makine örnekleri oluşturma ve ağırlık atama
Üç sanal makine örneği oluşturun ve ağırlık atayın:
- Üç arka uç sanal makine örneğini, ağırlıkları HTTP yanıtlarıyla birlikte X-Load-Balancing-Endpoint-Weight başlığında döndürecek şekilde yapılandırın. Bu eğitimde, bir arka uç örneğini sıfır ağırlık bildirecek, ikinci bir arka uç örneğini 100 ağırlık bildirecek ve üçüncü bir arka uç örneğini 900 ağırlık bildirecek şekilde yapılandıracaksınız. Örnekleri oluşturmak için
gcloud compute instances create
komutunu çalıştırın:
gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=0,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-100 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=100,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-900 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=900,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
Örnek grubu oluşturma
Bu eğitimde, üç sanal makine örneğini de içeren yönetilmeyen bir örnek grubu oluşturma talimatları veriyorsunuz(instance-0, instance-100, and instance-900
).
- Örnek grubunu oluşturmak için
gcloud compute instance-groups unmanaged create
komutunu çalıştırın:
gcloud compute instance-groups unmanaged create INSTANCE_GROUP --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \ --zone=us-central1-a \ --instances=instance-0,instance-100,instance-900
INSTANCE_GROUP
yerine oluşturulacak örnek grubun adını girin.
HTTP durum denetimi oluşturma
Bu eğitimde, arka uç VM'sinin ağırlığını içeren HTTP yanıtını okumak için HTTP durum denetimi oluşturma talimatları veriyorsunuz."
- HTTP durum denetimini oluşturmak için
gcloud compute health-checks create
komutunu çalıştırın:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
HTTP_HEALTH_CHECK_NAME
yerine oluşturulacak HTTP durum denetiminin adını girin.
Arka uç hizmeti oluşturma
Aşağıdaki örnekte, ağırlıklı yük dengeleme kullanacak şekilde yapılandırılmış bölgesel bir harici arka uç hizmeti oluşturma talimatları verilmektedir.
- HTTP durum denetimiyle bir arka uç hizmeti oluşturun ve yerellik yük dengeleyici politikasını WEIGHTED_MAGLEV olarak ayarlayın.
- Arka uç hizmetini oluşturmak için
gcloud compute backend-services create
komutunu çalıştırın:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=external \ --protocol=tcp \ --region=us-central1 \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=us-central1 \ --locality-lb-policy=WEIGHTED_MAGLEV
BACKEND_SERVICE_NAME
yerine oluşturulacak arka uç hizmetinin adını girin.
- Örnek grubunu arka uç hizmetine ekleyin.
- Örnek grubunu eklemek için
gcloud compute backend-services add-backend
komutunu çalıştırın:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
- Yük dengeleyici için bölgesel bir harici IP adresi ayırın.
- Bir veya daha fazla IP adresi ayırmak için
gcloud compute addresses create
komutunu çalıştırın:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
ADDRESS_NAME
yerine oluşturulacak IP adresinin adını girin. Sonucu görüntülemek için compute addresses describe
komutunu kullanın. Ayrılmış statik harici IP adresini (IP_ADDRESS'
) not edin.
gcloud compute addresses describe ADDRESS_NAME
- Ayrılmış bölgesel harici IP adresi "IP_ADDRESS" kullanarak bir yönlendirme kuralı oluşturun. Yönlendirme kuralını arka uç hizmetine bağlayın.
- İletim kuralını oluşturmak için
gcloud compute forwarding-rules create
komutunu çalıştırın:
gcloud compute forwarding-rules create FORWARDING_RULE \ --region=us-central1 \ --ports=80 \ --address=IP_ADDRESS \ --backend-service=BACKEND_SERVICE_NAME
- Aşağıdakileri değiştirin:
FORWARDING_RULE
: Oluşturulacak yönlendirme kuralının adı.IP_ADDRESS:
Örneğe atanacak IP adresi. Adres adı yerine ayrılmış statik harici IP adresini kullanın.
Arka uç hizmeti API'sini kullanarak arka uç ağırlıklarını doğrulama
Arka uç ağırlıklarının HTTP durum denetimine doğru şekilde bildirildiğini doğrulayın.
- Bir arka uç hizmetinden arka uç ağırlıklarını (durum bilgileriyle birlikte) almak için
gcloud compute backend-services get-health
komutunu çalıştırın:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Çıkış şu şekilde olmalıdır:
backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name} status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0 ipAddress: 10.10.0.5 port: 80 weight: '0' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100 ipAddress: 10.10.0.6 port: 80 weight: '100' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900 ipAddress: 10.10.0.7 port: 80 weight: '900' kind: compute#backendServiceGroupHealth