1. Giriş
Ağ yük dengeleyiciyi, ağırlıklı yük dengeleme kullanılarak yapılan HTTP durum denetimi tarafından bildirilen ağırlıklara göre yük dengeleyicinin arka uç örnekleri genelinde dağıtacak şekilde 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 dengeleyici politikasını (localityLbPolicy) WEIGHTED_MAGLEV olarak ayarlamanız gerekir.
- Arka uç hizmetini HTTP/HTTP2/HTTPS durum denetimiyle yapılandırmanız gerekir. Ağırlıkları, her arka uç örneği için ondalık gösterimde 0 ile 1000 arasında tam sayı değerlerine sahip tam sayı değerleriyle belirtmek üzere HTTP durum denetimi yanıtları özel bir HTTP yanıt başlığı alanı X-Load-Balancing-Endpoint-weight içermelidir.
Ağırlıklı yük dengeleme kullanan birden fazla arka uç hizmeti tabanlı ağ yük dengeleyicisi için arka uç olarak aynı örnek grubunu kullanırsanı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 durum denetimleri için başarı ölçütleri başlıklı makaleye bakın.
HTTP durum denetimi, durum denetimlerinin başarılı olması ve arka uç örneğinin iyi durumda olarak kabul edilmesi için HTTP 200 (Tamam) yanıtı döndürmelidir. Tüm arka uç örneklerinin durum denetimlerini geçip X-Load-Balancing-Uç Nokta-Ağırlıkını sıfır ağırlıkla döndürdüğü durumlarda, yük dengeleyici iyi durumdaki arka uçlar arasında yeni bağlantılar dağıtarak bunları eşit ağırlıkla ele alır. Yük dengeleyici, durumu iyi olmayan arka uçlar arasında yeni bağlantılar 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 bölümüne bakın.
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 yaşıyorsa arka uç yükü dağılımı eşit olmayabilir. Yüksek yüke sahip bir örnek, daha düşük bir örnek başına ağırlığın sinyalini vererek mevcut bağlantılara hizmet vermeye devam ederken yeni bağlantı payını azaltabilir.
- Bir arka uç aşırı yükleniyorsa ve daha fazla bağlantı atamak mevcut bağlantıları bozabilir. Bu tür arka uçlar kendisine sıfır ağırlık atar. Bir arka uç örneği, sıfır ağırlığın sinyalini vererek yeni bağlantılara hizmet vermeyi durdurur ancak mevcut bağlantılara hizmet vermeye devam eder.
- Bir arka uç, bakım öncesinde mevcut bağlantıları boşaltıyorsa kendisine sıfır ağırlık atar. Arka uç örneği, sıfır ağırlığın sinyalini vererek yeni bağlantılara hizmet vermeyi durdurur ancak mevcut bağlantılara hizmet vermeye devam eder.
Neler öğreneceksiniz?
- Ağ yük dengeleyiciyi, ağırlıklı yük dengeleme kullanılarak HTTP durum denetimi tarafından bildirilen ağırlıklara göre yük dengeleyicinin arka uç örnekleri genelinde dağıtacak şekilde yapılandırma.
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap 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. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğini (genellikle
PROJECT_ID
olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz için bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırma yapılmaması için kaynakları kapatmak isterseniz oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Cloud Shell'i başlatma
Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de 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 bulunan Cloud Shell simgesini tıklayın:
Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:
İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınız tarayıcıda yapılabilir. Herhangi bir şey yüklemeniz gerekmez.
2. Yapılandırmayı Başlat
Codelab'e tek bir proje gerekir.
Bu eğiticide, üç sanal makine örneğiyle bir örnek grubu oluşturacak ve her örnek için ağırlık atayacaksınız. Arka uç örneği ağırlıklarını raporlamak için bir HTTP durum denetimi oluşturursunuz. Ağırlıklı ağ yük dengeleyici, arka uç hizmetinde WEIGHTED_MAGLEV olarak yerel yük dengeleyici politikası ile etkinleştirilir.
Başlamadan önce
- Arka uç hizmeti tabanlı harici Ağ Yük Dengeleme'ye genel bakış makalesini okuyun.
- Google Cloud CLI'ı yükleyin. Araç hakkında kapsamlı bir genel bakış için gcloud CLI'ya genel bakış başlıklı makaleyi inceleyin. Yük dengelemeyle ilgili komutları API ve gcloud CLI referansında bulabilirsiniz. Google Cloud KSA'yı daha önce çalıştırmadıysanız kimlik doğrulaması için önce gcloud init öğesini çalıştırın.
- Compute API'yi etkinleştirin.
gcloud services enable compute.googleapis.com
Not: Yerel yük dengeleyici politikasını yapılandırmak ve sanal makine örneklerine ağırlık atamak için Google Cloud konsolunu kullanamazsınız. Bunun yerine Google Cloud KSA'yı kullanın.
VPC ağı, alt ağlar ve güvenlik duvarı kuralları oluşturma
VPC ağı, alt ağ oluşturun ve giriş, yük dengeleyicinizin arka uç sanal makinelerine yapılan bağlantılara izin vermek için güvenlik duvarı kurallarına izin verir.
- 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
şeklindedir.
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ı.
- 80 ve 443 numaralı hedef TCP bağlantı noktalarına gönderilen paketlerin arka uç sanal makinelerine teslim edilmesine izin vermek için bir giriş güvenlik duvarı kuralı oluşturun. Bu örnekte, güvenlik duvarı kuralı herhangi bir kaynak IP adresinden gelen bağlantılara izin verir. 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
değerini, 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:
- X-Load-Balancing-Endpoint-weight başlığındaki ağırlıkları HTTP yanıtlarıyla döndürecek üç arka uç sanal makine örneği yapılandırın. Bu eğitim için bir arka uç örneğini sıfır ağırlık bildirecek şekilde, ikinci bir arka uç örneğini 100 ağırlığı bildirecek şekilde 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ğiticide, üç sanal makine örneğinin tümünü(instance-0, instance-100, and instance-900
) içeren yönetilmeyen bir örnek grubu oluşturma talimatlarını sağlıyorsunuz.
- Ö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
değerini, oluşturulacak örnek grubunun adıyla değiştirin.
HTTP durum denetimi oluşturma
Bu eğiticide, arka uç sanal makinesinin ağırlığını içeren HTTP yanıtını okumak için HTTP durum denetimi oluşturma talimatlarını göreceksiniz.
- 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
değerini, oluşturulacak HTTP durum denetiminin adıyla değiştirin.
Arka uç hizmeti oluşturma
Aşağıdaki örnekte, ağırlıklı yük dengeleme kullanacak şekilde yapılandırılmış bir bölgesel harici arka uç hizmeti oluşturma talimatları sağlanmaktadır.
- HTTP durum denetimiyle bir arka uç hizmeti oluşturun ve yerel 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
değerini, oluşturulacak arka uç hizmetinin adıyla değiştirin.
- Ö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 adresini rezerve etmek için
gcloud compute addresses create
komutunu çalıştırın:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
ADDRESS_NAME
kısmını, oluşturulacak IP adresinin adıyla değiştirin. 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 adresini ("IP_ADDRESS") kullanarak bir iletim kuralı oluşturun. İletim 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
- Şunları değiştirin:
FORWARDING_RULE
: oluşturulacak iletim kuralının adı.IP_ADDRESS:
: Örneğe atanacak IP adresi. Adres adını değil, ayrılmış statik harici IP adresini kullanın.
Arka uç hizmet API'sini kullanarak arka uç ağırlıklarını doğrulama
Arka uç ağırlıklarının HTTP durum denetimine gerektiği gibi raporlandığını doğrulayın.
- Bir arka uç hizmetinden arka uç ağırlıklarını (durumlarla 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ış şuna benzer 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