Làm cách nào để thiết lập kiểm tra sức khỏe ELB với nhiều ứng dụng đang chạy trên mỗi phiên bản EC2?


11

Tại AWS, chúng tôi muốn sử dụng ELB để tải các phiên bản EC2 cân bằng lưu trữ nhiều ứng dụng. Lý tưởng nhất là chúng tôi muốn kiểm tra sức khỏe cho ứng dụng.

Tuy nhiên, Cân bằng tải đàn hồi AWS hiện chỉ cho phép bạn ping một vị trí để kiểm tra sức khỏe.

Điều gì sẽ là cách tốt nhất để thực hiện kiểm tra sức khỏe với ELB có tính đến trạng thái của nhiều ứng dụng được triển khai trên mỗi phiên bản EC2?


4
Một cách sẽ là thực hiện kiểm tra sức khỏe của riêng bạn bằng cách tạo một tập lệnh trả về trạng thái dựa trên kiểm tra của cả hai ứng dụng.
Nathan C

1
ELB là một dịch vụ được quản lý. Tạo ELB khác cho ứng dụng thứ hai với kiểm tra sức khỏe của chính nó. Hầu hết chi phí là cho mỗi yêu cầu, do đó, chi phí của bạn sẽ gần như bằng nhau để vận hành 2 ELB.
Guy

Tôi nghĩ câu trả lời của @ NathanC là giải pháp tốt nhất; Tôi có trường hợp tương tự nếu một trong hai điều kiện thất bại, kiểm tra sức khỏe sẽ thất bại. Thêm một ELB khác sẽ cho phép bạn có một kiểm tra sức khỏe khác, nhưng AFAIK chỉ có thể sử dụng một ELB để định tuyến giao thông (hoặc không)
Tom Harrison Jr

@Guy thực sự, cho rằng số giờ ELB được tính bất kể yêu cầu nào, đó là ~ 20 USD một tháng (tùy theo khu vực), do đó, hầu hết chi phí chỉ cho mỗi yêu cầu nếu bạn đã phục vụ tốt hơn 2,5 TB dữ liệu mỗi tháng ( ở mức 0,008 đô la / GB)
Josip Rodin

Câu trả lời:


10

Đây là hai cách để giải quyết điều này;

Tùy chọn đầu tiên là thêm một kiểm tra sức khỏe khác trên máy chủ xác nhận tình trạng sức khỏe và trả lại HTTP 200 cho ELB nếu logic nói rằng bạn muốn giữ máy chủ trực tuyến. Logic tất nhiên là tùy thuộc vào bạn. Nhược điểm ở đây là nếu ứng dụng 2 được triển khai thành công trên một số máy chủ thì tất cả các máy chủ vẫn sẽ 'khỏe mạnh' và nhận được lưu lượng truy cập.

Một tùy chọn khác là sử dụng ELB bổ sung cho mỗi ứng dụng. Bạn có thể trỏ một số ELB đến cùng phiên bản EC2 phụ trợ và chi phí khá nhỏ để làm điều đó. Bằng cách đó, bạn có thể kiểm tra sức khỏe cho mỗi ứng dụng và thả các máy chủ có vấn đề ở cấp độ mỗi ứng dụng thay vì cách tiếp cận tất cả hoặc không có gì.

Chỉnh sửa: Xin lưu ý đây là câu trả lời cũ hơn và dành riêng cho ELB chứ không phải ALB. ALB hỗ trợ các mục tiêu riêng biệt trên một máy chủ.


7

Sử dụng một ELB cho mỗi ứng dụng là cách để đi đến đây.

Trước tiên, bạn có thể cần chúng bằng mọi cách nếu mỗi ứng dụng nằm trên miền riêng của nó và bạn cần hỗ trợ SSL. Các ELB của Amazon hiện chỉ cho phép một chứng chỉ SSL cho mỗi tên miền, yêu cầu ELB riêng cho từng miền hỗ trợ SSL. (Chứng chỉ SSL Wildcard là một ngoại lệ).

Thách thức ở đây là kiểm tra sức khỏe ELB hiện không thể được chuyển đến một miền ảo cụ thể được lưu trữ trên một phiên bản EC2. (Không có tiêu đề "Máy chủ:" được gửi). Các lệnh sức khỏe ELB luôn đi đến miền mặc định, như thể bạn đã tải địa chỉ IP cho phiên bản EC2 trong trình duyệt của bạn. Vì vậy, một số keo được yêu cầu để nhận các kiểm tra sức khỏe trên miền mặc định và sau đó trả lời với trạng thái sức khỏe của một ứng dụng cụ thể.

Đây là một cấu hình ví dụ hoạt động có thể được thêm vào một lệnh Nginx server. Nó sẽ được cài đặt trên mỗi phiên bản EC2 đang được cân bằng tải.

    # This goes in the `server` block noted by 'default_server', often /etc/nginx/sites-enabled/default

    # All AWS Health Checks from the ELBs arrive at the default server.
    # Forward these requests on the appropriate configuration on this host.
    location /health-check/ {
      rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
      # Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
      #  which would not be considered successful.
      proxy_set_header X-Forwarded-Proto 'https';
      proxy_set_header "Host" $domain;
      proxy_pass http://127.0.0.1;
    }

Trong cài đặt "Kiểm tra sức khỏe" của ELB cho "first-application.com", bạn sẽ chọn "HTTP" và Cổng 80 và nhập một đường dẫn như:

/health-check/first-application.com

Với cấu hình Nginx ở trên đang chạy trên máy chủ, yêu cầu sẽ được nhận trên miền mặc định và ủy quyền phản hồi từ cấu hình Nginx trên cùng một máy chủ cho https://first-application.com/api/v1/status

Với phương pháp này, không có cấu hình cho mỗi ứng dụng trong Nginx. Miễn là mỗi ứng dụng có một tên miền duy nhất, bạn chỉ cần đảm bảo rằng bạn đã thiết lập ELB cho mỗi ứng dụng một cách thích hợp.


3
cảm ơn bạn. Điều này dường như để làm các mẹo mặc dù. Tôi đã hy vọng tránh việc cần phải có nhiều cân bằng tải với điều này.
tourdownunder

6

Vào ngày 11 tháng 8 năm 2016, Amazon đã giới thiệu Bộ cân bằng tải ứng dụng . Những thứ này cho phép bạn chỉ định nhiều Nhóm mục tiêu, mỗi nhóm có loại kiểm tra sức khỏe riêng. Vì vậy, điều này bây giờ có thể sử dụng một bộ cân bằng tải duy nhất!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.