Cách thiết lập RabbitMQ Cluster trên Ubuntu 20.04

theanh

Administrator
Nhân viên
RabbitMQ là phần mềm môi giới nhắn tin miễn phí, mã nguồn mở và đa giao thức được viết bằng ngôn ngữ lập trình Erlang. Môi giới tin nhắn được sử dụng để lưu trữ tin nhắn cho một ứng dụng. Khi một ứng dụng gửi dữ liệu đến một ứng dụng khác, ứng dụng sẽ xuất bản tin nhắn lên môi giới tin nhắn. RabbitMQ hỗ trợ nhiều giao thức nhắn tin và có thể dễ dàng triển khai trong các cấu hình phân tán. Môi giới tin nhắn hoạt động như một trung gian cho nhiều ứng dụng web khác nhau và được sử dụng để giảm tải và thời gian phân phối của ứng dụng web.

Trong hướng dẫn này, chúng ta sẽ thiết lập một cụm RabbitMQ ba nút trên máy chủ Ubuntu 20.04.

Điều kiện tiên quyết​

  • Ba máy chủ chạy Ubuntu 20.04.
  • Mật khẩu gốc được cấu hình trên mỗi máy chủ.

Bắt đầu​

Trước khi bắt đầu, bạn sẽ cần cập nhật các gói hệ thống của mình lên phiên bản mới nhất. Bạn có thể cập nhật chúng bằng cách chạy lệnh sau trên mỗi nút:
Mã:
apt-get update -y
Sau khi tất cả các gói được cập nhật, bạn sẽ cần thiết lập tệp /etc/hosts trên mỗi nút. Để chúng có thể giao tiếp với nhau bằng tên máy chủ.

Chỉnh sửa tệp /etc/hosts trên mỗi nút bằng lệnh sau:
Mã:
nano /etc/hosts
Thêm các dòng sau:
Mã:
192.168.0.10 node1192.168.0.11 node2192.168.0.12 node3
Lưu và đóng tệp khi bạn hoàn tất. Tiếp theo, bạn có thể tiến hành bước tiếp theo.

Cài đặt RabbitMQ Server​

Tiếp theo, bạn sẽ cần cài đặt gói RabbitMQ Server trên mỗi nút. Bạn có thể cài đặt bằng cách chỉ cần chạy lệnh sau:
Mã:
apt-get install rabbitmq-server -y
Sau khi cài đặt, hãy khởi động dịch vụ RabbitMQ và cho phép nó khởi động khi khởi động lại hệ thống bằng lệnh sau:
Mã:
systemctl start rabbitmq-server
systemctl enable rabbitmq-server
Bạn cũng có thể xác minh trạng thái của dịch vụ RabbitMQ bằng lệnh sau:
Mã:
systemctl status rabbitmq-server
Bạn sẽ nhận được kết quả đầu ra sau:
Mã:
? rabbitmq-server.service - RabbitMQ Messaging Server Đã tải: đã tải (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled) Đang hoạt động: đang hoạt động (đang chạy) kể từ Tue 2020-07-21 06:25:07 UTC; 19 phút trước PID chính: 2565 (beam.smp) Trạng thái: "Đã khởi tạo" Nhiệm vụ: 87 (giới hạn: 2353) Bộ nhớ: 83,5M CGroup: /system.slice/rabbitmq-server.service ??2551 /bin/sh /usr/sbin/rabbitmq-server ??2565 /usr/lib/erlang/erts-10.6.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1> ??2828 erl_child_setup 65536 ??2921 inet_gethost 4 ??2922 inet_gethost 421/07 06:24:58 node1 systemd[1]: Đang khởi động RabbitMQ Messaging Server...21/07 06:25:07 node1 systemd[1]: rabbitmq-server.service: Đang giám sát tiến trình 2565 không phải là tiến trình con của chúng ta. Chúng ta sẽ không nhận thấy khi >21/07 06:25:07 node1 systemd[1]: Đã khởi động RabbitMQ Messaging Server.
Tại thời điểm này, máy chủ RabbitMQ đã được cài đặt và đang chạy trên mỗi nút. Bây giờ bạn có thể tiến hành bước tiếp theo.

Bật Plugin quản lý RabbitMQ​

Plugin quản lý RabbitMQ cung cấp API dựa trên HTTP có thể được sử dụng để giám sát và quản lý các nút và cụm RabbitMQ thông qua trình duyệt web. Theo mặc định, nó chạy trên cổng TCP 15672.

Bạn có thể bật plugin quản lý RabbitMQ bằng cách chạy lệnh sau trên mỗi nút:
Mã:
rabbitmq-plugins enable rabbitmq_management
Bạn sẽ thấy đầu ra sau:
Mã:
Bật plugin trên nút rabbit@node1:rabbitmq_managementCác plugin sau đã được định cấu hình: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatchĐang áp dụng cấu hình plugin cho [email protected]ác plugin sau đã được bật: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatchđã khởi động 3 plugin.
Tiếp theo, khởi động lại dịch vụ RabbitMQ để áp dụng các thay đổi:
Mã:
systemctl restart rabbitmq-server
Bạn có thể xác minh cổng lắng nghe bằng lệnh sau:
Mã:
netstat -tunelp | grep 15672
Bạn sẽ thấy đầu ra sau:
Mã:
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 109 23155 2565/beam.smp

