Làm cách nào để tạm thời chuyển hướng lưu lượng truy cập từ Bộ cân bằng tải đàn hồi?


3

Tôi đang chạy một ứng dụng trên Elastic Beanstalk, bất cứ khi nào tôi cần triển khai một phiên bản mới, tôi cần phải:

  • triển khai phiên bản trên Elastic Beanstalk, mất một phút hoặc lâu hơn
  • vá cơ sở dữ liệu với bất kỳ bản vá SQL nào đi kèm với phiên bản mới, phải mất thêm vài giây

Trong thời gian đó, tôi muốn ELB dừng chuyển hướng lưu lượng truy cập đến các phiên bản EC2 và chỉ mang lại lưu lượng truy cập cho họ khi an toàn để làm điều đó (khi phiên bản phần mềm và cơ sở dữ liệu khớp).

Có thể tạm thời chuyển hướng lưu lượng của ELB ở nơi khác không? Ví dụ, thực hiện chuyển hướng HTTP đến nhóm S3 hoặc đọc từ nhóm này thay vì phiên bản EC2?

Tôi biết tôi có thể làm điều này với các thay đổi DNS, nhưng chúng sẽ mất thêm thời gian để truyền bá và ngay cả với chỉ số TTL thấp, tôi vẫn không thể đảm bảo rằng khách hàng sẽ tuân thủ đúng cách và đến đúng máy chủ ngay khi tôi thực hiện cập nhật.

Vì vậy, lý tưởng, DNS phải luôn luôn trỏ đến ELB và ELB sau đó sẽ chuyển lưu lượng truy cập trong thời gian thực sang một nơi khác chỉ trong thời gian nâng cấp.


Tại sao không thiết kế một trang bảo trì và đặt nó trên bất kỳ nếu máy chủ và trỏ ELB của bạn đến máy chủ đó cho đến khi bạn kết thúc triển khai.
Abhishek Anand Amralkar

Đây là một ý tưởng, nhưng vấn đề là, tôi thực sự không thể can thiệp vào Elastic Beanstalk quản lý các cá thể của tôi và ELB của tôi: Tôi nghĩ rằng nếu tôi loại bỏ tất cả các phiên bản được nâng cấp từ ELB, thì thùng chứa Bean Beanstalk sẽ phàn nàn? Sẽ cần phải kiểm tra điều này mặc dù.
Benjamin

Ngoài ra, những gì bạn có thể làm là dừng máy chủ web (apache, Nginx) trên tất cả các máy trừ bất kỳ máy nào, triển khai mã mới của bạn trên các máy mà bạn đã dừng, chúng tôi khởi động máy chủ web và bạn có thể làm theo cùng một bước trên máy chủ nơi chúng tôi chưa dừng apache hoặc nginx.
Abhishek Anand Amralkar

Câu trả lời:


3

AFAIK, không có cách nào để làm điều này theo cách này.

Tuy nhiên, tôi tìm thấy một giải pháp thay thế kiểm tra tất cả các hộp cho tôi.

Tôi đã cập nhật bộ điều khiển phía trước của ứng dụng để đọc biến môi trường APP_MAINTENANCEvà trả về 503 Service Unavailablephản hồi nếu biến này là TRUE.

Việc vá cơ sở dữ liệu được chạy qua container_commands và được tự động trong quá trình triển khai.

Bây giờ quy trình triển khai là như sau, sử dụng API Bean Beanalk :

  • Sử dụng UpdateEn Môi trường để đặt APP_MAINTENANCEthànhTRUE
  • Đợi cho đến khi môi trường sẵn sàng (sử dụng DescribeEnvirments )
  • Sử dụng UpdateEnvironmentđể triển khai phiên bản ứng dụng mới
  • Đợi đến khi môi trường sẵn sàng
  • Sử dụng UpdateEnvironmentđể đặt APP_MAINTENANCEthành FALSE.

Bằng cách này, tôi có thể chắc chắn rằng không có gì đang sử dụng cơ sở dữ liệu trong quá trình nâng cấp cơ sở dữ liệu. Trong khung thời gian này (khoảng 3 phút), ứng dụng không khả dụng và mọi yêu cầu đều được trả 503lời, điều này có thể chấp nhận được trong trường hợp sử dụng của tôi.

Bất kỳ khách hàng nào nhận được phản hồi này đều được mời thử lại sau vài phút, có thể là người thật (một tin nhắn thân thiện sẽ mời làm như vậy) hoặc người tiêu dùng API (HTTP cho rằng đây là lỗi tạm thời và khách hàng nên thử lại sau).


3

Bạn có thể sử dụng các url môi trường hoán đổi, được mô tả ở đây:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/USE-features.CNAMESwap.html

Tải phiên bản mới vào beanstalk thứ hai và trao đổi url hoặc triển khai một trang web bảo trì đến beanstalk thứ hai và trao đổi với nó - tất cả lưu lượng truy cập được chuyển hướng đến môi trường mới.


Tôi đã xem xét tùy chọn này, nhưng vì nó dựa trên DNS, các thay đổi không phải là tức thời và rất tiếc là không phù hợp với trường hợp sử dụng của tôi!
Benjamin

0

Bạn cũng có thể đặt nhóm bảo mật trên bộ cân bằng tải để chặn truy cập công cộng tạm thời. Không thanh lịch nhưng nó hoạt động.

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.