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.
Contents
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,[]}]}]
Leave A Comment?