Thiết lập cụm RabbitMQ​

Theo mặc định, tệp /var/lib/rabbitmq/.erlang.cookie giống nhau trên mỗi nút. Để thiết lập cụm RabbitMQ, bạn sẽ cần sao chép tệp /var/lib/rabbitmq/.erlang.cookie từ node1 sang các nút khác.

Trên node1, hãy chạy lệnh sau để sao chép tệp /var/lib/rabbitmq/.erlang.cookie sang các nút khác.
Mã:
scp /var/lib/rabbitmq/.erlang.cookie [emailprotected]:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie [emailprotected]:/var/lib/rabbitmq/
Tiếp theo, bạn sẽ cần thiết lập node1 và node2 để tham gia cụm node1.

Đầu tiên, khởi động lại dịch vụ RabbitMQ và dừng ứng dụng bằng lệnh sau trên cả node2 và node3:
Mã:
systemctl restart rabbitmq-server
rabbitmqctl stop_app
Trên node2, tham gia cụm trên node1 bằng cách chạy lệnh sau:
Mã:
rabbitmqctl join_cluster rabbit@node1
Bạn sẽ thấy đầu ra sau:
Mã:
Phân cụm node rabbit@node2 bằng rabbit@node1
Trên node2, khởi động ứng dụng bằng lệnh sau:
Mã:
rabbitmqctl start_app
Bạn sẽ thấy kết quả sau:
Mã:
Đang khởi động node rabbit@node2 ... đã hoàn tất với 3 plugin.
Trên node3, hãy tham gia cụm trên node1 bằng cách chạy lệnh sau:
Mã:
rabbitmqctl join_cluster rabbit@node1
Bạn sẽ thấy kết quả sau:
Mã:
Đang nhóm node rabbit@node3 với rabbit@node1
Trên node3, khởi động ứng dụng bằng lệnh sau:
Mã:
rabbitmqctl start_app
Bạn sẽ thấy kết quả sau:
Mã:
Đang khởi động node rabbit@node3 ... đã hoàn tất với 3 plugin.
Sau khi hoàn tất thành công, hãy kiểm tra trạng thái của cụm bằng cách chạy lệnh sau trên node1:
Mã:
rabbitmqctl cluster_status
Bạn sẽ thấy đầu ra sau:
Mã:
Trạng thái cụm của nút rabbit@node1 ...Cơ bảnTên cụm: rabbit@node3Nút đĩarabbit@node1rabbit@node2rabbit@node3Nút đang chạyrabbit@node1rabbit@node2rabbit@node3Phiên bảnrabbit@node1: RabbitMQ 3.8.2 trên Erlang 22.2.7rabbit@node2: RabbitMQ 3.8.2 trên Erlang 22.2.7rabbit@node3: RabbitMQ 3.8.2 trên Erlang 22.2.7Báo động(không có)Phân vùng mạng(không có)Người ngheNút: rabbit@node1, giao diện: [::], cổng: 25672, giao thức: cụm, mục đích: giao tiếp giữa các nút và công cụ CLINút: rabbit@node1, giao diện: [::], cổng: 5672, giao thức: amqp, mục đích: AMQP 0-9-1 và AMQP 1.0Nút: rabbit@node1, giao diện: [::], cổng: 15672, giao thức: http, mục đích: API HTTPNút: rabbit@node2, giao diện: [::], cổng: 25672, giao thức: cụm, mục đích: giao tiếp giữa các nút và công cụ CLINút: rabbit@node2, giao diện: [::], cổng: 5672, giao thức: amqp, mục đích: AMQP 0-9-1 và AMQP 1.0Nút: rabbit@node2, giao diện: [::], cổng: 15672, giao thức: http, mục đích: API HTTPNút: rabbit@node3, giao diện: [::], cổng: 25672, giao thức: cụm, mục đích: giao tiếp giữa các nút và công cụ CLINút: rabbit@node3, giao diện: [::], cổng: 5672, giao thức: amqp, mục đích: AMQP 0-9-1 và AMQP 1.0Nút: rabbit@node3, giao diện: [::], cổng: 15672, giao thức: http, mục đích: API HTTPCờ tính năngCờ: drop_unroutable_metric, trạng thái: đã tắtCờ: empty_basic_get_metric, trạng thái: đã tắtCờ: implicit_default_bindings, trạng thái: đã bậtCờ: quorum_queue, trạng thái: đã bậtCờ: virtual_host_metadata, trạng thái: đã bật

Thiết lập Người dùng Quản trị viên​

Tiếp theo, bạn sẽ cần tạo một người dùng quản trị mới cho máy chủ RabbitMQ và xóa người dùng 'khách' mặc định.

