موازنة حمل الشبكة المُرجحة لكل مثيل

1. مقدمة

يمكنك ضبط موازنة الحمل على الشبكة لتوزيع الزيارات على مثيلات الخلفية لموازنة الحمل استنادًا إلى الأوزان التي يبلغ عنها فحص السلامة HTTP باستخدام موازنة الحمل المرجّحة.

تتطلّب موازنة الحمل المرجّحة ضبط ما يلي:

  • يجب ضبط سياسة موازنة التحميل على مستوى المنطقة (localityLbPolicy) لخدمة الخلفية على WEIGHTED_MAGLEV.
  • يجب ضبط خدمة الخلفية باستخدام عملية فحص سلامة HTTP/HTTP2/HTTPS. يجب أن تحتوي استجابات فحص السلامة HTTP على حقل عنوان استجابة HTTP مخصّص X-Load-Balancing-Endpoint-Weight لتحديد الأوزان بقيم عددية صحيحة من 0 إلى 1000 في التمثيل العشري لكل مثيل خلفي.

في حال استخدام مجموعة الأجهزة الافتراضية نفسها كخلفية للعديد من أجهزة موازنة الحمل المستندة إلى خدمة الخلفية باستخدام موازنة الحمل المرجّحة، يُنصح باستخدام مسار طلب فريد لكل عملية فحص صحي لخدمة الخلفية. لمزيد من المعلومات، راجِع معايير النجاح لعمليات التحقّق من سلامة HTTP وHTTPS وHTTP/2.

يجب أن يعرض فحص الصحة HTTP استجابة HTTP 200 (OK) لاجتياز عمليات فحص الصحة واعتبار مثيل الخلفية سليمًا. في الحالات التي تجتاز فيها جميع مثيلات الخلفية عمليات التحقّق من الصحة وتعرض X-Load-Balancing-Endpoint-Weight بقيمة صفر، يوزّع موازن التحميل الاتصالات الجديدة بين الخلفيات السليمة، ويعاملها بوزن متساوٍ. يمكن لموازنة التحميل أيضًا توزيع الاتصالات الجديدة بين الخلفيات غير السليمة. لمزيد من المعلومات، اطّلِع على مقالة توزيع عدد الزيارات.

للاطّلاع على أمثلة على موازنة التحميل المرجّحة، راجِع اختيار الخلفية وتتبُّع الاتصال.

يمكن استخدام موازنة الحمل المرجّحة في الحالات التالية:

  • إذا كانت بعض عمليات الربط تعالج بيانات أكثر من غيرها، أو إذا كانت بعض عمليات الربط تدوم لفترة أطول من غيرها، قد يصبح توزيع الحمل على الخلفية غير متساوٍ. من خلال الإشارة إلى وزن أقل لكل مثيل، يمكن لمثيل ذي حمل مرتفع تقليل حصته من الاتصالات الجديدة، مع الاستمرار في تقديم الخدمة للاتصالات الحالية.
  • إذا كان أحد الأنظمة الخلفية مثقلاً بالأحمال، وقد يؤدي تخصيص المزيد من الاتصالات إلى تعطيل الاتصالات الحالية، فإنّ هذه الأنظمة الخلفية تخصّص وزنًا يساوي صفرًا لنفسها. من خلال الإشارة إلى وزن صفر، تتوقف إحدى آلات الخلفية عن تقديم خدمات الاتصالات الجديدة، ولكنها تواصل تقديم خدمات الاتصالات الحالية.
  • إذا كان الخلفية تستنزف الاتصالات الحالية قبل الصيانة، فإنّها تعيّن وزنًا صفرًا لنفسها. من خلال الإشارة إلى أنّ الوزن هو صفر، تتوقف آلة الخلفية الافتراضية عن تقديم الخدمات للاتصالات الجديدة، ولكنها تواصل تقديم الخدمات للاتصالات الحالية.

ما ستتعرّف عليه

  • كيفية ضبط موازنة الحمل على الشبكة لتوزيع عدد الزيارات على مثيلات الخلفية الخاصة بموازنة الحمل استنادًا إلى الأوزان التي يتم إعداد تقارير عنها من خلال فحص سلامة HTTP باستخدام موازنة الحمل المرجّحة

إعداد البيئة بالسرعة التي تناسبك

  1. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
  • معرّف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسمك ومعرفة ما إذا كان متاحًا. ولا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع.
  • للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. يمكن للمستخدمين الجدد في Google Cloud الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

55efc1aaa7a4d3ad.png

لن يستغرق توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:

7ffe5cbb04455448.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا ثابتًا بسعة 5 غيغابايت، وتعمل على Google Cloud، ما يحسّن بشكل كبير أداء الشبكة والمصادقة. يمكن إكمال جميع المهام في هذا الدرس العملي ضمن المتصفّح. ليس عليك تثبيت أي تطبيق.

2. بدء عملية الإعداد

يتطلّب Codelab مشروعًا واحدًا.

في هذا البرنامج التعليمي، ستنشئ مجموعة أجهزة افتراضية تضم ثلاثة أجهزة افتراضية وتعيّن أوزانًا لكل جهاز. يمكنك إنشاء عملية تحقّق من الصحة عبر HTTP لإعداد تقارير عن أوزان مثيلات الخلفية. يتم تفعيل موازن الحمل الشبكي المرجّح على خدمة الخلفية باستخدام سياسة موازن الحمل المحلي كـ WEIGHTED_MAGLEV.

قبل البدء

gcloud services enable compute.googleapis.com

ملاحظة: لا يمكنك استخدام Google Cloud Console لإعداد سياسة موازنة التحميل المحلية وتعيين أوزان لمثيلات الأجهزة الافتراضية. يمكنك استخدام واجهة سطر الأوامر (CLI) في Google Cloud بدلاً من ذلك.

