1. Auto Scaling Group (ASG) là gì?
Một Auto Scaling Group là một nhóm các máy ảo trên Amazon Web Services (AWS) được thiết lập để tự động mở rộng và thu hẹp để đáp ứng với tải trên trang web hoặc ứng dụng.
Khi trang web hoặc ứng dụng của bạn đang hoạt động, số lượng người dùng truy cập hoặc yêu cầu dữ liệu từ trang web/ứng dụng của bạn có thể thay đổi theo thời gian. Trong môi trường máy chủ vật lý truyền thống, để đáp ứng với tải lớn, bạn phải đầu tư vào thêm nhiều máy chủ và tăng cường hệ thống. Tuy nhiên, trong môi trường đám mây, bạn có thể tạo và xóa các máy chủ (servers) một cách nhanh chóng, tùy thuộc vào tải trên trang web hoặc ứng dụng của bạn. Vì vậy, bạn không cần phải đầu tư vào cơ sở hạ tầng lớn để đáp ứng với các đỉnh tải, điều này giúp tiết kiệm chi phí và tăng tính linh hoạt cho hệ thống của bạn.
Mục tiêu của một Auto Scaling Group (ASG) là:
- Mở rộng (thêm các EC2 instances) để phù hợp với lượng tải tăng lên
- Thu hẹp (xóa bỏ các EC2 instances) để phù hợp với lượng tải giảm đi
- Đảm bảo có một số lượng tối thiểu và tối đa các EC2 instances đang chạy
- Tự động đăng ký các máy ảo mới với cân bằng tải (load balancer)
- Tái tạo một EC2 instance nếu một instance trước đó bị xóa bỏ (ví dụ: nếu bị lỗi)
ASG là miễn phí, bạn chỉ phải trả chi phí cho các EC2 instances (máy ảo) mà ASG tạo ra hoặc xóa bỏ. Nói cách khác, bạn sẽ không bị tính thêm bất kỳ chi phí nào để sử dụng ASG. Tuy nhiên, bạn vẫn phải trả phí cho các máy ảo (EC2 instances) được tạo ra hoặc xóa bỏ bởi ASG, vì đó là tài nguyên thực tế mà bạn sử dụng trên AWS.
2. Auto Scaling Group (ASG) hoạt động như thế nào?
Auto Scaling Group (ASG) hoạt động bằng cách giám sát lượng tải của ứng dụng hoặc trang web và tự động điều chỉnh số lượng các EC2 instances (máy ảo) để đáp ứng nhu cầu của tải. Nói cách khác, ASG có thể tự động mở rộng (thêm các EC2 instances) để đáp ứng với tải lớn hơn và thu hẹp (xóa bỏ các EC2 instances) để giảm bớt chi phí và đáp ứng với tải ít hơn.
Để hoạt động, ASG sử dụng các thành phần sau:
- Amazon CloudWatch: giám sát các chỉ số liên quan đến tải, chẳng hạn như lưu lượng mạng, CPU, tài nguyên bộ nhớ, để xác định lượng tải hiện tại trên hệ thống.
- Launch Configuration: chứa thông tin cấu hình cho EC2 instances, bao gồm AMI, loại máy ảo, kích thước và thiết lập môi trường ứng dụng.
- Scaling policies: quy định các hành động cần thực hiện khi tải thay đổi. Scaling policies có thể dựa trên các ngưỡng tải cụ thể hoặc được tính toán dựa trên các công thức toán học.
- Load balancer: cân bằng tải giữa các EC2 instances và định tuyến các yêu cầu của khách hàng đến các instances tương ứng.
Khi lượng tải thay đổi, ASG sẽ tạo hoặc xóa các EC2 instances và đăng ký chúng với load balancer để đảm bảo rằng các yêu cầu của khách hàng được phân phối đều và hệ thống vẫn ổn định.
Ví dụ: Bạn sở hữu một trang web bán hàng trực tuyến. Trong ngày Black Friday, lượng khách truy cập trang web của bạn tăng đột ngột, gây ra tải nặng cho hệ thống và làm cho trang web chậm hoặc bị treo. Để giải quyết vấn đề này, bạn sử dụng Auto Scaling Group (ASG) để tự động thêm nhiều máy ảo (EC2 instances) vào hệ thống và xóa bớt các instances khi lượng khách truy cập giảm sau ngày Black Friday. ASG giúp hệ thống của bạn tự động thích ứng với lượng khách truy cập thay đổi và đảm bảo rằng trang web của bạn luôn đáp ứng được yêu cầu của khách hàng một cách nhanh chóng và hiệu quả.
3. Auto Scaling Group với Load Balancer hoạt động như thế nào?
Auto Scaling Group (ASG) in AWS with Load Balancer hoạt động bằng cách sử dụng Load Balancer (LB) để phân phối tải và đăng ký các EC2 instances mới được tạo bởi ASG.
Khi sử dụng ASG với LB, các bước hoạt động như sau:
- Tạo một ASG với cấu hình và khả năng chịu tải mong muốn, bao gồm thông tin về tài nguyên EC2 instance, AMI, loại máy ảo và Launch Configuration.
- Tạo một LB và cấu hình các điều kiện cân bằng tải để phân phối các yêu cầu của khách hàng đến các EC2 instances.
- Cấu hình ASG để đăng ký các EC2 instances mới được tạo với LB, để các yêu cầu của khách hàng được phân phối đến các instances mới.
- Sử dụng Amazon CloudWatch để giám sát tải trên hệ thống, xác định lượng tải hiện tại và tự động thay đổi số lượng các EC2 instances trong ASG dựa trên các chính sách tự động scale-up hoặc scale-down.
- ASG sẽ tạo hoặc xóa các EC2 instances và đăng ký chúng với LB để đảm bảo rằng các yêu cầu của khách hàng được phân phối đều và hệ thống vẫn ổn định.
Khi sử dụng ASG với LB, trang web của bạn sẽ có khả năng chịu tải tốt hơn và có khả năng tự động mở rộng hoặc thu hẹp hệ thống tùy thuộc vào lượng truy cập trang web của bạn. Bằng cách sử dụng ASG và LB, bạn có thể tăng cường tính sẵn sàng và độ tin cậy của ứng dụng hoặc trang web của mình.
4. Các cấu hình cần khai báo trong Auto Scaling Group (ASG).
Đây là các cấu hình cơ bản khi tạo một Launch Template trong AWS để sử dụng với Auto Scaling Group (ASG):
- AMI (Amazon Machine Image) + Instance Type: AMI là một bản snapshot của một EC2 instance và được sử dụng để tạo các EC2 instance mới. Instance Type là loại máy ảo của EC2 instance. Khi tạo Launch Template, bạn cần chỉ định AMI và Instance Type để ASG có thể sử dụng chúng để tạo các EC2 instances mới.
- EC2 User Data: Là dữ liệu được truyền vào EC2 instance để cấu hình và cài đặt các ứng dụng. Khi tạo Launch Template, bạn có thể cung cấp dữ liệu này để tạo ra các EC2 instances có sẵn một số ứng dụng.
- EBS Volumes: Là các ổ đĩa được gắn vào EC2 instance để lưu trữ dữ liệu. Khi tạo Launch Template, bạn có thể cung cấp thông tin về các EBS Volumes để ASG có thể sử dụng chúng để tạo các EC2 instances mới.
- Security Groups: Là một tập hợp các luật bảo mật được áp dụng cho EC2 instances để kiểm soát việc truy cập đến các tài nguyên trên máy chủ. Khi tạo Launch Template, bạn có thể chỉ định Security Groups để ASG có thể áp dụng chúng cho các EC2 instances mới được tạo.
- SSH Key Pair: Là cặp khóa bảo mật được sử dụng để đăng nhập vào EC2 instances. Khi tạo Launch Template, bạn có thể chỉ định một SSH Key Pair để sử dụng cho các EC2 instances mới được tạo.
- IAM Roles for your EC2 Instances: Là các vai trò được liên kết với EC2 instances để cho phép các instances truy cập vào các dịch vụ khác của AWS. Khi tạo Launch Template, bạn có thể chỉ định IAM Roles để sử dụng cho các EC2 instances mới được tạo.
- Network + Subnets Information: Là thông tin về mạng và các subnet được sử dụng bởi các EC2 instances. Khi tạo Launch Template, bạn cần chỉ định mạng và subnet để ASG có thể tạo các EC2 instances trong đúng mạng và subnet.
- Load Balancer Information: Là thông tin về Load Balancer được sử dụng bởi các EC2 instances. Khi tạo Launch Template, bạn có thể cung cấp thông tin về Load Balancer để các EC2 instances được đăng ký với Load Balancer.
- Min Size / Max Size / Initial Capacity: Là số lượng EC2 instances tối thiểu, tối đa và khởi đầu cần thiết cho ASG.
- Scaling Policies là các quy tắc quản lý hành vi tự động điều chỉnh quy mô của một Auto Scaling Group. Những quy tắc này xác định khi nào và cách thức để Auto Scaling Group sẽ tự động tăng hoặc giảm quy mô của các EC2 instances. Ví dụ, scaling policy có thể được thiết lập để tăng quy mô khi tải CPU trung bình của tất cả các EC2 instances vượt quá một ngưỡng nhất định hoặc giảm quy mô khi tải CPU thấp hơn một ngưỡng nhất định trong một khoảng thời gian nhất định.
5. Auto Scaling – Cloud Watch Alarms và Scaling.
Tự động điều chỉnh quy mô (Auto Scaling) của một Auto Scaling Group (ASG) dựa trên các cảnh báo CloudWatch là hoàn toàn khả thi. Một cảnh báo theo dõi một số lượng đo lường (như CPU trung bình hoặc một số lượng đo tùy chỉnh) của tất cả các EC2 instances trong một ASG. Dựa trên cảnh báo này, ta có thể tạo ra các chính sách tăng hoặc giảm quy mô của các EC2 instances trong ASG.
Ví dụ, nếu một cảnh báo theo dõi CPU trung bình của tất cả các instances trong ASG vượt quá ngưỡng nào đó trong một khoảng thời gian, ta có thể tạo ra một chính sách tăng quy mô để tăng số lượng instances, và ngược lại, nếu CPU trung bình thấp hơn một ngưỡng khác, ta có thể tạo ra một chính sách giảm quy mô để giảm số lượng instances.
6. Thực hành.
Step 1: Choose launch template or configuration.
Tại phần Create Auto Scaling group hãy bấm vào Create Auto Scaling group.
Đặt tên cho Auto Scaling group name tại Auto Scaling group name.
Do mình chưa có template nào nên mình sẽ bấm Create a launch template để tạo template mới.
Hãy đặt tên template name và description cho nó.
Tới đây cho phép bạn chọn 1 AMI.
Tới đây bạn chọn 1 phiên bản EC2 Instance, mình sẽ chọn gói miễn phí Free tier eligible.
Ở phần Network settings do tính năng chúng ta đang thử nghiệm không cần dùng subnet nên có thể bỏ trống, tại phần Security groups hãy chọn 1 Security groups mà bạn sẵn có.
Tại phần Configure storage hãy config volume cho EC2.
Phần Resource tags mình bỏ qua. Tại phần Advanced details mình sẽ bấm vào nó để cài đặt 1 số thành phần nâng cao.
Kéo xuống dưới bạn sẽ gặp config user data, copy đoạn shell dưới và bỏ vào đó.
#!/bin/bash
# Use this for your user data (script from top to bottom)
# install http (Linux 2 version)
yum update -y
yum install -y httpd A
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $ (hostname -f)</h1>" > /var/www/html/index.html
Sau khi paste đoạn shell thì chúng ta sẽ có nội dung như dưới.
Phần này sẽ tóm tắt lại những gì bạn đã thiết lập, nếu không có gì thay đổi hãy bấm vào Create launch template.
Giờ hãy quay lại phần Advanced details, bấm làm mới lại bạn sẽ thấy template vừa được tạo xuất hiện, hãy chọn nó và thực hiện tiếp các bước phía sau.
Chỗ này sẽ cho bạn review lại các thiết lập, nếu không có gì thay đổi bạn hãy bấm Next để tiếp tục.
Step 2: Choose instance launch options.
AWS sẽ đưa bạn đến Step 2 (Choose instance launch options). Tại đây bạn chọn VPC, AZ và Subnet mà bạn muốn gắn cho các Instance.
Tại đây bạn có thể lựa chọn thay đổi loại Instance bằng cách bấm vào Override launch template, nếu bạn muốn giữ Instance type là t2.micro thì bạn có thể bấm Next để tiếp tục.
Bạn có thể lựa chọn 1 Instance Type có sẵn khác.
Hoặc có thể custom 1 resource tuỳ ý.
Step 3: Configure advanced options.
Do mình không muốn thay đổi gì nên mình sẽ bấm Next, AWS sẽ đưa bạn đến Step 3 (Configure advanced options). Tại đây có 3 tuỳ chọn nhưng do mình đã có sẵn 1 bộ LB nên mình sẽ chọn Attach to an existing loadbalancer.
Và mình sẽ chọn target group của Application Load Balancer tên là DemoALB.
Kéo xuống, chúng ta có 2 loại Health checks đó là EC2 và ELB.
EC2 Auto Scaling cung cấp khả năng kiểm tra sức khỏe của các instances một cách tự động. Nếu một instance không vượt qua được kiểm tra sức khỏe, EC2 Auto Scaling sẽ tự động thay thế nó bằng một instance khác. Nếu bạn đã kết nối đến một load balancer, bạn có thể sử dụng cả kiểm tra sức khỏe của ELB và EC2 để quản lý việc thay thế các instances. ELB kiểm tra sức khỏe của các instances theo cách riêng, phụ thuộc vào loại kiểm tra mà bạn chọn. Ví dụ, nếu bạn chọn kiểm tra sức khỏe HTTP, ELB sẽ kiểm tra xem trang web hoạt động chính xác hay không. Nếu kiểm tra thất bại, EC2 Auto Scaling sẽ thay thế instance đó bằng một instance khác để đảm bảo rằng hệ thống của bạn luôn có đủ instances lành mạnh để phục vụ yêu cầu.
Kéo xuống tiếp chúng ta sẽ có 1 số thành phần bổ sung, nhưng mình sẽ bỏ qua nó. Bấm Next để tiếp tục.
Step 4: Configure group size and scaling policies
Khi tạo một Auto Scaling group, bạn cần xác định số lượng EC2 instances mà bạn muốn cung cấp cho ứng dụng của mình bằng cách thiết lập giá trị “desired capacity”. Nếu như bạn muốn tăng hoặc giảm số lượng instances trong Auto Scaling group, bạn có thể thay đổi giá trị “desired capacity” của nó.
Ngoài ra, bạn có thể thiết lập giá trị tối thiểu và tối đa cho số lượng instances có thể có trong Auto Scaling group bằng cách sử dụng các thuộc tính “minimum capacity” và “maximum capacity”. Tuy nhiên, “desired capacity” phải nằm trong khoảng giới hạn giữa “minimum capacity” và “maximum capacity”. Khi tăng hoặc giảm số lượng instances, Auto Scaling group sẽ đảm bảo giá trị “desired capacity” không vượt quá giới hạn tối đa hoặc thấp hơn giới hạn tối thiểu.
Scaling policies – optional chúng ta sẽ xem xét sau này.
Phần Add notifications mình sẽ không thêm thông báo nào nên mình sẽ bấm Next để bỏ qua.
6. Add tags.
Tại phần Add tags mình cũng bấm Next để bỏ qua.
Step 7: Review.
Phần này sẽ cho bạn review lại các cấu hình, nếu không còn thay đổi, hãy bấm Create Auto Scaling group.
Một phiển bản Auto Scaling groups đã được tạo.
Tại phần Details sẽ cho thấy chi tiết về Auto Scaling groups vừa tạo xong.
Qua tab Activity kéo xuống phần Activity history bạn sẽ thấy có 1 thông báo đã khởi chạy 1 phiên bản EC2 mới ngay tại đây.
Qua tab quản lý phiên bản Instance management bạn sẽ thấy 1 EC2 Instance đã được tạo bởi ASG.
Nếu bạn qua phần Instances bạn sẽ thấy có 1 Instances đang được ASG khởi tạo.
Vào Target groups và chuyển qua tab Targets, kéo xuống dưới phần Registered targets.
Hoặc bạn có thể bấm vào my-first-target-group để vào trang dưới đây và bạn để ý tại Registered targets của Targets instance id “i-Oef3e8f549fcbeb40” đang có status là unhealthy
Hãy chờ đợi 1 lát, trạng thái của bạn sẽ chuyển sang healthy.
Và khi truy cập vào domain của bạn, bạn sẽ có kết quả như dưới.
Bây giờ chúng ta quay lại tab Details và bấm vào Edit để chỉnh sửa 1 số thông số.
Mình sẽ chỉnh sửa 2 thông số Desired capacity và Maximum capacity với giá trị từ 1 qua 2.
Quay lại phần Activity history bấm reload lại bạn sẽ nhận được 1 hành động mới.
Và khi quay lại Instance management, bạn thấy đã có 1 Instance mới sắp được khởi tạo.
Quay lại Registered targets, bạn sẽ thấy ở instance mới đang ở trạng thái healthy.
Vậy khi bạn F5 thì nội dung của web đã thay đổi, chứng tỏ bộ LB đã hoạt động tốt.
Đương nhiên quay lại Activity history bạn sẽ nhận được thông báo khởi tạo Instance thành công.