1. Giới thiệu
Bạn có thể định cấu hình một trình cân bằng tải mạng để phân phối lưu lượng truy cập trên các phiên bản phụ trợ của trình cân bằng tải dựa trên trọng số do một quy trình kiểm tra tình trạng HTTP báo cáo bằng cách sử dụng tính năng cân bằng tải theo trọng số.
Tính năng cân bằng tải có trọng số yêu cầu bạn định cấu hình cả hai mục sau:
- Bạn phải đặt chính sách cân bằng tải cục bộ (localityLbPolicy) của dịch vụ phụ trợ thành WEIGHTED_MAGLEV.
- Bạn phải định cấu hình dịch vụ phụ trợ bằng một chế độ kiểm tra tình trạng HTTP/HTTP2/HTTPS. Phản hồi kiểm tra tình trạng HTTP phải chứa một trường tiêu đề phản hồi HTTP tuỳ chỉnh X-Load-Balancing-Endpoint-Weight để chỉ định trọng số bằng các giá trị nguyên từ 0 đến 1000 ở dạng thập phân cho từng phiên bản phụ trợ.
Nếu bạn sử dụng cùng một nhóm thực thể làm hệ thống phụ trợ cho nhiều trình cân bằng tải mạng dựa trên dịch vụ phụ trợ bằng cách sử dụng tính năng cân bằng tải theo trọng số, thì bạn nên sử dụng một đường dẫn yêu cầu duy nhất cho mỗi quy trình kiểm tra tình trạng của dịch vụ phụ trợ. Để biết thêm thông tin, hãy xem phần Tiêu chí thành công cho các chế độ kiểm tra tình trạng của HTTP, HTTPS và HTTP/2.
Hoạt động kiểm tra tình trạng HTTP phải trả về phản hồi HTTP 200 (OK) để các hoạt động kiểm tra tình trạng hoạt động và phiên bản phụ trợ được coi là hoạt động bình thường. Trong trường hợp tất cả các phiên bản phụ trợ đều vượt qua quy trình kiểm tra tình trạng và trả về X-Load-Balancing-Endpoint-Weight với trọng số bằng 0, bộ cân bằng tải sẽ phân phối các kết nối mới giữa các phụ trợ hoạt động bình thường, coi chúng có trọng số bằng nhau. Trình cân bằng tải cũng có thể phân phối các kết nối mới giữa các máy chủ phụ không hoạt động. Để biết thêm thông tin, hãy xem bài viết Phân phối lưu lượng truy cập.
Để xem ví dụ về tính năng cân bằng tải có trọng số, hãy xem phần Lựa chọn phụ trợ và theo dõi kết nối.
Bạn có thể sử dụng tính năng cân bằng tải theo trọng số trong các trường hợp sau:
- Nếu một số kết nối xử lý nhiều dữ liệu hơn các kết nối khác hoặc một số kết nối tồn tại lâu hơn các kết nối khác, thì việc phân phối tải phụ trợ có thể không đồng đều. Bằng cách báo hiệu trọng số thấp hơn cho mỗi phiên bản, một phiên bản có tải cao có thể giảm số lượng kết nối mới, trong khi vẫn tiếp tục phục vụ các kết nối hiện có.
- Nếu một phần phụ trợ bị quá tải và việc chỉ định thêm các kết nối có thể làm gián đoạn các kết nối hiện có, thì phần phụ trợ đó sẽ tự chỉ định trọng số bằng 0. Bằng cách báo hiệu trọng số bằng 0, một phiên bản phụ trợ sẽ ngừng phục vụ các kết nối mới, nhưng vẫn tiếp tục phục vụ các kết nối hiện có.
- Nếu một phần phụ trợ đang ngắt kết nối hiện có trước khi bảo trì, thì phần phụ trợ đó sẽ tự gán trọng số bằng 0. Bằng cách báo hiệu trọng số bằng 0, phiên bản phụ trợ sẽ ngừng phục vụ các kết nối mới, nhưng vẫn tiếp tục phục vụ các kết nối hiện có.
Kiến thức bạn sẽ học được
- Cách định cấu hình trình cân bằng tải mạng để phân phối lưu lượng truy cập trên các phiên bản phụ trợ của trình cân bằng tải dựa trên trọng số do chế độ kiểm tra tình trạng HTTP báo cáo bằng cách sử dụng tính năng cân bằng tải theo trọng số.
Thiết lập môi trường theo tốc độ của riêng bạn
- Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị cho những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
- Mã dự án là giá trị duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là
PROJECT_ID
). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên miền của riêng mình để xem tên miền đó có sẵn hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ giữ nguyên trong suốt thời gian diễn ra dự án. - Để bạn biết, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
- Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh phát sinh phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá toàn bộ dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.
Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:
Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:
Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.
2. Bắt đầu định cấu hình
Lớp học lập trình yêu cầu một dự án duy nhất.
Trong hướng dẫn này, bạn sẽ tạo một nhóm thực thể có 3 thực thể máy ảo và chỉ định trọng số cho từng thực thể. Bạn tạo một quy trình kiểm tra tình trạng HTTP để báo cáo trọng số của phiên bản phụ trợ. Trình cân bằng tải mạng có trọng số được bật trên dịch vụ phụ trợ với chính sách trình cân bằng tải theo vị trí là WEIGHTED_MAGLEV.
Trước khi bắt đầu
- Đọc bài viết Tổng quan về tính năng Cân bằng tải mạng bên ngoài dựa trên dịch vụ phụ trợ.
- Cài đặt Google Cloud CLI. Để biết thông tin tổng quan đầy đủ về công cụ này, hãy xem bài viết Tổng quan về giao diện dòng lệnh gcloud. Bạn có thể tìm thấy các lệnh liên quan đến việc cân bằng tải trong API và tài liệu tham khảo về giao diện dòng lệnh gcloud. Nếu trước đây bạn chưa chạy Google Cloud CLI, hãy chạy gcloud init trước để xác thực.
- Bật API điện toán.
gcloud services enable compute.googleapis.com
Lưu ý: Bạn không thể sử dụng bảng điều khiển Google Cloud để định cấu hình chính sách bộ cân bằng tải theo vị trí và chỉ định trọng số cho các phiên bản máy ảo. Thay vào đó, hãy sử dụng Google Cloud CLI.
Tạo mạng VPC, mạng con và quy tắc tường lửa
Tạo một mạng VPC, mạng con và các quy tắc tường lửa cho phép lưu lượng vào để cho phép các kết nối đến các VM phụ trợ của trình cân bằng tải.
- Tạo một mạng VPC và mạng con. a. Để tạo mạng VPC, hãy chạy lệnh
gcloud compute networks create
:
gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. Trong ví dụ này, dải địa chỉ IPv4 chính của mạng con là 10.10.0.0/24
.
Để tạo mạng con, hãy chạy lệnh gcloud compute networks subnets create
:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
Thay thế nội dung sau:
NETWORK_NAME
: tên của mạng VPC cần tạo.SUBNET_NAME
: tên của mạng con cần tạo.
- Tạo một quy tắc tường lửa cho phép lưu lượng vào để cho phép các gói được gửi đến cổng TCP đích 80 và 443 được chuyển đến các VM phụ trợ. Trong ví dụ này, quy tắc tường lửa cho phép kết nối từ mọi địa chỉ IP nguồn. Quy tắc tường lửa áp dụng cho các máy ảo có thẻ mạng
network-lb-tag
. Để tạo quy tắc tường lửa, hãy chạy lệnhgcloud 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
Thay thế FIREWALL_RULE_NAME
bằng tên của quy tắc tường lửa cần tạo.
Tạo phiên bản máy ảo và chỉ định trọng số
Tạo 3 phiên bản máy ảo và chỉ định trọng số:
- Định cấu hình 3 phiên bản máy ảo phụ trợ để trả về trọng số trong tiêu đề X-Load-Balancing-Endpoint-Weight bằng các phản hồi HTTP. Trong hướng dẫn này, bạn sẽ định cấu hình một phiên bản phụ trợ để báo cáo trọng số bằng 0, phiên bản phụ trợ thứ hai để báo cáo trọng số bằng 100 và phiên bản phụ trợ thứ ba để báo cáo trọng số bằng 900. Để tạo các phiên bản, hãy chạy lệnh
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'
Tạo một nhóm phiên bản
Trong hướng dẫn này, bạn sẽ cung cấp hướng dẫn để tạo một nhóm phiên bản không được quản lý chứa cả 3 phiên bản VM(instance-0, instance-100, and instance-900
).
- Để tạo nhóm phiên bản, hãy chạy lệnh
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
Thay thế INSTANCE_GROUP
bằng tên của nhóm phiên bản cần tạo.
Tạo một quy trình kiểm tra tình trạng HTTP
Trong hướng dẫn này, bạn sẽ cung cấp hướng dẫn để tạo một quy trình kiểm tra tình trạng HTTP nhằm đọc phản hồi HTTP chứa trọng số của VM phụ trợ."
- Để tạo quy trình kiểm tra tình trạng HTTP, hãy chạy lệnh
gcloud compute health-checks create
:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Thay thế HTTP_HEALTH_CHECK_NAME
bằng tên của chế độ kiểm tra tình trạng HTTP cần tạo.
Tạo dịch vụ phụ trợ
Ví dụ sau đây cung cấp hướng dẫn tạo một dịch vụ phụ trợ bên ngoài theo khu vực được định cấu hình để sử dụng tính năng cân bằng tải theo trọng số.
- Tạo một dịch vụ phụ trợ bằng chế độ kiểm tra tình trạng HTTP và đặt chính sách cân bằng tải theo vị trí thành WEIGHTED_MAGLEV.
- Để tạo dịch vụ phụ trợ, hãy chạy lệnh
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
- Thay thế
BACKEND_SERVICE_NAME
bằng tên của dịch vụ phụ trợ cần tạo.
- Thêm nhóm phiên bản vào dịch vụ phụ trợ.
- Để thêm nhóm phiên bản, hãy chạy lệnh
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
- Dành riêng một địa chỉ IP bên ngoài theo khu vực cho trình cân bằng tải.
- Để đặt trước một hoặc nhiều địa chỉ IP, hãy chạy lệnh
gcloud compute addresses create
:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
Thay thế ADDRESS_NAME
bằng tên của địa chỉ IP cần tạo. Sử dụng lệnh compute addresses describe
để xem kết quả. Ghi lại địa chỉ IP bên ngoài tĩnh được đặt trước ("IP_ADDRESS'
").
gcloud compute addresses describe ADDRESS_NAME
- Tạo một quy tắc chuyển tiếp bằng địa chỉ IP bên ngoài theo khu vực được dành riêng "IP_ADDRESS". Kết nối quy tắc chuyển tiếp với dịch vụ phụ trợ.
- Để tạo quy tắc chuyển tiếp, hãy chạy lệnh
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
- Thay thế nội dung sau:
FORWARDING_RULE
: tên của quy tắc chuyển tiếp cần tạo.IP_ADDRESS:
địa chỉ IP cần chỉ định cho phiên bản. Sử dụng địa chỉ IP tĩnh bên ngoài đã đặt trước, chứ không phải tên địa chỉ.
Xác minh trọng số phụ trợ bằng API dịch vụ phụ trợ
Xác minh rằng trọng số phụ trợ được báo cáo đúng cách cho quy trình kiểm tra tình trạng HTTP.
- Để lấy trọng số phụ trợ (cùng với trạng thái sức khoẻ) từ một dịch vụ phụ trợ, hãy chạy lệnh
gcloud compute backend-services get-health
:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Kết quả đầu ra sẽ có dạng như sau:
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