1. Giới thiệu
Chào mừng bạn đến với lớp học lập trình về các hoạt động tối ưu hoá nâng cao tính năng cân bằng tải!
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách định cấu hình các lựa chọn nâng cao về cân bằng tải cho trình cân bằng tải ứng dụng bên ngoài toàn cầu. Trước khi bắt đầu, bạn nên xem tài liệu về tính năng cân bằng tải trên đám mây trước ( https://cloud.google.com/load-balancing/docs/load-balancing-overview)

Hình 1. Quy trình chọn điểm cuối đích bằng trình cân bằng tải ứng dụng bên ngoài toàn cầu.
Cấu trúc liên kết và trường hợp sử dụng của lớp học lập trình

Hình 2. Cấu trúc liên kết định tuyến của trình cân bằng tải HTTP
Trong lớp học lập trình này, bạn sẽ thiết lập 2 nhóm thực thể được quản lý. Bạn sẽ tạo một trình cân bằng tải https bên ngoài (toàn cầu). Trình cân bằng tải sẽ sử dụng một số tính năng trong danh sách các chức năng nâng cao mà trình cân bằng tải dựa trên Envoy hỗ trợ. Sau khi triển khai, bạn sẽ tạo một số tải mô phỏng và xác minh rằng các cấu hình bạn đặt đang hoạt động phù hợp.
Kiến thức bạn sẽ học được
- Cách định cấu hình ServiceLbPolicy để tinh chỉnh trình cân bằng tải.
Bạn cần có
- Kiến thức về tính năng Cân bằng tải HTTPS bên ngoài. Nửa đầu của lớp học lập trình này khá giống với lớp học lập trình về Trình cân bằng tải HTTP bên ngoài có tính năng Quản lý lưu lượng truy cập nâng cao (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Bạn nên xem qua phần đó trước.
2. Trước khi bắt đầu
Trong Cloud Shell, hãy đảm bảo rằng bạn đã thiết lập mã dự án
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
Cho phép API
Bật tất cả các dịch vụ cần thiết
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. Tạo mạng VPC
Tạo mạng VPC
Từ Cloud Shell
gcloud compute networks create httplbs --subnet-mode=auto
Đầu ra
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
Tạo quy tắc tường lửa VPC
Sau khi tạo VPC, giờ đây, bạn sẽ tạo một quy tắc tường lửa. Quy tắc tường lửa sẽ được dùng để cho phép tất cả các IP truy cập vào IP ngoài của trang web ứng dụng kiểm thử trên cổng 80 cho lưu lượng truy cập http.
Từ 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
Đầu ra
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
Trong lớp học lập trình này, chúng ta sẽ điều chỉnh trạng thái của các VM. Vì vậy, chúng ta cũng sẽ tạo các quy tắc tường lửa để cho phép SSH.
Từ Cloud Shell
gcloud compute firewall-rules create fw-allow-ssh \
--network=httplbs \
--action=allow \
--direction=ingress \
--target-tags=allow-ssh \
--rules=tcp:22
Đầu ra
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. Thiết lập Nhóm thực thể được quản lý
Bạn cần thiết lập Nhóm phiên bản được quản lý, trong đó có các mẫu cho tài nguyên phụ trợ mà Bộ cân bằng tải HTTP sử dụng. Trước tiên, chúng ta sẽ tạo các Mẫu phiên bản để xác định cấu hình cho các VM sẽ được tạo cho từng khu vực. Tiếp theo, đối với một phần phụ trợ ở mỗi khu vực, chúng ta sẽ tạo một Nhóm phiên bản được quản lý tham chiếu đến một Mẫu phiên bản.
Nhóm phiên bản được quản lý có thể có phạm vi theo khu vực hoặc theo vùng. Trong bài tập này, chúng ta sẽ tạo Nhóm phiên bản được quản lý theo khu vực.
Trong phần này, bạn có thể thấy một tập lệnh khởi động được tạo sẵn sẽ được tham chiếu khi tạo phiên bản. Tập lệnh khởi động này cài đặt và bật các chức năng của máy chủ web mà chúng ta sẽ dùng để mô phỏng một ứng dụng web. Bạn có thể khám phá tập lệnh này.
Tạo mẫu phiên bản
Bước đầu tiên là tạo một mẫu thực thể.
Từ 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'
Đầu ra
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Giờ đây, bạn có thể xác minh rằng các mẫu phiên bản của chúng tôi đã được tạo thành công bằng lệnh gcloud sau:
Từ Cloud Shell
gcloud compute instance-templates list
Đầu ra
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Tạo Nhóm thực thể
Giờ đây, chúng ta phải tạo một nhóm phiên bản được quản lý từ các mẫu phiên bản mà chúng ta đã tạo trước đó.
Từ Cloud Shell
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
Đầu ra
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
Từ Cloud Shell
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
Đầu ra
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
Chúng ta có thể xác minh rằng các nhóm phiên bản đã được tạo thành công bằng lệnh gcloud sau:
Từ Cloud Shell
gcloud compute instance-groups list
Đầu ra
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
Xác minh chức năng của máy chủ web
Mỗi thực thể được định cấu hình để chạy một máy chủ web Apache bằng một tập lệnh PHP đơn giản, hiển thị nội dung như sau:
Trang được phân phát từ: us-east1-a-mig-ww2h
Để đảm bảo máy chủ web của bạn hoạt động đúng cách, hãy chuyển đến Compute Engine -> VM instances (Phiên bản máy ảo). Đảm bảo rằng các phiên bản mới (ví dụ: us-east1-a-mig-xxx) đã được tạo theo định nghĩa nhóm phiên bản của chúng.
Bây giờ, hãy thực hiện một yêu cầu web trong trình duyệt để đảm bảo máy chủ web đang chạy (quá trình này có thể mất một phút để bắt đầu). Trên trang VM instances (Các phiên bản máy ảo) trong Compute Engine, hãy chọn một phiên bản do nhóm phiên bản của bạn tạo và nhấp vào IP bên ngoài (công khai) của phiên bản đó.
Hoặc trong trình duyệt, hãy truy cập vào http://<IP_Address>
5. Thiết lập Trình cân bằng tải
Tạo quy trình kiểm tra tình trạng sức khoẻ
Trước tiên, chúng ta phải tạo một quy trình kiểm tra tình trạng cơ bản để đảm bảo các dịch vụ của chúng ta hoạt động thành công. Chúng tôi sẽ tạo một quy trình kiểm tra tình trạng cơ bản, nhưng bạn có thể tuỳ chỉnh nâng cao hơn nữa.
Từ Cloud Shell
gcloud compute health-checks create http http-basic-check \
--port 80
Đầu ra
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
Đặt trước địa chỉ IP ngoài
Đối với bước này, bạn sẽ cần đặt trước một địa chỉ IP tĩnh có sẵn trên toàn cầu. Địa chỉ này sẽ được đính kèm vào Bộ cân bằng tải sau này.
Từ Cloud Shell
gcloud compute addresses create lb-ipv4-2 \
--ip-version=IPV4 \
--global
Đầu ra
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
Nhớ ghi lại địa chỉ IP đã được đặt trước.
gcloud compute addresses describe lb-ipv4-2 \
--format="get(address)" \
--global
Tạo dịch vụ phụ trợ
Bây giờ, chúng ta phải tạo một dịch vụ phụ trợ cho các nhóm phiên bản được quản lý mà chúng ta đã tạo trước đó.
Từ 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
Đầu ra
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
Thêm MIG vào Dịch vụ phụ trợ
Bây giờ, sau khi tạo các dịch vụ phụ trợ, chúng ta phải thêm Nhóm thực thể được quản lý mà chúng ta đã tạo trước đó vào từng dịch vụ phụ trợ.
Từ Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
Từ Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
Bạn có thể xác minh rằng các phần phụ trợ đã được thêm bằng cách chạy lệnh sau.
Từ Cloud Shell
gcloud compute backend-services list
Đầu ra
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
Tạo bản đồ URL
Bây giờ, chúng ta sẽ tạo một bản đồ URL.
gcloud compute url-maps create web-map-http \
--default-service=east-backend-service \
--global
Đầu ra
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
Tạo giao diện người dùng HTTP
Bước cuối cùng trong quá trình tạo trình cân bằng tải là tạo giao diện người dùng. Thao tác này sẽ liên kết địa chỉ IP mà bạn đã đặt trước đó với sơ đồ URL của bộ cân bằng tải mà bạn đã tạo.
Từ Cloud Shell
gcloud compute target-http-proxies create http-lb-proxy-adv \
--url-map=web-map-http
Đầu ra
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
Tiếp theo, bạn cần tạo một quy tắc chuyển tiếp chung để liên kết địa chỉ IP đã đặt trước trước đó với proxy HTTP.
Từ 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
Tại thời điểm này, bạn có thể xác nhận rằng bộ cân bằng tải đang hoạt động với địa chỉ IP mà bạn đã ghi lại trước đó.
6. Xác minh rằng Bộ cân bằng tải đang hoạt động
Để xác minh rằng tính năng cân bằng tải đang hoạt động, bạn cần tạo một số tải. Để làm việc này, chúng ta sẽ tạo một VM mới để mô phỏng tải.
Tạo Siege-vm
Giờ đây, bạn sẽ tạo siege-vm mà bạn sẽ dùng để tạo tải
Từ 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'
Đầu ra
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
Tiếp theo, bạn có thể SSH vào VM mà bạn đã tạo. Sau khi tạo, hãy nhấp vào SSH để chạy một thiết bị đầu cuối và kết nối.
Sau khi kết nối, hãy chạy lệnh sau để tạo tải. Sử dụng địa chỉ IP mà bạn đã đặt trước cho trình cân bằng tải http bên ngoài.
Từ Cloud Shell
siege -c 20 http://$lb-ipv4-2
Đầu ra
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
Kiểm tra mức phân bổ tải
Giờ đây, khi Siege đang chạy, bạn cần kiểm tra để đảm bảo lưu lượng truy cập được phân phối đồng đều cho hai nhóm thực thể được quản lý.
Ngừng cuộc bao vây
Bây giờ, bạn đã chứng minh được rằng tính năng phân tách lưu lượng truy cập nâng cao đang hoạt động, đã đến lúc dừng cuộc tấn công. Để thực hiện việc này, hãy quay lại thiết bị đầu cuối SSH của siege-vm rồi nhấn tổ hợp phím CTRL+C để dừng siege.
7. Định cấu hình chính sách cân bằng tải dịch vụ
Tạo chính sách LB dịch vụ
Sau khi hoàn tất chế độ cài đặt cơ bản, chúng ta sẽ tạo Chính sách về LB dịch vụ và dùng thử các tính năng nâng cao. Ví dụ: chúng ta sẽ định cấu hình dịch vụ để sử dụng một số chế độ cài đặt nâng cao về cân bằng tải. Trong ví dụ này, chúng ta sẽ chỉ tạo một chính sách để thực hiện tính năng tự động giảm dung lượng. Tuy nhiên, bạn có thể thoải mái dùng thử các tính năng khác.
Từ Cloud Shell
gcloud beta network-services service-lb-policies create http-policy \
--auto-capacity-drain --location=global
Chúng ta có thể xác minh rằng chính sách đã được tạo thành công bằng lệnh gcloud sau:
Từ Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Đầu ra
NAME http-policy
Đính kèm Chính sách LB dịch vụ vào dịch vụ phụ trợ
Giờ đây, chúng tôi sẽ đính kèm chính sách mới vào dịch vụ phụ trợ hiện có của bạn ở trên.
Từ Cloud Shell
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
8. Điều chỉnh trạng thái của hệ thống phụ trợ
Tại thời điểm này, chính sách cân bằng tải dịch vụ mới đã được áp dụng cho dịch vụ phụ trợ của bạn. Vì vậy, về mặt kỹ thuật, bạn có thể chuyển thẳng đến bước dọn dẹp. Tuy nhiên, trong lớp học lập trình này, chúng ta cũng sẽ thực hiện một số điều chỉnh bổ sung cho bản phát hành công khai để cho bạn thấy cách chính sách mới hoạt động.
Tính năng tự động giảm công suất sẽ tự động xoá một MIG phụ trợ khỏi trình cân bằng tải khi tổng số phụ trợ hoạt động bình thường giảm xuống dưới một ngưỡng nhất định (25%). Để kiểm thử tính năng này, chúng ta sẽ SSH vào các VM trong us-east1-b-mig và khiến chúng không hoạt động. Với ngưỡng 25%, bạn sẽ cần kết nối SSH với 4 máy ảo và tắt máy chủ Apache.
Để thực hiện việc này, hãy chọn 4 máy ảo và SSH đến máy ảo đó bằng cách nhấp vào SSH để chạy một Terminal và kết nối. Sau đó, hãy chạy lệnh sau.
sudo apachectl stop
Tại thời điểm này, tính năng tự động giảm công suất sẽ được kích hoạt và us-east1-b-mig sẽ không nhận được các yêu cầu mới.
9. Xác minh rằng tính năng Tự động tiêu hao dung lượng đang hoạt động
Khởi động lại Siege
Để xác minh tính năng mới, chúng ta sẽ sử dụng lại VM siege. Hãy SSH vào VM mà bạn đã tạo ở bước trước. Sau khi tạo, hãy nhấp vào SSH để chạy một thiết bị đầu cuối và kết nối.
Sau khi kết nối, hãy chạy lệnh sau để tạo tải. Sử dụng địa chỉ IP mà bạn đã đặt trước cho trình cân bằng tải http bên ngoài.
Từ Cloud Shell
siege -c 20 http://$lb-ipv4-2
Đầu ra
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
Tại thời điểm này, bạn sẽ nhận thấy rằng tất cả các yêu cầu đều được gửi đến us-east1-a-mig.
Ngừng cuộc bao vây
Bây giờ, bạn đã chứng minh được rằng tính năng phân tách lưu lượng truy cập nâng cao đang hoạt động, đã đến lúc dừng cuộc tấn công. Để thực hiện việc này, hãy quay lại thiết bị đầu cuối SSH của siege-vm rồi nhấn tổ hợp phím CTRL+C để dừng siege.
10. Các bước dọn dẹp
Giờ đây, khi đã hoàn tất môi trường phòng thí nghiệm, chúng ta cần phải tháo dỡ môi trường này. Vui lòng chạy các lệnh sau để xoá môi trường thử nghiệm.
Từ 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. Xin chúc mừng!
Chúc mừng bạn đã hoàn thành lớp học lập trình này.
Nội dung đã đề cập
- Tạo trình cân bằng tải ứng dụng bên ngoài bằng chính sách lb dịch vụ.
- Định cấu hình dịch vụ phụ trợ của bạn bằng tính năng tự động giảm dung lượng.
Các bước tiếp theo
- Hãy thử các tính năng khác do chính sách lb dịch vụ cung cấp.