OK, tôi chưa bao giờ tự mình xây dựng giải pháp cân bằng tải AWS với lưu lượng trên các cấp độ của SmugMug, nhưng chỉ nghĩ về lý thuyết và dịch vụ của AWS, một vài ý tưởng nảy ra trong đầu.
Câu hỏi ban đầu thiếu một vài điều có xu hướng ảnh hưởng đến thiết kế cân bằng tải:
- Phiên dính hay không? Tốt nhất là không sử dụng phiên dính và chỉ để tất cả các bộ cân bằng tải (LB) sử dụng vòng tròn (RR) hoặc lựa chọn phụ trợ ngẫu nhiên. RR hoặc các lựa chọn phụ trợ ngẫu nhiên là đơn giản, có thể mở rộng và cung cấp phân phối tải đều trong mọi trường hợp.
- SSL hay không? Cho dù SSL có được sử dụng hay không, và bao nhiêu phần trăm yêu cầu, thường có tác động đến thiết kế cân bằng tải. Thông thường nên chấm dứt SSL càng sớm càng tốt, để đơn giản hóa việc xử lý chứng chỉ và giữ cho CPU SSL tải khỏi máy chủ ứng dụng web.
Tôi đang trả lời từ góc độ làm thế nào để giữ cho lớp cân bằng tải có sẵn cao. Giữ các máy chủ ứng dụng HA chỉ được thực hiện với các kiểm tra sức khỏe được tích hợp trong bộ cân bằng tải L7 của bạn.
OK, một vài ý tưởng nên hoạt động:
1) "Cách AWS":
- Lớp đầu tiên, ở phía trước, sử dụng ELB ở chế độ L4 (TCP / IP).
- Lớp thứ hai, sử dụng các thể hiện EC2 với bộ cân bằng tải L7 của bạn (nginx, HAProxy, Apache, v.v.).
Lợi ích / ý tưởng: Bộ cân bằng tải L7 có thể khá đơn giản EC2 AMI, tất cả được nhân bản từ cùng một AMI và sử dụng cùng một cấu hình. Do đó, các công cụ của Amazon có thể xử lý tất cả các nhu cầu HA: ELB giám sát các bộ cân bằng tải L7. Nếu L7 LB chết hoặc không phản hồi, ELB & Cloudwatch sẽ tự động sinh ra một thể hiện mới và đưa nó vào nhóm ELB.
2) "Vòng tròn DNS với cách theo dõi:"
- Sử dụng robin vòng DNS cơ bản để có được phân phối tải trọng thô trên một vài địa chỉ IP. Giả sử bạn xuất bản 3 địa chỉ IP cho trang web của bạn.
- Mỗi trong số 3 IP này là một Địa chỉ IP đàn hồi AWS (EIA), được liên kết với một thể hiện EC2, với bộ cân bằng tải L7 mà bạn chọn.
- Nếu EC2 L7 LB chết, tác nhân người dùng (trình duyệt) tuân thủ chỉ nên sử dụng một trong các IP khác thay thế.
- Thiết lập một máy chủ giám sát bên ngoài. Giám sát từng 3 EIP. Nếu một người không phản hồi, hãy sử dụng các công cụ dòng lệnh của AWS và một số tập lệnh để chuyển EIP sang phiên bản EC2 khác.
Lợi ích / ý tưởng: Các tác nhân người dùng tuân thủ sẽ tự động chuyển sang địa chỉ IP khác nếu một địa chỉ không phản hồi. Do đó, trong trường hợp thất bại, chỉ có 1/3 người dùng của bạn sẽ bị ảnh hưởng và hầu hết những người này không nên chú ý bất cứ điều gì vì UA của họ âm thầm thất bại trước một IP khác. Và hộp giám sát bên ngoài của bạn sẽ nhận thấy rằng EIP không phản hồi và khắc phục tình trạng này trong vài phút.
3) DNS RR tới các cặp máy chủ HA:
Về cơ bản, đây là gợi ý riêng của Don về nhịp tim đơn giản giữa một cặp máy chủ, nhưng được đơn giản hóa cho nhiều địa chỉ IP.
- Sử dụng DNS RR, xuất bản một số địa chỉ IP cho dịch vụ. Theo ví dụ trên, giả sử bạn xuất bản 3 IP.
- Mỗi IP này đi đến một cặp máy chủ EC2, do đó tổng cộng có 6 trường hợp EC2.
- Mỗi cặp này sử dụng Heartbeat hoặc một giải pháp HA khác cùng với các công cụ AWS để giữ cho 1 địa chỉ IP tồn tại, trong cấu hình hoạt động / thụ động.
- Mỗi phiên bản EC2 có cài đặt cân bằng tải L7 của bạn.
Lợi ích / ý tưởng: Trong môi trường ảo hóa hoàn toàn của AWS, thực sự không dễ để lý giải về các dịch vụ L4 và chế độ chuyển đổi dự phòng. Bằng cách đơn giản hóa một cặp máy chủ giống hệt nhau chỉ giữ 1 địa chỉ IP, việc kiểm tra và kiểm tra trở nên đơn giản hơn.
Kết luận: Một lần nữa, tôi chưa thực sự thử bất kỳ thứ gì trong sản xuất. Chỉ từ cảm nhận của tôi, tùy chọn một với ELB ở chế độ L4 và các phiên bản EC2 tự quản lý vì L7 LB dường như phù hợp nhất với tinh thần của nền tảng AWS và là nơi Amazon có khả năng đầu tư và mở rộng sau này. Đây có lẽ sẽ là lựa chọn đầu tiên của tôi.