۱. مقدمه
به آزمایشگاه کد بهینهسازیهای پیشرفتهی متعادلسازی بار خوش آمدید!
در این آزمایشگاه کد، نحوه پیکربندی گزینههای پیشرفته متعادلسازی بار برای متعادلکننده بار برنامه خارجی سراسری را خواهید آموخت. قبل از شروع، توصیه میشود ابتدا سند مربوط به متعادلسازی بار ابری ( https://cloud.google.com/load-balancing/docs/load-balancing-overview ) را بررسی کنید.

شکل ۱. گردش کار انتخاب یک نقطه پایانی مقصد با متعادلکننده بار برنامه خارجی سراسری.
توپولوژی Codelab و موارد استفاده

شکل 2. توپولوژی مسیریابی متعادلکننده بار HTTP
در طول این آزمایش کد، شما دو گروه نمونه مدیریتشده راهاندازی خواهید کرد. شما یک متعادلکننده بار خارجی سراسری https ایجاد خواهید کرد. متعادلکننده بار از چندین ویژگی از فهرست قابلیتهای پیشرفتهای که متعادلکننده بار مبتنی بر نماینده پشتیبانی میکند، استفاده خواهد کرد. پس از استقرار، شما یک بار شبیهسازی شده ایجاد خواهید کرد و تأیید میکنید که پیکربندیهایی که تنظیم کردهاید به درستی کار میکنند.
آنچه یاد خواهید گرفت
- چگونه ServiceLbPolicy را برای تنظیم دقیق متعادلکننده بار خود پیکربندی کنیم؟
آنچه نیاز دارید
- آشنایی با متعادلسازی بار HTTPS خارجی. نیمه اول این آزمایشگاه کد کاملاً شبیه به آزمایشگاه کد مدیریت ترافیک پیشرفته (Envoy) با عنوان External HTTPs LB ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv ) است. توصیه میشود ابتدا آن را مطالعه کنید.
۲. قبل از شروع
داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
فعال کردن APIها
فعال کردن تمام سرویسهای لازم
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com gcloud services enable networkservices.googleapis.com
۳. شبکه VPC را ایجاد کنید
ایجاد شبکه VPC
از پوسته ابری
gcloud compute networks create httplbs --subnet-mode=auto
خروجی
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 httplbs AUTO REGIONAL
ایجاد قوانین فایروال VPC
پس از ایجاد VPC، اکنون یک قانون فایروال ایجاد خواهید کرد. این قانون فایروال برای اجازه دادن به همه IP ها برای دسترسی به IP خارجی وب سایت برنامه آزمایشی در پورت 80 برای ترافیک http استفاده خواهد شد.
از پوسته ابری
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
خروجی
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED httplb-allow-http-rule httplbs INGRESS 700 tcp:80 False
در این آزمایشگاه کد، ما به بررسی سلامت ماشینهای مجازی خواهیم پرداخت. بنابراین، قوانین فایروال را نیز برای اجازه دادن به SSH ایجاد خواهیم کرد.
از پوسته ابری
gcloud compute firewall-rules create fw-allow-ssh \
--network=httplbs \
--action=allow \
--direction=ingress \
--target-tags=allow-ssh \
--rules=tcp:22
خروجی
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
۴. گروههای نمونه مدیریتشده را تنظیم کنید
شما باید گروههای نمونه مدیریتشده (Managed Instance Groups) را تنظیم کنید که شامل الگوهایی برای منابع backend مورد استفاده توسط HTTP Load Balancer باشد. ابتدا قالبهای نمونه (Instance Templates) را ایجاد میکنیم که پیکربندی ماشینهای مجازی (VM) ایجاد شده برای هر منطقه را تعریف میکنند. در مرحله بعد، برای یک backend در هر منطقه، یک گروه نمونه مدیریتشده (Managed Instance Group) ایجاد میکنیم که به یک قالب نمونه (Instance Template) ارجاع میدهد.
گروههای نمونه مدیریتشده میتوانند از نظر دامنه، منطقهای یا ناحیهای باشند. برای این تمرین آزمایشگاهی، گروههای نمونه مدیریتشده منطقهای ایجاد خواهیم کرد.
در این بخش، میتوانید یک اسکریپت راهاندازی از پیش ایجاد شده را مشاهده کنید که هنگام ایجاد نمونه به آن ارجاع داده خواهد شد. این اسکریپت راهاندازی، قابلیتهای وب سرور را نصب و فعال میکند که ما برای شبیهسازی یک برنامه وب از آنها استفاده خواهیم کرد. میتوانید این اسکریپت را بررسی کنید.
ایجاد الگوهای نمونه
اولین قدم ایجاد یک الگوی نمونه است.
از پوسته ابری
gcloud compute instance-templates create test-template \
--network=httplbs \
--tags=allow-ssh,http-server \
--image-family=debian-9 \
--image-project=debian-cloud \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
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
systemctl restart apache2'
خروجی
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
اکنون میتوانید با دستور gcloud زیر، ایجاد موفقیتآمیز الگوهای نمونه ما را تأیید کنید:
از پوسته ابری
gcloud compute instance-templates list
خروجی
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
ایجاد گروههای نمونه
اکنون باید یک گروه نمونه مدیریتشده از الگوهای نمونهای که قبلاً ایجاد کردهایم، ایجاد کنیم.
از پوسته ابری
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
خروجی
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-a-mig us-east1-a zone us-east1-a-mig 0 1 test-template no
از پوسته ابری
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
خروجی
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-b-mig us-east1-b zone us-east1-b-mig 0 5 test-template no
میتوانیم با دستور gcloud زیر، ایجاد موفقیتآمیز گروههای نمونه خود را تأیید کنیم:
از پوسته ابری
gcloud compute instance-groups list
خروجی
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-east1-a-mig us-east1-a zone httplbs Yes 1 us-east1-b-mig us-east1-b zone httplbs Yes 5
بررسی عملکرد وب سرور
هر نمونه طوری پیکربندی شده است که یک وب سرور آپاچی را با یک اسکریپت ساده PHP اجرا کند که چیزی شبیه به زیر را رندر میکند:
صفحه ارائه شده از: us-east1-a-mig-ww2h
برای اطمینان از عملکرد صحیح سرورهای وب خود، به Compute Engine -> VM instances بروید. مطمئن شوید که نمونههای جدید شما (مثلاً us-east1-a-mig-xxx) مطابق با تعاریف گروه نمونه آنها ایجاد شدهاند.
اکنون، یک درخواست وب در مرورگر خود به آن ارسال کنید تا مطمئن شوید که وب سرور در حال اجرا است (شروع این کار ممکن است یک دقیقه طول بکشد). در صفحه نمونههای ماشین مجازی در زیر Compute Engine، نمونهای را که توسط گروه نمونه شما ایجاد شده است انتخاب کنید و روی IP خارجی (عمومی) آن کلیک کنید.
یا در مرورگر خود، به آدرس http://<IP_Address> بروید.
۵. تنظیم متعادلکننده بار
ایجاد بررسی سلامت
ابتدا باید یک بررسی سلامت اولیه ایجاد کنیم تا مطمئن شویم سرویسهای ما با موفقیت در حال اجرا هستند. ما یک بررسی سلامت اولیه ایجاد خواهیم کرد، سفارشیسازیهای پیشرفتهتری نیز در دسترس هستند.
از پوسته ابری
gcloud compute health-checks create http http-basic-check \
--port 80
خروجی
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
رزرو آدرس IP خارجی
برای این مرحله، شما باید یک آدرس IP استاتیک جهانی رزرو کنید که بعداً به متعادلکننده بار متصل خواهد شد.
از پوسته ابری
gcloud compute addresses create lb-ipv4-2 \
--ip-version=IPV4 \
--global
خروجی
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
حتماً آدرس IP رزرو شده را یادداشت کنید.
gcloud compute addresses describe lb-ipv4-2 \
--format="get(address)" \
--global
ایجاد سرویسهای بکاند
حالا باید یک سرویس backend برای گروههای نمونه مدیریتشدهای که قبلاً ایجاد کردیم، ایجاد کنیم.
از پوسته ابری
gcloud compute backend-services create east-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global
خروجی
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
اضافه کردن MIG ها به سرویس های Backend
حالا که سرویسهای بکاند را ایجاد کردهایم، باید گروههای نمونه مدیریتشدهای که قبلاً ایجاد کردهایم را به هر سرویس بکاند اضافه کنیم.
از پوسته ابری
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
از پوسته ابری
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
با اجرای دستور زیر میتوانید تأیید کنید که backendها اضافه شدهاند.
از پوسته ابری
gcloud compute backend-services list
خروجی
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
ایجاد نقشه URL
حالا یک نقشه URL ایجاد خواهیم کرد.
gcloud compute url-maps create web-map-http \
--default-service=east-backend-service \
--global
خروجی
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http]. NAME DEFAULT_SERVICE web-map-http backendServices/east-backend-service
ایجاد رابط کاربری HTTP
مرحله آخر در ایجاد متعادلکننده بار، ایجاد frontend است. این کار آدرس IP که قبلاً رزرو کردهاید را به نقشه URL متعادلکننده بار که ایجاد کردهاید، نگاشت میکند.
از پوسته ابری
gcloud compute target-http-proxies create http-lb-proxy-adv \
--url-map=web-map-http
خروجی
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv]. NAME URL_MAP http-lb-proxy-adv web-map-http
در مرحله بعد باید یک قانون ارسال سراسری ایجاد کنید که آدرس IP رزرو شده قبلی را به پروکسی HTTP نگاشت کند.
از پوسته ابری
gcloud compute forwarding-rules create http-content-rule \
--load-balancing-scheme EXTERNAL_MANAGED \
--address=lb-ipv4-2 \
--global \
--target-http-proxy=http-lb-proxy-adv \
--ports=80
در این مرحله، میتوانید تأیید کنید که متعادلکننده بار با آدرس IP که قبلاً یادداشت کردهاید، کار میکند.
۶. تأیید کنید که متعادلکننده بار کار میکند
برای تأیید اینکه ویژگی متعادلسازی بار کار میکند، باید مقداری بار ایجاد کنید. برای انجام این کار، یک ماشین مجازی جدید برای شبیهسازی بار ایجاد خواهیم کرد.
ایجاد Siege-vm
حالا شما siege-vm را ایجاد خواهید کرد که برای تولید بار از آن استفاده خواهید کرد.
از پوسته ابری
gcloud compute instances create siege-vm \
--network=httplbs \
--zone=us-east1-a \
--machine-type=e2-medium \
--tags=allow-ssh,http-server \
--metadata=startup-script='sudo apt-get -y install siege'
خروجی
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-central1-ir1 e2-medium 10.132.0.15 34.143.20.68 RUNNING
سپس میتوانید با استفاده از SSH به ماشین مجازی که ایجاد کردهاید، متصل شوید. پس از ایجاد، روی SSH کلیک کنید تا ترمینال اجرا شود و اتصال برقرار شود.
پس از اتصال، دستور زیر را برای تولید بار اجرا کنید. از آدرس IP که قبلاً برای متعادلکننده بار خارجی http رزرو کردهاید، استفاده کنید.
از پوسته ابری
siege -c 20 http://$lb-ipv4-2
خروجی
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
بررسی توزیع بار
اکنون که Siege در حال اجرا است، زمان آن رسیده است که بررسی کنیم ترافیک به طور مساوی بین دو گروه نمونه مدیریت شده توزیع میشود.
محاصره را متوقف کنید
حالا که نشان دادید تقسیم ترافیک پیشرفته کار میکند، وقت آن رسیده که محاصره را متوقف کنید. برای انجام این کار، به ترمینال SSH در siege-vm برگردید و CTRL+C را فشار دهید تا محاصره متوقف شود.
۷. پیکربندی سیاست Lb سرویس
ایجاد یک سیاست LB سرویس
اکنون که تنظیمات اولیه انجام شد، یک سیاست Load Balancing برای سرویس ایجاد میکنیم و ویژگیهای پیشرفته را امتحان میکنیم. به عنوان مثال، سرویس را طوری پیکربندی میکنیم که از برخی تنظیمات پیشرفته Load Balancing استفاده کند. در این مثال، ما فقط یک سیاست برای اعمال ویژگی تخلیه خودکار ظرفیت ایجاد میکنیم. اما میتوانید ویژگیهای دیگر را نیز امتحان کنید.
از پوسته ابری
gcloud beta network-services service-lb-policies create http-policy \
--auto-capacity-drain --location=global
میتوانیم با دستور gcloud زیر، تأیید کنیم که پالیسی ما با موفقیت ایجاد شده است:
از پوسته ابری
gcloud beta network-services service-lb-policies list --location=global
خروجی
NAME http-policy
سیاست LB سرویس را به سرویس backend پیوست کنید
اکنون خطمشی جدید را به سرویس backend موجود شما در بالا پیوست خواهیم کرد.
از پوسته ابری
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
۸. سلامت بکاند را تنظیم کنید
در این مرحله، سیاست جدید سرویس lb به سرویس backend شما اعمال شده است. بنابراین از نظر فنی میتوانید مستقیماً به پاکسازی بروید. اما به عنوان بخشی از آزمایشگاه کد، ما همچنین برخی از ترفندهای اضافی در مرحله تولید را انجام خواهیم داد تا نحوه عملکرد سیاست جدید را به شما نشان دهیم.
ویژگی تخلیه خودکار ظرفیت، زمانی که تعداد کل سرورهای سالم به زیر یک آستانه (25%) کاهش یابد، به طور خودکار یک سرور MIG بکاند را از متعادلکننده بار حذف میکند. برای آزمایش این ویژگی، ما به ماشینهای مجازی در us-east1-b-mig از طریق SSH متصل میشویم و آنها را ناسالم میکنیم. با آستانه 25%، باید به چهار ماشین مجازی از طریق SSH متصل شوید و سرور آپاچی را خاموش کنید.
برای انجام این کار، چهار ماشین مجازی را انتخاب کنید و با کلیک روی SSH به آنها SSH کنید تا یک ترمینال باز شود و متصل شوید. سپس دستور زیر را اجرا کنید.
sudo apachectl stop
در این مرحله، ویژگی تخلیه خودکار ظرفیت فعال میشود و us-east1-b-mig درخواستهای جدیدی دریافت نخواهد کرد.
۹. بررسی کنید که ویژگی تخلیه خودکار ظرفیت کار میکند
شروع مجدد محاصره
برای تأیید ویژگی جدید، دوباره از ماشین مجازی siege استفاده خواهیم کرد. بیایید به ماشین مجازی که در مرحله قبل ایجاد کردید، SSH کنیم. پس از ایجاد، روی SSH کلیک کنید تا ترمینال اجرا شود و متصل شوید.
پس از اتصال، دستور زیر را برای تولید بار اجرا کنید. از آدرس IP که قبلاً برای متعادلکننده بار خارجی http رزرو کردهاید، استفاده کنید.
از پوسته ابری
siege -c 20 http://$lb-ipv4-2
خروجی
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
در این مرحله، متوجه خواهید شد که همه درخواستها به us-east1-a-mig ارسال میشوند.
محاصره را متوقف کنید
حالا که نشان دادید تقسیم ترافیک پیشرفته کار میکند، وقت آن رسیده که محاصره را متوقف کنید. برای انجام این کار، به ترمینال SSH در siege-vm برگردید و CTRL+C را فشار دهید تا محاصره متوقف شود.
۱۰. مراحل پاکسازی
حالا که کارمان با محیط آزمایشگاهی تمام شد، وقت آن رسیده که آن را از بین ببریم. لطفاً دستورات زیر را برای حذف محیط آزمایشی اجرا کنید.
از پوسته ابری
gcloud compute instances delete siege-vm --zone=us-east1-a gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud beta network-services service-lb-policies delete http-policy --location=global gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b gcloud compute instance-templates delete test-template gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
۱۱. تبریک میگویم!
تبریک میگویم که آزمایشگاه کد را تمام کردی.
آنچه ما پوشش دادهایم
- ایجاد یک متعادلکننده بار برنامه خارجی با سیاست سرویس lb.
- سرویس بکاند خود را با قابلیت تخلیه خودکار ظرفیت پیکربندی کنید.
مراحل بعدی
- سایر ویژگیهای ارائه شده توسط خطمشی سرویس lb را امتحان کنید.