Hướng dẫn cài đặt RabbitMQ trên CentOS 7

Chào các bạn,

Bài viết hôm nay sẽ hướng dẫn các bạn cài đặt RabbitMQ trên CentOS 7.

Giới thiệu về RabbitMQ

RabbitMQ là một message broker dùng để liên kết các thành phần trong một hệ thống phân tán và là công cụ trung gian phân phối Message từ Producer đến Consumer.

Ps:// Ảnh sưu tầm từ Internet

Các Producer và Consumer có thể khác biệt và ngôn ngữ tuy nhiên đều có thể giao tiếp với nhau bằng các Message Protocol như Advanced Message Queuing Protocol (AMQP), Oriented Messaging Protocol (STOMP), Message Queuing Telemetry Transport (MQTT), …v.v. Việc sử dụng Message Broker giúp đơn giản hóa công việc lập trình khi ứng dụng yêu cầu một hệ thống lớn, phức tạp, nhiều thành phần và nhiều ngôn ngữ lập trình khác nhau.

Cài đặt RabbitMQ trên CentOS 7

Cài đặt Epel repo

yum install epel-release
yum update

Cài đặt RabbitMQ repo và Erlang

cd ~
wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
yum install erlang

Download và cài đặt RabbitMQ từ package

cd ~
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.8/rabbitmq-server-3.7.8-1.el7.noarch.rpm
rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.7.8-1.el7.noarch.rpm

Đảm bảo rằng firewall của bạn Allow các port của RabbitMQ

firewall-cmd --zone=public --permanent --add-port=4369/tcp --add-port=25672/tcp --add-port=5671-5672/tcp --add-port=15672/tcp --add-port=61613-61614/tcp --add-port=1883/tcp --add-port=8883/tcp
firewall-cmd --reload

Start dịch vụ RabbitMQ

systemctl start rabbitmq-server.service
systemctl enable rabbitmq-server.service

Kiểm tra rabbitmq node của bạn đã up và có thể kết nối

rabbitmqctl status

Enable Plugin giao diện quản lý của RabbitMQ

rabbitmq-plugins enable rabbitmq_management
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/

Tiếp theo các bạn tạo 1 tài khoản để đăng nhập vá gán quyền administrator cho tài khoản đó

rabbitmqctl add_user admin [adminpassword]
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

Sau đó các bạn truy cập vào đường dẫn sau để thực hiện login vào trang giao diện quản lý của RabbitMQ

http://[ip-address]:15672/

Rabbit Clustering

Một RabbitMQ Broker là một logical group của một hoặc nhiều Erlang nodes, trên đó mỗi node đều chạy ứng dụng RabbitMQ. Các nodes trong RabbitMQ đều có cùng level và ngang hàng nhau nên được gọi là peers, các peers sẽ cùng chia sẻ và đồng bộ các thông tin như users, virtual hosts, queues, exchanges, bindings. Các node có thể join và leave cụm Cluster để hoạt động độc lập chỉ với một vài cấu hình đơn giản. RabbitMQ hỗ trợ rất nhiều phương thức để triển khai 1 cụm cluster, chúng ta sẽ cùng thực hiện triển khai RabbitMQ cluster với phương thức đơn giản nhất đó là cấu hình trực tiếp từ rabbitmqctl.

Các node trong Cluster sẽ xác thực các peers bằng cách sử dụng cookie, cookie này là phương thức xác minh khi thực hiện trao đổi dữ liệu giữa các node, do đó, tất cả các nodes đều phải có cùng 1 giá trị cookie giống nhau, giá trị này được lưu tại

cat /var/lib/rabbitmq/.erlang.cookie
AFYDPNYXGNARCABLNENP

Sau khi setup 3 server RabbitMQ thành công, chúng ta add Cookie từ 1 node bất kỳ vào các nodes còn lại, ví dụ copy từ Host1 qua Host2 và Host3. Stop rabbitmq-server trước khi thực hiện.

service rabbitmq-server stop
echo -n "AFYDPNYXGNARCABLNENP" > /var/lib/rabbitmq/.erlang.cookie
service rabbitmq-server start

Add file hosts IP của toàn bộ cụm Cluster vào mỗi node để đảm bảo các node có thể nhìn thấy nhau

10.0.0.1	host1
10.0.0.2	host2
10.0.0.3	host3

Để thực hiện Join vào một Cluster, chúng ta thực hiện như sau, tại host2 và host3

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@host1
rabbitmqctl start_app

Sau khi Join thành công host2 và host3 vào host1, gõ lệnh sau để kiểm tra tình trạng hoạt động của Cluster

rabbitmqctl cluster_status
Cluster status of node rabbit@host1 ...
[{nodes,[{disc,['rabbit@host1',rabbit@host2,rabbit@host3]}]},
 {running_nodes,[rabbit@host3,rabbit@host2,'rabbit@host1']},
 {cluster_name,<<"rabbit@localhost">>},
 {partitions,[]},
 {alarms,[{rabbit@host3,[]},
          {rabbit@host2,[]},
          {'rabbit@host1',[]}]}]

Tại dòng {running_nodes}, chúng ta thấy hiển thị đầy đủ danh sách các Host đã cấu hình.

Để leave 1 node ra khỏi Cluster, chúng ta thực hiện như sau

rabbitmqctl stop_app 
rabbitmqctl reset
rabbitmqctl start_app

Sau khi leave Cluster thành công và start lại, node đó sẽ tự nó đứng ra hoạt động độc lập như là 1 Cluster 1 thành viên, không ai chơi với em thì em chơi 1 mình 😀

Cluster status of node rabbit@host2 ...
[{nodes,[{disc,[rabbit@host2]}]},
 {running_nodes,[rabbit@host2]},
 {cluster_name,<<"rabbit@host2">>},
 {partitions,[]},
 {alarms,[{rabbit@host2,[]}]}]

Rate This Article

Leave A Comment?