RabbitMQ是什麼?
MQ(Mesee Qucue消息隊列)是種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,
而無需專用鏈接來連接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用
通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。
RabbitMQ是目前流行的開源消息隊列系統,用Erlang語言開發。RabbitMQ是AMQP(高級消息隊列協議)的標準實現。
實驗環境
IP地址 | 主機名 | 用途 |
---|---|---|
192.168.10.157 | mq1 | 磁盤節點 |
192.168.10.178 | mq2 | 內存節點 |
192.168.10.163 | mq3 | 內存節點 |
RabbitMQ集羣配置
實現步驟
1、配置三個節點的hosts文件,將如下內容分別加入到三臺服務器上
vim /etc/hosts
192.168.10.157 mq1
192.168.10.178 mq2
192.168.10.163 mq3
#修改完需重啓:init 6
2、三個節點配置yum軟件源,安裝rabbitmq軟件
yum install epel-release -y //安裝源
yum install -y rabbitmq-server //安裝服務
3、分別查看三個節點並添加管理任務,最後啓動rabbitmq服務
/usr/lib/rabbitmq/bin/rabbitmq-plugins list //查看有哪些服務,插件安裝情況
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //啓動管理服務
systemctl start rabbitmq-server.service //開啓rabbitmq服務
netstat -ntap | grep 5672 //查看端口,其中15672和55672都是rabbitmq的管理端口,5672則是和生產者、消費者通信的端口
ln -s /usr/lib/rabbitmq/bin/* /usr/bin/ //方便管理,建立軟鏈接
4、查看rabbitmq狀態,測試能否連接
rabbitmqctl cluster-status //測試能否連接上
5、修改.erlang.cookie文件
Rabbitmq的集羣是依賴於Erlang的集羣來工作的,所以必須先構建起Erlang的集羣環境。在Erlang的集羣中,各節點是通過一個magic cookie來實現的,這個cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的權限。所以必須保證各節點cookie保持一致,否則節點之間就無法通信
cd /var/lib/rabbitmq/
vim .erlang.cookie
#.erlang.cookie是隱藏文件,使用ls -a查看,複製mq1的cookie,修改mq2,mq3與之相同
6、重啓rabbitmq服務,關閉防火牆
systemctl restart rabbitmq-server.service //重啓
systemctl stop firewalld.service
setenforce 0 //關閉防火牆和安全功能
7、將mq2、mq3作爲內存節點與mq1磁盤節點連接起來,在mq2、mq3上執行如下命令
rabbitmqctl stop_app //停止rabbitmq應用
rabbitmqctl join_cluster --ram rabbit@mq1 //調用cluster命令,將mq2連接到mq1,-ram以內存節點形式添加
rabbitmqctl start_app //開啓rabbitmq應用
8、在mq1上查看狀態
#mq1查看已連接
rabbitmqctl cluster_status
Cluster status of node rabbit@mq1 ...
[{nodes,[{disc,[rabbit@mq1]},{ram,[rabbit@mq3,rabbit@mq2]}]},
{running_nodes,[rabbit@mq3,rabbit@mq2,rabbit@mq1]},
{cluster_name,<<"rabbit@mq1">>},
{partitions,[]}]
...done.
以上便完成了配置RabbitMQ默認集羣模式