إنشاء شبكة VPC والشبكات الفرعية وقواعد جدار الحماية

أنشئ شبكة VPC وشبكة فرعية وقواعد جدار الحماية التي تتيح الدخول للسماح بالاتصالات بالأجهزة الافتراضية الخلفية لجهاز موازنة الحمل.

  1. أنشئ شبكة VPC وشبكة فرعية. أ. لإنشاء شبكة VPC، شغِّل الأمرgcloud compute networks create :
gcloud compute networks create NETWORK_NAME --subnet-mode custom

ب- في هذا المثال، نطاق عناوين IPv4 الأساسي للشبكة الفرعية هو 10.10.0.0/24.

لإنشاء الشبكة الفرعية، نفِّذ الأمر gcloud compute networks subnets create :

gcloud compute networks subnets create SUBNET_NAME \
  --network=NETWORK_NAME \
  --range=10.10.0.0/24 \
  --region=us-central1

غيِّر القيم في السلسلة على الشكل التالي:

  • استبدِل NETWORK_NAME باسم شبكة VPC التي تريد إنشاءها.
  • استبدِل SUBNET_NAME باسم الشبكة الفرعية التي تريد إنشاءها.
  1. أنشئ قاعدة جدار حماية تتيح الدخول للسماح بتسليم الحِزم المُرسَلة إلى منافذ TCP الوجهة 80 و443 إلى الأجهزة الافتراضية للخادم الخلفي. في هذا المثال، تسمح قاعدة جدار الحماية بالاتصالات من أي عنوان IP مصدر. تنطبق قاعدة جدار الحماية على الأجهزة الافتراضية التي تحمل علامة الشبكة network-lb-tag. لإنشاء قاعدة جدار الحماية، شغِّل الأمر gcloud compute firewall-rules create:
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 باسم قاعدة جدار الحماية التي تريد إنشاءها.

إنشاء مثيلات آلات افتراضية وتحديد القيم التقديرية

أنشئ ثلاثة مثيلات أجهزة افتراضية وحدِّد الأوزان على النحو التالي:

  1. اضبط ثلاثة مثيلات جهاز افتراضي للخادم الخلفي لعرض الأوزان في العنوان X-Load-Balancing-Endpoint-Weight مع استجابات HTTP. في هذا البرنامج التعليمي، يمكنك ضبط مثيل خلفي واحد للإبلاغ عن وزن صفر، ومثيل خلفي ثانٍ للإبلاغ عن وزن 100، ومثيل خلفي ثالث للإبلاغ عن وزن 900. لإنشاء الآلات الافتراضية، شغِّل الأمر gcloud compute instances create:
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'

إنشاء مجموعة مثيلات

في هذا البرنامج التعليمي، ستوفّر تعليمات لإنشاء مجموعة مثيلات غير مُدارة تحتوي على جميع مثيلات الأجهزة الافتراضية الثلاثة(instance-0, instance-100, and instance-900).

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 باسم مجموعة المثيلات التي تريد إنشاءها.

إنشاء فحص سلامة HTTP

في هذا البرنامج التعليمي، ستوفّر تعليمات لإنشاء عملية فحص سلامة HTTP لقراءة استجابة HTTP التي تحتوي على وزن الجهاز الظاهري للخادم الخلفي".

gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
  --region=us-central1

استبدِل HTTP_HEALTH_CHECK_NAME باسم عملية التحقّق من صحة HTTP التي تريد إنشاءها.

إنشاء خدمة خلفية

يقدّم المثال التالي تعليمات لإنشاء خدمة خلفية خارجية إقليمية تم ضبطها لاستخدام موازنة الحمل المرجّحة.

  1. أنشئ خدمة خلفية مع فحص السلامة HTTP واضبط سياسة موازنة الحمل المحلية على WEIGHTED_MAGLEV.
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 باسم خدمة الخلفية التي تريد إنشاءها.
  1. أضِف مجموعة الأجهزة الافتراضية إلى خدمة الخلفية.
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
  --instance-group=INSTANCE_GROUP \
  --instance-group-zone=us-central1-a \
  --region=us-central1
  1. احجز عنوان IP خارجيًا على مستوى المنطقة لجهاز موازنة الحمل.
gcloud compute addresses create ADDRESS_NAME \
 --region us-central1

استبدِل ADDRESS_NAME باسم عنوان IP الذي تريد إنشاءه. استخدِم الأمر compute addresses describe لعرض النتيجة. دوِّن عنوان IP الخارجي الثابت المحجوز (IP_ADDRESS').

gcloud compute addresses describe ADDRESS_NAME
  1. أنشئ قاعدة إعادة توجيه باستخدام عنوان IP الخارجي الإقليمي المحجوز "IP_ADDRESS". اربط قاعدة إعادة التوجيه بالخدمة الخلفية.
gcloud compute forwarding-rules create FORWARDING_RULE \
  --region=us-central1 \
  --ports=80 \
  --address=IP_ADDRESS \
  --backend-service=BACKEND_SERVICE_NAME
  • استبدِل ما يلي: FORWARDING_RULE: اسم قاعدة إعادة التوجيه المطلوب إنشاؤها. IP_ADDRESS: عنوان IP الذي سيتم تخصيصه للمثيل استخدِم عنوان IP خارجي ثابت محجوز، وليس اسم العنوان.

التحقّق من أوزان الخلفية باستخدام واجهة برمجة التطبيقات لخدمة الخلفية

تأكَّد من أنّه يتم إعداد تقارير عن أوزان الخلفية بشكلٍ سليم في عملية التحقّق من سلامة HTTP.

gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \
  --region=us-central1

يجب أن يكون الناتج على النحو التالي:

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