Cách tự động xóa nút chết khỏi cụm RabbitMQ


11

Tôi đang lên kế hoạch tạo cụm RabbitMQ bằng Ansible trên AWS VPC với bộ cân bằng tải nội bộ của Amazon làm giao diện để chỉ ra các kết nối với nó.

Bất kỳ đề xuất nào làm thế nào để loại bỏ một nút chết khỏi cụm RabbitMQ dựa trên quy tắc tự động hóa trong đó các nút có thể lên xuống hoặc nếu bạn đang sử dụng các thể hiện tại chỗ?

Khi một nút bị hỏng, RabbitMQ không tự động xóa nó khỏi danh sách sao chép, tôi có thể thấy Node not runningtrong giao diện người dùng quản lý.

Tôi đã quản lý để tham gia vào cụm sao một tỷ lệ tự động thông qua Ansible và userdata.

Sơ đồ cơ sở hạ tầng


@ Pierre.Vriens, tôi đổi thành 1 câu hỏi, cảm ơn.
Berlin

Merci! Bạn đã không phá hủy 4 (hoặc hơn) câu hỏi khác tôi hy vọng. Có thể giữ chúng như câu hỏi folowup, đến phần mở rộng chúng vẫn có liên quan?
Pierre.Vriens

Đúng, các câu hỏi vẫn có liên quan, nhưng câu hỏi này là quan trọng nhất. Tôi sẽ đăng một câu hỏi khác sau :) cảm ơn!
Berlin

1
@Berlin Tôi đã vẽ một sơ đồ đại diện cho những gì tôi nghĩ bạn đang mô tả, nếu bạn có ý gì khác thì xin vui lòng cho tôi biết và tôi sẽ thích nghi.
Richard Slater

1
Hey @ Pierre.Vriens - Tôi không phiền tôi đã có vài phút và muốn làm rõ giả định của mình, về mặt lý thuyết, tôi có thể thêm nó vào câu trả lời của mình, và tôi cũng có thể làm điều đó.
Richard Slater

Câu trả lời:


4

Cân nhắc sử dụng plugin rabbitmq / rabbitmq-autocluster :

Một plugin RabbitMQ tự động phân cụm các nút bằng cách sử dụng một số cơ chế khám phá ngang hàng:

Có một chút cấu hình để cắm vào để có được thiết lập này bao gồm thiết lập các chính sách IAM và thêm các thẻ EC2 vào các trường hợp bạn muốn tham gia vào nhóm của mình.

Nếu bạn đã sử dụng Nhóm tự động AWS thì bạn sẽ thêm các mục sau vào rabbitmq.config:

[
  {rabbit, [ ... ]},
  {autocluster, [
    {backend, aws},
    {aws_autoscaling, true},
    {aws_ec2_region, "us-west-2"}
  ]}
].

Nếu bạn không sử dụng Nhóm tự động AWS, bạn vẫn có thể đạt được kết quả mong muốn bằng cách sử dụng thẻ trên Trường hợp EC2 của mình:

[
  {rabbit, [ ... ]},
  {autocluster, [
    {backend, aws},
    {aws_ec2_tags, [{"region", "us-west-2"}, {"service", "rabbitmq"}]},
    {aws_ec2_region, "us-east-1"},
    {aws_access_key, "..."},
    {aws_secret_key, "..."}
  ]}
].

Với tất cả những gì đã nói, tôi thực sự khuyên bạn nên sử dụng Consul của HashiCorp làm cơ chế khám phá dịch vụ của bạn, về lâu dài, bạn sẽ linh hoạt hơn đáng kể về việc tách rời các bộ phận trong hệ thống của bạn với nhau.


cảm ơn bạn đã giải thích chi tiết và sơ đồ, vì vậy AFAIK rabbitmq/rabbitmq-autocluster plugincũng sẽ biết loại bỏ nút khỏi danh sách sao chép sau khi nút bị hỏng, một điều nữa nếu tôi có thể hỏi, tôi nghĩ bắt đầu với 2-nodecụm, bạn có đề nghị bắt đầu với 3-nodecụm không như bạn mô tả trong sơ đồ của mình với chính sách `rabbitmqctl set_policy ha-all" "'{" ha-mode ":" all "," ha-sync-mode ":" tự động "}'`? hoặc tôi nên đăng nó trong một câu hỏi khác?
Berlin

1
Có thể là một câu hỏi khác vì định dạng trong các bình luận không dễ sử dụng. Tôi luôn khuyên khách hàng khi áp dụng đám mây nên sử dụng số lượng lớn hơn các trường hợp nhỏ thay vì ngược lại. Điều này là do thất bại được dự kiến ​​trong đám mây, nếu bạn có cụm 2 nút và 1 lỗi thì bạn đã mất 50% dung lượng, trong khi nếu bạn có cụm 3 nút và 1 lỗi thì bạn chỉ mất 33%.
Richard Slater

Tôi đã cấu hình cụm của mình bằng cách sử dụng rabbitmq/rabbitmq-autocluster pluginvà nó hoạt động khá tốt tuy nhiên khi nút đi xuống RabbitMQ không xóa nó khỏi danh sách sao chép, bạn có biết tại sao không?
Berlin

1
Bạn đã kích hoạt tùy chọn cấu hình Cluster Cleanup chưa?
Richard Slater

cảm ơn, tìm thấy nó https://github.com/aweber/rabbitmq-autocluster/wiki/General-Settings, tôi sẽ thử nó
Berlin
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.