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 باستخدام موازنة الحمل المرجّحة
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- معرّف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID
). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسمك ومعرفة ما إذا كان متاحًا. ولا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. يمكن للمستخدمين الجدد في Google Cloud الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:
لن يستغرق توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:
يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا ثابتًا بسعة 5 غيغابايت، وتعمل على Google Cloud، ما يحسّن بشكل كبير أداء الشبكة والمصادقة. يمكن إكمال جميع المهام في هذا الدرس العملي ضمن المتصفّح. ليس عليك تثبيت أي تطبيق.
2. بدء عملية الإعداد
يتطلّب Codelab مشروعًا واحدًا.
في هذا البرنامج التعليمي، ستنشئ مجموعة أجهزة افتراضية تضم ثلاثة أجهزة افتراضية وتعيّن أوزانًا لكل جهاز. يمكنك إنشاء عملية تحقّق من الصحة عبر HTTP لإعداد تقارير عن أوزان مثيلات الخلفية. يتم تفعيل موازن الحمل الشبكي المرجّح على خدمة الخلفية باستخدام سياسة موازن الحمل المحلي كـ WEIGHTED_MAGLEV.
قبل البدء
- اطّلِع على نظرة عامة حول موازنة الحمل على الشبكة الخارجية المستندة إلى خدمة الخلفية.
- ثبِّت Google Cloud CLI. للحصول على نظرة عامة كاملة على الأداة، راجِع نظرة عامة على gcloud CLI. يمكنك العثور على أوامر متعلّقة بموازنة التحميل في مرجع واجهة برمجة التطبيقات وgcloud CLI. إذا لم يسبق لك تشغيل Google Cloud CLI، شغِّل أولاً الأمر gcloud init للمصادقة.
- فعِّل واجهة برمجة التطبيقات Compute API.
gcloud services enable compute.googleapis.com
ملاحظة: لا يمكنك استخدام Google Cloud Console لإعداد سياسة موازنة التحميل المحلية وتعيين أوزان لمثيلات الأجهزة الافتراضية. يمكنك استخدام واجهة سطر الأوامر (CLI) في Google Cloud بدلاً من ذلك.
إنشاء شبكة VPC والشبكات الفرعية وقواعد جدار الحماية
أنشئ شبكة VPC وشبكة فرعية وقواعد جدار الحماية التي تتيح الدخول للسماح بالاتصالات بالأجهزة الافتراضية الخلفية لجهاز موازنة الحمل.
- أنشئ شبكة 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
باسم الشبكة الفرعية التي تريد إنشاءها.
- أنشئ قاعدة جدار حماية تتيح الدخول للسماح بتسليم الحِزم المُرسَلة إلى منافذ 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
باسم قاعدة جدار الحماية التي تريد إنشاءها.
إنشاء مثيلات آلات افتراضية وتحديد القيم التقديرية
أنشئ ثلاثة مثيلات أجهزة افتراضية وحدِّد الأوزان على النحو التالي:
- اضبط ثلاثة مثيلات جهاز افتراضي للخادم الخلفي لعرض الأوزان في العنوان 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
:
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 التي تحتوي على وزن الجهاز الظاهري للخادم الخلفي".
- لإنشاء عملية التحقّق من الصحة عبر HTTP، شغِّل الأمر
gcloud compute health-checks create
:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
استبدِل HTTP_HEALTH_CHECK_NAME
باسم عملية التحقّق من صحة HTTP التي تريد إنشاءها.
إنشاء خدمة خلفية
يقدّم المثال التالي تعليمات لإنشاء خدمة خلفية خارجية إقليمية تم ضبطها لاستخدام موازنة الحمل المرجّحة.
- أنشئ خدمة خلفية مع فحص السلامة HTTP واضبط سياسة موازنة الحمل المحلية على WEIGHTED_MAGLEV.
- لإنشاء خدمة الخلفية، شغِّل الأمر
gcloud compute backend-services create
:
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
باسم خدمة الخلفية التي تريد إنشاءها.
- أضِف مجموعة الأجهزة الافتراضية إلى خدمة الخلفية.
- لإضافة مجموعة المثيلات، نفِّذ الأمر
gcloud compute backend-services add-backend
:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
- احجز عنوان IP خارجيًا على مستوى المنطقة لجهاز موازنة الحمل.
- لحجز عنوان IP واحد أو أكثر، شغِّل الأمر
gcloud compute addresses create
:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
استبدِل ADDRESS_NAME
باسم عنوان IP الذي تريد إنشاءه. استخدِم الأمر compute addresses describe
لعرض النتيجة. دوِّن عنوان IP الخارجي الثابت المحجوز (IP_ADDRESS'
).
gcloud compute addresses describe ADDRESS_NAME
- أنشئ قاعدة إعادة توجيه باستخدام عنوان IP الخارجي الإقليمي المحجوز "IP_ADDRESS". اربط قاعدة إعادة التوجيه بالخدمة الخلفية.
- لإنشاء قاعدة إعادة التوجيه، شغِّل الأمر
gcloud compute forwarding-rules create
:
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
:
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