1. مقدمه
به نرم افزار Codelab پیشرفته بهینه سازی تعادل بار خوش آمدید!
در این کد لبه، نحوه پیکربندی گزینه های متعادل کننده بار پیشرفته برای متعادل کننده بار برنامه خارجی جهانی را خواهید آموخت. قبل از شروع، توصیه می شود ابتدا سند مربوط به تعادل بار ابری را بررسی کنید ( https://cloud.google.com/load-balancing/docs/load-balancing-overview )
شکل 1. گردش کار انتخاب یک نقطه پایان مقصد با متعادل کننده بار جهانی برنامه خارجی.
توپولوژی Codelab و موارد استفاده
شکل 2 . توپولوژی مسیریابی بار متعادل کننده HTTP
در طول این آزمایشگاه کد، دو گروه نمونه مدیریت شده را راه اندازی خواهید کرد. شما یک بار متعادل کننده جهانی https خارجی ایجاد خواهید کرد. متعادل کننده بار از چندین ویژگی از لیست قابلیت های پیشرفته ای که متعادل کننده بار مبتنی بر فرستاده پشتیبانی می کند استفاده می کند. پس از استقرار، مقداری بار شبیه سازی شده ایجاد می کنید و بررسی می کنید که تنظیماتی که تنظیم کرده اید به درستی کار می کنند.
چیزی که یاد خواهید گرفت
- چگونه ServiceLbPolicy را برای تنظیم دقیق بار متعادل کننده خود پیکربندی کنیم.
آنچه شما نیاز دارید
- آشنایی با Load Balancing خارجی HTTPS. نیمه اول این کد لبه کاملاً شبیه به HTTP های خارجی LB با Codelab مدیریت ترافیک پیشرفته (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv ) است. توصیه می شود ابتدا آن را مرور کنید.
2. قبل از شروع
در داخل 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
3. شبکه VPC را ایجاد کنید
یک شبکه VPC ایجاد کنید
از Cloud Shell
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 خارجی وب سایت برنامه آزمایشی در پورت 80 برای ترافیک http مورد استفاده قرار خواهد گرفت.
از Cloud Shell
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 اجازه دهیم.
از Cloud Shell
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
4. گروه های نمونه مدیریت شده را راه اندازی کنید
شما باید گروههای نمونه مدیریت شده را راهاندازی کنید که شامل الگوهایی برای منابع پشتیبان مورد استفاده توسط HTTP Load Balancer باشد. ابتدا نمونههایی را ایجاد میکنیم که پیکربندی ماشینهای مجازی را برای هر منطقه تعریف میکنند. در مرحله بعد، برای یک Backend در هر منطقه، یک Managed Instance Group ایجاد می کنیم که به یک Instance Template ارجاع می دهد.
گروههای نمونه مدیریتشده میتوانند منطقهای یا منطقهای باشند. برای این تمرین آزمایشگاهی، گروههای نمونه مدیریت شده منطقهای را ایجاد خواهیم کرد.
در این بخش، میتوانید یک اسکریپت راهاندازی از پیش ساخته شده را ببینید که پس از ایجاد نمونه به آن ارجاع داده میشود. این اسکریپت راه اندازی قابلیت های وب سرور را نصب و فعال می کند که ما از آنها برای شبیه سازی یک برنامه وب استفاده خواهیم کرد. با خیال راحت این اسکریپت را بررسی کنید.
الگوهای نمونه را ایجاد کنید
اولین قدم ایجاد یک الگوی نمونه است.
از Cloud Shell
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 زیر ایجاد شده اند:
از Cloud Shell
gcloud compute instance-templates list
خروجی
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
گروه های نمونه را ایجاد کنید
اکنون باید یک گروه نمونه مدیریت شده از الگوهای نمونه ای که قبلا ایجاد کردیم ایجاد کنیم.
از Cloud Shell
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
از Cloud Shell
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 زیر می توانیم تأیید کنیم که گروه های نمونه ما با موفقیت ایجاد شده اند:
از Cloud Shell
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 -> Instances VM بروید. اطمینان حاصل کنید که نمونه های جدید شما (به عنوان مثال us-east1-a-mig-xxx) مطابق با تعاریف گروه نمونه آنها ایجاد شده است.
اکنون، یک درخواست وب در مرورگر خود از آن بنویسید تا مطمئن شوید که سرور وب در حال اجرا است (این ممکن است یک دقیقه طول بکشد تا شروع شود). در صفحه نمونه های VM در زیر Compute Engine، نمونه ای را انتخاب کنید که توسط گروه نمونه خود ایجاد شده است و روی IP خارجی (عمومی) آن کلیک کنید.
یا در مرورگر خود به http://<IP_Address> بروید
5. Load Balancer را راه اندازی کنید
ایجاد چک سلامت
ابتدا باید یک بررسی بهداشتی اساسی ایجاد کنیم تا مطمئن شویم که خدمات ما با موفقیت راه اندازی و اجرا می شود. ما یک بررسی اولیه سلامت ایجاد خواهیم کرد، سفارشی سازی های پیشرفته تری در دسترس است.
از Cloud Shell
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 ثابت جهانی را رزرو کنید که بعداً به Load Balancer متصل می شود.
از Cloud Shell
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 ایجاد کنید
اکنون باید یک سرویس Backend برای گروههای نمونه مدیریت شده ایجاد کنیم.
از Cloud Shell
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 اضافه کنید
اکنون که خدمات باطن را ایجاد کردهایم، اکنون باید گروههای نمونه مدیریت شده را که قبلاً ایجاد کردهایم به هر سرویس باطنی اضافه کنیم.
از Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
از Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
با اجرای دستور زیر می توانید بررسی کنید که Backend ها اضافه شده اند.
از Cloud Shell
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 متعادل کننده بار که ایجاد کردید نگاشت می کند.
از Cloud Shell
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 ترسیم می کند.
از Cloud Shell
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 که قبلاً ذکر کرده اید کار می کند.
6. بررسی کنید که Load Balancer کار می کند
برای تأیید اینکه ویژگی متعادل کننده بار کار می کند، باید مقداری بار ایجاد کنید. برای این کار ما یک VM جدید برای شبیه سازی بار ایجاد می کنیم.
Siege-vm را ایجاد کنید
اکنون siege-vm را ایجاد می کنید که از آن برای تولید بار استفاده می کنید
از Cloud Shell
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 را در VMی که ایجاد کرده اید SSH کنید. پس از ایجاد، روی SSH کلیک کنید تا ترمینال راه اندازی شود و متصل شوید.
پس از اتصال، دستور زیر را برای تولید بار اجرا کنید. از آدرس IP که قبلاً برای متعادل کننده بار خارجی http رزرو کرده بودید استفاده کنید.
از Cloud Shell
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 را فشار دهید تا اجرای محاصره متوقف شود.
7. Service Lb Policy را پیکربندی کنید
یک خط مشی LB Service ایجاد کنید
اکنون که تنظیمات اولیه انجام شده است، یک Service Lb Policy ایجاد می کنیم و ویژگی های پیشرفته را امتحان می کنیم. به عنوان مثال، ما سرویس را برای استفاده از برخی تنظیمات پیشرفته تعادل بار پیکربندی می کنیم. در این مثال، ما فقط می خواهیم یک خط مشی برای اعمال ویژگی تخلیه ظرفیت خودکار ایجاد کنیم. اما با خیال راحت ویژگی های دیگر را امتحان کنید.
از Cloud Shell
gcloud beta network-services service-lb-policies create http-policy \ --auto-capacity-drain --location=global
با دستور gcloud زیر می توانیم تأیید کنیم که خط مشی ما با موفقیت ایجاد شده است:
از Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
خروجی
NAME http-policy
Service LB Policy را به سرویس Backend پیوست کنید
اکنون خط مشی جدید را به سرویس پشتیبان موجود در بالا پیوست می کنیم.
از Cloud Shell
gcloud beta compute backend-services update east-backend-service \ --service-lb-policy=http-policy --global
8. بهینه سازی Backend Health
در این مرحله، خط مشی جدید سرویس lb برای سرویس باطن شما اعمال شده است. بنابراین از نظر فنی می توانید مستقیماً به پاکسازی بروید. اما بهعنوان بخشی از نرمافزار کد، ما همچنین تغییرات بیشتری در تولید انجام خواهیم داد تا به شما نشان دهیم سیاست جدید چگونه کار میکند.
ویژگی تخلیه ظرفیت خودکار به طور خودکار یک MIG پشتیبان را از متعادل کننده بار حذف می کند زمانی که تعداد کل پشتیبان های سالم به زیر آستانه (25٪) کاهش یابد. برای آزمایش این ویژگی، میخواهیم SSH را به ماشینهای مجازی در us-east1-b-mig وارد کنیم و آنها را ناسالم کنیم. با آستانه 25٪، باید SSH را به چهار ماشین مجازی منتقل کنید و سرور آپاچی را خاموش کنید.
برای انجام این کار، چهار ماشین مجازی و SSH را با کلیک روی SSH انتخاب کنید تا ترمینال راه اندازی شود و متصل شوید. سپس دستور زیر را اجرا کنید.
sudo apachectl stop
در این مرحله، ویژگی تخلیه خودکار ظرفیت فعال میشود و us-east1-b-mig درخواستهای جدیدی دریافت نخواهد کرد.
9. بررسی کنید که ویژگی تخلیه ظرفیت خودکار کار می کند
محاصره را دوباره راه اندازی کنید
برای تأیید ویژگی جدید، دوباره از Siege VM استفاده می کنیم. بیایید SSH را به ماشین مجازی که در مرحله قبل ایجاد کردید وارد کنیم. پس از ایجاد، روی SSH کلیک کنید تا ترمینال راه اندازی شود و متصل شوید.
پس از اتصال، دستور زیر را برای تولید بار اجرا کنید. از آدرس IP که قبلاً برای متعادل کننده بار خارجی http رزرو کرده بودید استفاده کنید.
از Cloud Shell
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 را فشار دهید تا اجرای محاصره متوقف شود.
10. مراحل پاکسازی
حالا که کارمان با محیط آزمایشگاه تمام شد، وقت آن است که آن را خراب کنیم. لطفا دستورات زیر را برای حذف محیط تست اجرا کنید.
از Cloud Shell
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
11. تبریک می گویم!
برای تکمیل کد لبه تبریک می گویم.
آنچه را پوشش داده ایم
- ایجاد یک متعادل کننده بار برنامه خارجی با خط مشی سرویس lb.
- سرویس پشتیبان خود را با ویژگی تخلیه خودکار ظرفیت پیکربندی کنید.
مراحل بعدی
- سایر ویژگی های ارائه شده توسط خط مشی سرویس lb را امتحان کنید.