Bạn có thể tạo một người dùng mới có tên là "hitesh" và mật khẩu là "password" bằng cách chạy lệnh sau trên node1:
Mã:
rabbitmqctl add_user hitesh password
Bạn sẽ thấy kết quả sau:
Mã:
Adding user "hitesh" ...
Tiếp theo, cấu hình người dùng hitesh làm quản trị viên bằng lệnh sau:
Mã:
rabbitmqctl set_user_tags hitesh administrator
Bạn sẽ thấy kết quả sau:
Mã:
Setting tags for user "hitesh" to [administrator] ...
Tiếp theo, cấp cho người dùng hitesh quyền sửa đổi, ghi và đọc tất cả vhost.
Mã:
rabbitmqctl set_permissions -p / hitesh ".*" ".*" ".*"
Bạn sẽ thấy kết quả sau:
Mã:
Setting permissions for user "hitesh" in vhost "/" ...
Tiếp theo, xóa người dùng khách bằng lệnh sau lệnh:
Mã:
rabbitmqctl delete_user guest
Bạn sẽ nhận được lệnh sau:
Mã:
Đang xóa người dùng "guest" ...
Bây giờ bạn có thể liệt kê tất cả người dùng bằng lệnh sau:
Mã:
rabbitmqctl list_users
Bạn sẽ nhận được đầu ra sau:
Mã:
Đang liệt kê người dùng ...thẻ người dùnghitesh [administrator]
Người dùng mà bạn đã tạo trên node1 sẽ tự động được sao chép vào tất cả các nút trên cụm.

RabbitMQ Setup Queue Mirroring​

Theo mặc định, nội dung của hàng đợi nằm trên một nút duy nhất. Vì vậy, bạn sẽ cần thiết lập cụm 'ha policy' để phản chiếu hàng đợi và sao chép tới tất cả các nút cụm.

Để thực hiện việc này, hãy tạo một chính sách ha có tên là 'ha-all' mà tất cả các hàng đợi trên cụm RabbitMQ sẽ phản chiếu tới tất cả các nút trên cụm.
Mã:
rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'
Đầu ra:
Mã:
Đặt chính sách "ha-all" cho mẫu ".*" thành "{"ha-mode":"all"}" với mức độ ưu tiên "0" cho vhost "/" ...
Tiếp theo, tạo một chính sách ha có tên là 'ha-two' mà tất cả tên hàng đợi bắt đầu bằng 'two.' sẽ phản chiếu tới hai nút trên cụm.
Mã:
rabbitmqctl set_policy ha-two "^two\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
Đầu ra:
Mã:
Đặt chính sách "ha-two" cho mẫu "^two\." đến "{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}" với mức độ ưu tiên "0" cho vhost "/" ...
Tiếp theo, tạo chính sách khả dụng cao có tên là 'ha-nodes' sẽ chứa tất cả các hàng đợi có tên bắt đầu bằng 'nodes'. Chúng tôi sẽ phản chiếu tới hai nút cụ thể là 'node2' và 'node3' trong cụm.
Mã:
rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":["rabbit@node2", "rabbit@node3"]}'
Đầu ra:
Mã:
Đặt chính sách "ha-nodes" cho mẫu "^nodes\." đến "{"ha-mode":"nodes","ha-params":["rabbit@node2", "rabbit@node3"]}" với mức độ ưu tiên "0" cho vhost "/" ...
Bây giờ bạn có thể liệt kê tất cả các chính sách đã cấu hình bằng cách chạy lệnh sau:
Mã:
rabbitmqctl list_policies;
Bạn sẽ thấy đầu ra sau:
Mã:
Liệt kê các chính sách cho vhost "/" ...vhost name pattern apply-to definition priority/ ha-all .* all {"ha-mode":"all"} 0/ ha-two ^two\. all {"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"} 0/ ha-nodes ^nodes\. tất cả {"ha-mode":"nodes","ha-params":["rabbit@node2","rabbit@node3"]} 0
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.

Truy cập RabbitMQ Cluster​

Bây giờ bạn có thể truy cập giao diện web RabbitMQ bằng cách nhập địa chỉ IP của bất kỳ nút nào trong trình duyệt web của bạn với cổng 15672 như http://192.168.0.10:15672/. Bạn sẽ thấy trang đăng nhập RabbitMQ:



Cung cấp tên người dùng quản trị, mật khẩu và nhấp vào nút Đăng nhập. Bạn sẽ thấy bảng điều khiển RabbitMQ trong màn hình sau:



Tiếp theo, nhấp vào menu tab 'Quản trị viên' và nhấp vào menu 'Chính sách'. Bạn sẽ thấy tất cả các chính sách ha RabbitMQ mà chúng ta đã tạo trong màn hình sau:


Kết luận​

Xin chúc mừng! Bạn đã thiết lập thành công cụm RabbitMQ ba nút trên máy chủ Ubuntu20.04. Cụm của bạn hiện đang chia sẻ thông tin cấu hình bao gồm thông tin về cấu trúc và bảo mật trên tất cả các nút.
 
Back
Bên trên