1. Giới thiệu
Chào mừng bạn đến với lớp học lập trình về tối ưu hoá cân bằng tải nâng cao!
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 tuỳ chọn cân bằng tải nâng cao cho trình cân bằng tải ứng dụng bên ngoài chung. 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 ( 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 hai 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 tính 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 được mô phỏng và xác minh rằng các cấu hình bạn đặt đang hoạt động đúng cách.
Kiến thức bạn sẽ học được
- Cách định cấu hình ServiceLbPolicy để tinh chỉnh bộ cân bằng tải.
Bạn cần có
- 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 LB HTTP bên ngoài với Lớp học lập trình về 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 làm việc đó trước.
2. Trước khi bắt đầu
Trong Cloud Shell, hãy đảm bảo 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 lưới VPC
Của 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ờ bạn sẽ tạo một quy tắc về tường lửa. Quy tắc tường lửa sẽ được dùng để cho phép tất cả IP truy cập IP ngoài trên trang web của ứng dụng kiểm tra trên cổng 80 đối với lưu lượng truy cập http.
Của 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 tình trạng của các máy ảo. Vì vậy, chúng ta cũng sẽ tạo các quy tắc tường lửa để cho phép SSH.
Trong 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 thực thể được quản lý, trong đó có các mẫu cho tài nguyên phụ trợ mà Trình cân bằng tải HTTP sử dụng. Trước tiên, chúng ta sẽ tạo Mẫu thực thể để xác định cấu hình cho các máy ảo sẽ được tạo cho từng khu vực. Tiếp theo, đối với phần phụ trợ ở mỗi khu vực, chúng ta sẽ tạo một Nhóm thực thể được quản lý tham chiếu đến một Mẫu thực thể.
Phạm vi của nhóm Thực thể được quản lý có thể là theo Khu vực hoặc theo Khu vực. Đối với bài tập trong phòng thí nghiệm này, chúng ta sẽ tạo Nhóm thực thể được quản lý theo vùng.
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 thực thể. 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 ứng dụng web. Bạn có thể khám phá tập lệnh này.
Tạo mẫu thực thể
Bước đầu tiên là tạo một mẫu thực thể.
Trong 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 các mẫu thực thể của chúng ta đã được tạo thành công bằng lệnh gcloud sau đây:
Trong 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ể
Bây giờ, chúng ta phải tạo một nhóm thực thể được quản lý từ các mẫu thực thể mà chúng ta đã tạo trước đó.
Trong 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
Trong 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 các nhóm thực thể của mình đã được tạo thành công hay chưa bằng lệnh gcloud sau đây:
Trong 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 phiên bản được định cấu hình để chạy máy chủ web Apache bằng tập lệnh PHP đơn giản hiển thị như dưới đây:
Trang phân phát từ: us-east1-a-mig-ww2h
Để đảm bảo máy chủ web của bạn đang hoạt động đúng cách, hãy chuyển đến Compute Engine -> 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 tạo một yêu cầu web trong trình duyệt của bạn để đả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 các phiên bản máy ảo trong phần Compute Engine, hãy chọn một phiên bản do nhóm thực thể của bạn tạo rồi 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 tính năng Kiểm tra tình trạng
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 rằng các dịch vụ của chúng ta đang hoạt động thành công. Chúng ta 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 nhiều hơn nữa.
Của 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 bên ngoài
Ở bước này, bạn cần đặt trước một địa chỉ IP tĩnh có sẵn trên toàn cầu. Sau đó, địa chỉ này sẽ được đính kèm vào Trình cân bằng tải.
Trong 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].
Hãy 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 thực thể được quản lý mà chúng ta đã tạo trước đó.
Của 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ợ
Giờ đây, khi đã tạo các dịch vụ phụ trợ, chúng ta phải thêm các 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ợ.
Của Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
Trong 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.
Trong 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 để 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.
Của 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 sẽ liên kết địa chỉ IP được đặt trước đó với proxy HTTP.
Trong 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 trình 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 Trình 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ố lượt tải. Để thực hiện việc này, chúng ta sẽ tạo một máy ảo mới để mô phỏng tải.
Tạo Siege-vm
Bây giờ, bạn sẽ tạo siege-vm để tạo tải
Của 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 máy ảo mà bạn đã tạo. Sau khi tạo, hãy nhấp vào SSH để khởi 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.
Trong 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 tình trạng phân phối tải
Giờ đây, khi Siege đang chạy, đã đến lúc 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ý.
Dừng cuộc vây hãm
Giờ đây, khi bạn đã chứng minh rằng tính năng phân chia 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 dòng lệnh SSH của siege-vm và nhấn tổ hợp phím CTRL+C để dừng siege đang chạy.
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 về cân bằng tải dịch vụ
Giờ đây, 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 cân bằng tải nâng cao. Trong ví dụ này, chúng ta chỉ cần tạo một chính sách để thực thi tính năng tự động tiêu hao dung lượng. Tuy nhiên, bạn có thể thử các tính năng khác.
Trong 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 chính sách đã được tạo thành công bằng lệnh gcloud sau:
Trong Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Đầu ra
NAME http-policy
Đính kèm Chính sách cân bằng tải dịch vụ vào dịch vụ phụ trợ
Bây giờ, 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.
Của 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 phần phụ trợ
Hiện tại, chính sách lb 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 phần dọn dẹp. Tuy nhiên, trong lớp học lập trình này, chúng tôi 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 hoạt động của chính sách mới.
Tính năng tự động rút cạn dung lượng sẽ tự động xoá một MIG phụ trợ khỏi bộ cân bằng tải khi tổng số phụ trợ đang hoạt độ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ẽ kết nối SSH vào các máy ảo trong us-east1-b-mig và đặt trạng thái không ổn định cho các máy ảo đó. Với ngưỡng 25%, bạn sẽ cần kết nối SSH vào 4 trong số các 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à kết nối với máy ảo đó bằng SSH bằng cách nhấp vào SSH để khởi chạy một thiết bị đầu cuối 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 dung lượng sẽ được kích hoạt và us-east1-b-mig sẽ không nhận được yêu cầu mới.
9. Xác minh rằng tính năng Tự động thoát nước thải đang hoạt động
Khởi động lại Cuộc vây hãm
Để xác minh tính năng mới, chúng ta sẽ sử dụng lại máy ảo siege. Hãy SSH vào máy ảo mà bạn đã tạo ở bước trước. Sau khi tạo xong, hãy nhấp vào SSH để chạy cửa sổ dòng lệnh 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.
Trong 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ẽ thấy rằng tất cả các yêu cầu đều được gửi đến us-east1-a-mig.
Dừng cuộc vây hãm
Bây giờ, bạn đã chứng minh được tính năng chia tách lưu lượng truy cập nâng cao đang hoạt động, đã đến lúc bạn dừng vòng vây. Để thực hiện việc này, hãy quay lại dòng lệnh SSH của siege-vm và nhấn tổ hợp phím CTRL+C để dừng siege đang chạy.
10. Các bước dọn dẹp
Giờ đây, chúng ta đã hoàn tất môi trường thử nghiệm, đã đến lúc gỡ bỏ môi trường đó. Vui lòng chạy các lệnh sau để xoá môi trường thử nghiệm.
Trong 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ợ bằng tính năng tự động tiêu hao 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.