1. مقدمة
يمكنك ضبط جهاز موازنة حمل الشبكة لتوزيع حركة البيانات على جميع مثيلات الخلفية لجهاز موازنة الحمل استنادًا إلى الترجيحات التي تم رصدها من خلال التحقّق من سلامة HTTP باستخدام موازنة الحمل المرجّح.
تتطلب موازنة التحميل المرجّح ضبط ما يلي:
- يجب ضبط سياسة جهاز موازنة الحمل في المنطقة المحلية (LocalLbPolicy) لخدمة الخلفية على 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. بدء الإعداد
يتطلّب الدرس التطبيقي حول الترميز مشروعًا واحدًا.
في هذا البرنامج التعليمي، يمكنك إنشاء مجموعة مثيلات بثلاث مثيلات للأجهزة الافتراضية وتعيين ترجيحات لكل مثيل. عليك إنشاء فحص سلامة HTTP للإبلاغ عن ترجيحات المثيلات الخلفية. تم تفعيل جهاز موازنة حمل الشبكة المرجّح في خدمة الخلفية من خلال سياسة جهاز موازنة الحمل في المنطقة المحلية على النحو التالي: WEIGHTED_MAGLEV.
قبل البدء
- يمكنك الاطّلاع على نظرة عامة على موازنة حمل الشبكة الخارجية المستنِدة إلى خدمة الخلفية.
- ثبِّت واجهة سطر الأوامر في Google Cloud. للحصول على نظرة عامة وشاملة عن الأداة، يمكنك الانتقال إلى نظرة عامة على واجهة سطر الأوامر في gcloud. يمكنك العثور على الأوامر ذات الصلة بموازنة التحميل في مرجع واجهة برمجة التطبيقات وgcloud CLI. إذا لم يسبق لك تشغيل واجهة سطر الأوامر في Google Cloud، شغِّل أولاً gcloud init للمصادقة.
- فعِّل Compute API.
gcloud services enable compute.googleapis.com
ملاحظة: لا يمكنك استخدام وحدة تحكُّم Google Cloud لضبط سياسة جهاز موازنة الحمل في المنطقة المحلية وتخصيص ترجيحات لمثيلات الأجهزة الافتراضية. يمكنك استخدام واجهة سطر الأوامر في 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
باسم قاعدة جدار الحماية للإنشاء.
إنشاء مثيلات الأجهزة الافتراضية وتحديد القيم التقديرية
أنشئ ثلاث مثيلات للأجهزة الافتراضية وحدِّد الترجيحات:
- عليك ضبط ثلاث مثيلات للأجهزة الافتراضية (VM) في الخلفية لعرض القيم التقديرية في العنوان 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 التي تحتوي على وزن الجهاز الافتراضي (VM) الخلفية.
- لإنشاء التحقّق من صحة 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