Trong AWS, ELB và Elastic Load Balancing tồn tại một khái niệm trong đó các máy chủ có thể được thêm hoặc phát hành theo nhu cầu của ứng dụng của chúng tôi và lưu lượng truy cập đến từ một ứng dụng được phân phối giữa nhiều mục tiêu. Các mục tiêu này có thể là các phiên bản EC2, vùng chứa và địa chỉ IP trong một hoặc nhiều Vùng khả dụng. Các loại AWS Elastic Load Balancer được hỗ trợ là Application Load Balancer (ALB), Network Load Balancer (NLB), Gateway Load Balancer (mới ra mắt gần đây) và Classic Load Balancer. Các bộ cân bằng tải này có các cấu hình khác nhau, ví dụ:
1. Application Load Balancer: Hoạt động bằng cách tự động phân phối lưu lượng truy cập ứng dụng đến giữa hai hoặc nhiều phiên bản EC2. Chúng ta có thể xác định các quy tắc định tuyến theo nội dung của yêu cầu (định tuyến dựa trên nội dung). Đây là bộ cân bằng tải lớp 7.
2. Bộ cân bằng tải mạng: NLB sử dụng dữ liệu giao thức IP (TCP và UDP) để định tuyến kết nối đến các tài nguyên AWS như EC2, dịch vụ siêu nhỏ và vùng chứa. Đây là bộ cân bằng tải lớp 4.
3. Bộ cân bằng tải cổng: Chúng được sử dụng với các thiết bị ảo của bên thứ ba như tường lửa NextGen (NGFW), IPS, IDS, v.v. chạy trên các phiên bản EC2. Nó hoạt động bằng cách đặt một cổng duy nhất cho lưu lượng truy cập từ nhiều thiết bị ảo và nhiều thiết bị ảo này có thể được mở rộng hoặc thu hẹp theo nhu cầu. Điều này tốt cho tính ổn định của mạng. Đây là bộ cân bằng tải lớp 3 (Cổng) cộng với lớp 4 (Cân bằng tải).
4. Bộ cân bằng tải cổ điển: CLB là bộ cân bằng tải cũ của AWS được sử dụng để cân bằng tải trên nhiều phiên bản EC2. Nó được khuyến nghị cho các ứng dụng được thiết kế trong mạng EC2-Classic. Đây là bộ cân bằng tải lớp 4/7. AWS khuyến nghị nên tránh bộ cân bằng tải này.
1. Hai Vùng khả dụng, mỗi vùng chứa ít nhất một phiên bản EC2.
2. Một VPC có tối thiểu một mạng con công khai trong mỗi một trong hai Vùng khả dụng ở trên. Mạng con công khai này sẽ được sử dụng để cấu hình bộ cân bằng tải.
3. Cài đặt máy chủ web trên mỗi phiên bản và cho phép truy cập cổng 80 trên các phiên bản này bằng cách sử dụng nhóm bảo mật.
Trên một máy chủ khác, chúng ta có thư mục ‘signup’ chứa tệp index.html có nội dung: “Người dùng mới? Đăng ký trước...”
Cả thư mục ‘signin’ và ‘signup’ đều nằm trong thư mục gốc(/var/www/html)
Bước 2. Trên trang mới, nhấp vào nút ‘Tạo nhóm mục tiêu’:
Bước 3. Bây giờ chúng ta đang ở trang ‘Chỉ định chi tiết nhóm’. Trong cấu hình cơ bản, hãy thực hiện như sau:
Bước 2. Trường hợp được chọn ở trên sẽ xuất hiện trong ‘Review targets’. Bây giờ hãy nhấp vào ‘Create target group’.
Bước 3. Trên cửa sổ tiếp theo, hãy nhấp lại vào ‘continue’. Bây giờ hãy lặp lại quy trình tương tự cho một nhóm Target khác và đặt tên là ‘Sign-Up’. Sử dụng một phiên bản khác (trong một vùng Khả dụng khác) với Nhóm mục tiêu này và sử dụng một đường dẫn Kiểm tra tình trạng khác (‘/signup’ trong trường hợp của chúng tôi):
Bước 2. Đặt tên phù hợp (ở đây là ‘My_Path_ALB’) cho bộ cân bằng tải của bạn. Giữ nguyên Scheme ở mặc định (‘Internet-facing’), Chọn loại địa chỉ IP là IPv4.
Bước 3. Trong phần Network mapping, chọn VPC mục tiêu và trong phần Mappings, chọn hai vùng Availability chứa các mục tiêu mà bộ cân bằng tải sẽ định tuyến lưu lượng đến.
Bước 4. Cấu hình Security Groups cho bộ cân bằng tải và cho phép cổng mục tiêu của bạn (trong trường hợp của chúng tôi là cổng 80) lắng nghe:
Bước 5. Chọn một trình lắng nghe (trong trường hợp của chúng tôi là HTTP) và nhập một cổng để lắng nghe hoặc chọn giữ nguyên cổng mặc định 80 cho các yêu cầu HTTP. Trong hành động Mặc định, chọn mục tiêu ‘Đăng nhập’ cho cột ‘chuyển tiếp đến’:
Bước 6. Có thể bỏ qua các bước tùy chọn. Bây giờ hãy xem lại phần tóm tắt và nhấn nút ‘Tạo bộ cân bằng tải’:
Bước 7. Bây giờ, hãy quay lại trang ‘Bộ cân bằng tải’ và tìm bộ cân bằng tải mục tiêu của bạn tại đây:
Bước 2. Nhấp vào ‘View/Edit rules’ trong cột ‘Rules’ rồi nhấp vào biểu tượng ‘+’ theo sau là ‘Insert Rule’:
Bước 3. Trong cột ‘IF(all match), nhấp vào mũi tên thả xuống ‘+ Add condition’ và chọn ‘Path’ làm loại Rule và đặt ‘/signin*’ vào trường văn bản tương ứng với nhãn ‘is’.
Bước 4. Từ cột ‘Then’, nhấp vào mũi tên thả xuống ‘+Add action’ và chọn ‘Forward to’ làm hành động. Tại đây, hãy chọn nhóm mục tiêu ‘Sign-In’.
Lặp lại các bước 2 và 3 ở trên cho nhóm mục tiêu ‘SignUp’ với đường dẫn là ‘/signup*’. Sau khi lưu các quy tắc, chúng ta sẽ có hai quy tắc:
1) Đường dẫn của Nhóm mục tiêu ‘Đăng ký’: '/signup'
2) Đường dẫn của Nhóm mục tiêu ‘Đăng nhập’: '/signin'
1. Application Load Balancer: Hoạt động bằng cách tự động phân phối lưu lượng truy cập ứng dụng đến giữa hai hoặc nhiều phiên bản EC2. Chúng ta có thể xác định các quy tắc định tuyến theo nội dung của yêu cầu (định tuyến dựa trên nội dung). Đây là bộ cân bằng tải lớp 7.
2. Bộ cân bằng tải mạng: NLB sử dụng dữ liệu giao thức IP (TCP và UDP) để định tuyến kết nối đến các tài nguyên AWS như EC2, dịch vụ siêu nhỏ và vùng chứa. Đây là bộ cân bằng tải lớp 4.
3. Bộ cân bằng tải cổng: Chúng được sử dụng với các thiết bị ảo của bên thứ ba như tường lửa NextGen (NGFW), IPS, IDS, v.v. chạy trên các phiên bản EC2. Nó hoạt động bằng cách đặt một cổng duy nhất cho lưu lượng truy cập từ nhiều thiết bị ảo và nhiều thiết bị ảo này có thể được mở rộng hoặc thu hẹp theo nhu cầu. Điều này tốt cho tính ổn định của mạng. Đây là bộ cân bằng tải lớp 3 (Cổng) cộng với lớp 4 (Cân bằng tải).
4. Bộ cân bằng tải cổ điển: CLB là bộ cân bằng tải cũ của AWS được sử dụng để cân bằng tải trên nhiều phiên bản EC2. Nó được khuyến nghị cho các ứng dụng được thiết kế trong mạng EC2-Classic. Đây là bộ cân bằng tải lớp 4/7. AWS khuyến nghị nên tránh bộ cân bằng tải này.
Tổng quan về Hướng dẫn này
Trong hướng dẫn này, chúng ta sẽ định cấu hình định tuyến dựa trên đường dẫn cho Bộ cân bằng tải ứng dụng trên AWS. Chúng ta sẽ sử dụng tài khoản người dùng IAM cho tác vụ này. Chúng ta có các tài nguyên sau cho thiết lập này:1. Hai Vùng khả dụng, mỗi vùng chứa ít nhất một phiên bản EC2.
2. Một VPC có tối thiểu một mạng con công khai trong mỗi một trong hai Vùng khả dụng ở trên. Mạng con công khai này sẽ được sử dụng để cấu hình bộ cân bằng tải.
3. Cài đặt máy chủ web trên mỗi phiên bản và cho phép truy cập cổng 80 trên các phiên bản này bằng cách sử dụng nhóm bảo mật.
Cấu hình phiên bản EC2
Đối với hướng dẫn này, chúng tôi đã cấu hình hai phiên bản Amazon Linux EC2 với máy chủ web Apache Httpd được cài đặt trên cả hai phiên bản. Trên một máy chủ, chúng ta có thư mục ‘signin’ chứa tệp index.html có nội dung: “Chào mừng người dùng? Đăng nhập để tiếp tục...”Trên một máy chủ khác, chúng ta có thư mục ‘signup’ chứa tệp index.html có nội dung: “Người dùng mới? Đăng ký trước...”
Cả thư mục ‘signin’ và ‘signup’ đều nằm trong thư mục gốc(/var/www/html)
Cấu hình nhóm mục tiêu
Bước 1. Để định tuyến yêu cầu, trước tiên chúng ta sẽ tạo hai nhóm mục tiêu, mỗi nhóm cho một máy chủ. Mở bảng điều khiển EC2 và trên bảng điều khiển bên trái, tìm và chọn ‘Nhóm mục tiêu’ (Nằm trong mục Cân bằng tải).Bước 2. Trên trang mới, nhấp vào nút ‘Tạo nhóm mục tiêu’:
Bước 3. Bây giờ chúng ta đang ở trang ‘Chỉ định chi tiết nhóm’. Trong cấu hình cơ bản, hãy thực hiện như sau:
- Chọn loại mục tiêu: Chọn ‘Instances’ tại đây.
- Target group name: Đặt tên phù hợp cho nhóm mục tiêu (‘Sign-In’ trong trường hợp của chúng tôi.)
- Protocol: HTTP
- Port: 80
- VPC: Chọn Tên VPC của bạn tại đây.
- Protocol version: Giữ nguyên mặc định đã chọn. (HTTP1)
- Health check protocol: HTTP
- Health check path: ‘Path you want use’ (‘/signin’ trong trường hợp của chúng tôi)
- Giữ nguyên ‘Advanced health check settings’ theo mặc định. Thêm thẻ nếu bạn cần (Tùy chọn). Nhấp vào ‘Next’ để tiếp tục.
Đăng ký EC2 Instances vào Target Groups
Bước 1. Bây giờ hãy thêm một trong các EC2 instance vào các nhóm mục tiêu ở trên. Chọn một instance rồi nhấp vào nút ‘Include as pending below’Bước 2. Trường hợp được chọn ở trên sẽ xuất hiện trong ‘Review targets’. Bây giờ hãy nhấp vào ‘Create target group’.
Bước 3. Trên cửa sổ tiếp theo, hãy nhấp lại vào ‘continue’. Bây giờ hãy lặp lại quy trình tương tự cho một nhóm Target khác và đặt tên là ‘Sign-Up’. Sử dụng một phiên bản khác (trong một vùng Khả dụng khác) với Nhóm mục tiêu này và sử dụng một đường dẫn Kiểm tra tình trạng khác (‘/signup’ trong trường hợp của chúng tôi):
Tạo Bộ cân bằng tải ứng dụng
Bước 1. Từ bảng điều khiển EC2, hãy đến Bộ cân bằng tải và nhấp vào nút Tạo Bộ cân bằng tải rồi chọn ‘Bộ cân bằng tải ứng dụng’ hiển thị trên trang mới:Bước 2. Đặt tên phù hợp (ở đây là ‘My_Path_ALB’) cho bộ cân bằng tải của bạn. Giữ nguyên Scheme ở mặc định (‘Internet-facing’), Chọn loại địa chỉ IP là IPv4.
Bước 3. Trong phần Network mapping, chọn VPC mục tiêu và trong phần Mappings, chọn hai vùng Availability chứa các mục tiêu mà bộ cân bằng tải sẽ định tuyến lưu lượng đến.
Bước 4. Cấu hình Security Groups cho bộ cân bằng tải và cho phép cổng mục tiêu của bạn (trong trường hợp của chúng tôi là cổng 80) lắng nghe:
Bước 5. Chọn một trình lắng nghe (trong trường hợp của chúng tôi là HTTP) và nhập một cổng để lắng nghe hoặc chọn giữ nguyên cổng mặc định 80 cho các yêu cầu HTTP. Trong hành động Mặc định, chọn mục tiêu ‘Đăng nhập’ cho cột ‘chuyển tiếp đến’:
Bước 6. Có thể bỏ qua các bước tùy chọn. Bây giờ hãy xem lại phần tóm tắt và nhấn nút ‘Tạo bộ cân bằng tải’:
Bước 7. Bây giờ, hãy quay lại trang ‘Bộ cân bằng tải’ và tìm bộ cân bằng tải mục tiêu của bạn tại đây:
Thêm Quy tắc chuyển tiếp dựa trên đường dẫn
Bước 1. Khi trạng thái ALB chuyển sang Hoạt động, chúng tôi sẽ tiến hành với Quy tắc chuyển tiếp. Nhấp vào tên Load Balancer rồi chuyển đến tab Listeners.Bước 2. Nhấp vào ‘View/Edit rules’ trong cột ‘Rules’ rồi nhấp vào biểu tượng ‘+’ theo sau là ‘Insert Rule’:
Bước 3. Trong cột ‘IF(all match), nhấp vào mũi tên thả xuống ‘+ Add condition’ và chọn ‘Path’ làm loại Rule và đặt ‘/signin*’ vào trường văn bản tương ứng với nhãn ‘is’.
Bước 4. Từ cột ‘Then’, nhấp vào mũi tên thả xuống ‘+Add action’ và chọn ‘Forward to’ làm hành động. Tại đây, hãy chọn nhóm mục tiêu ‘Sign-In’.
Lặp lại các bước 2 và 3 ở trên cho nhóm mục tiêu ‘SignUp’ với đường dẫn là ‘/signup*’. Sau khi lưu các quy tắc, chúng ta sẽ có hai quy tắc:
Xác minh Thiết lập…
Để kiểm tra xem mọi thứ có hoạt động như mong đợi không, hãy mở trình duyệt web và dán DNS của bộ cân bằng tải và thêm vào đó:1) Đường dẫn của Nhóm mục tiêu ‘Đăng ký’: '/signup'
2) Đường dẫn của Nhóm mục tiêu ‘Đăng nhập’: '/signin'