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.
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:
Thêm các dòng sau:
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.
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:
Bạn cũng có thể xác minh trạng thái của dịch vụ RabbitMQ bằng lệnh sau:
Bạn sẽ nhận được kết quả đầu ra sau:
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ạ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:
Bạn sẽ thấy đầu ra sau:
Tiếp theo, khởi động lại dịch vụ RabbitMQ để áp dụng các thay đổi:
Bạn có thể xác minh cổng lắng nghe bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
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.
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:
Trên node2, tham gia cụm trên node1 bằng cách chạy lệnh sau:
Bạn sẽ thấy đầu ra sau:
Trên node2, khởi động ứng dụng bằng lệnh sau:
Bạn sẽ thấy kết quả sau:
Trên node3, hãy tham gia cụm trên node1 bằng cách chạy lệnh sau:
Bạn sẽ thấy kết quả sau:
Trên node3, khởi động ứng dụng bằng lệnh sau:
Bạn sẽ thấy kết quả sau:
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:
Bạn sẽ thấy đầu ra sau:
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:
Bạn sẽ thấy kết quả sau:
Tiếp theo, cấu hình người dùng hitesh làm quản trị viên bằng lệnh sau:
Bạn sẽ thấy kết quả sau:
Tiếp theo, cấp cho người dùng hitesh quyền sửa đổi, ghi và đọc tất cả vhost.
Bạn sẽ thấy kết quả sau:
Tiếp theo, xóa người dùng khách bằng lệnh sau lệnh:
Bạn sẽ nhận được lệnh sau:
Bây giờ bạn có thể liệt kê tất cả người dùng bằng lệnh sau:
Bạn sẽ nhận được đầu ra sau:
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.
Để 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.
Đầu ra:
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.
Đầu ra:
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.
Đầu ra:
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:
Bạn sẽ thấy đầu ra sau:
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.
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:
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
Chỉnh sửa tệp /etc/hosts trên mỗi nút bằng lệnh sau:
Mã:
nano /etc/hosts
Mã:
192.168.0.10 node1192.168.0.11 node2192.168.0.12 node3
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
Mã:
systemctl start rabbitmq-server
systemctl enable rabbitmq-server
Mã:
systemctl status rabbitmq-server
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.
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
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.
Mã:
systemctl restart rabbitmq-server
Mã:
netstat -tunelp | grep 15672
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/
Đầ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
Mã:
rabbitmqctl join_cluster rabbit@node1
Mã:
Phân cụm node rabbit@node2 bằng rabbit@node1
Mã:
rabbitmqctl start_app
Mã:
Đang khởi động node rabbit@node2 ... đã hoàn tất với 3 plugin.
Mã:
rabbitmqctl join_cluster rabbit@node1
Mã:
Đang nhóm node rabbit@node3 với rabbit@node1
Mã:
rabbitmqctl start_app
Mã:
Đang khởi động node rabbit@node3 ... đã hoàn tất với 3 plugin.
Mã:
rabbitmqctl cluster_status
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
Mã:
Adding user "hitesh" ...
Mã:
rabbitmqctl set_user_tags hitesh administrator
Mã:
Setting tags for user "hitesh" to [administrator] ...
Mã:
rabbitmqctl set_permissions -p / hitesh ".*" ".*" ".*"
Mã:
Setting permissions for user "hitesh" in vhost "/" ...
Mã:
rabbitmqctl delete_user guest
Mã:
Đang xóa người dùng "guest" ...
Mã:
rabbitmqctl list_users
Mã:
Đang liệt kê người dùng ...thẻ người dùnghitesh [administrator]
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"}'
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 "/" ...
Mã:
rabbitmqctl set_policy ha-two "^two\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
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 "/" ...
Mã:
rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":["rabbit@node2", "rabbit@node3"]}'
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 "/" ...
Mã:
rabbitmqctl list_policies;
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
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: