RabbitMQ集群


CentOS7系統內核版本:3.10.0-514.26.2.el7.x86_64

一、對應主機host地址(三台主機host文件要保持一致)

10.0.1.20 node1
10.0.1.21 node2
10.0.1.22 node3
# node1節點執行
hostnamectl set-hostname node1
# node2節點執行
hostnamectl set-hostname node2
# node3節點執行
hostnamectl set-hostname node3
reboot

二、3台主機都安裝相同的軟件:

1.erlang,rabbitMQ安裝安裝:  

rpm -ivh erlang-21.3.8.13-1.el7.x86_64.rpm
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh rabbitmq-server-3.8.2-1.el7.noarch.rpm

2.啟動服務和查看狀態:  

service rabbitmq-server start
service rabbitmq-server status
#CentOS7推薦使用如下方法:
systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service

3.安裝管理插件:

web管理插件
rabbitmq-plugins list      #查看插件列表
rabbitmq-plugins enable rabbitmq_management
 
日志跟蹤插件
rabbitmq-plugins enable rabbitmq_tracing  #rabbitmq啟用trace插件
rabbitmqctl trace_on      #打開trace的開關
rabbitmqctl trace_on -p test #打開trace的開關(test為需要日志追蹤的vhost)
rabbitmqctl trace_off     #關閉trace的開關
安裝rabbitmq_delayed_message_exchange(延時隊列)
 
默認插件目錄:
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/plugins
wget https: //dl.bintray.com/rabbitmq/community-plugins/rabbitmq_delayed_message_exchange-0.0.1.ez
 
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
The following plugins have been enabled:
rabbitmq_delayed_message_exchange
 
Applying plugin configuration to v01-app-rabbit@localhost... started 1 plugin.

至此3台上面的rabbitmq都已安裝完成,並且啟動正常,現在開始配置集群服務。

三、普通集群配置

1.說明:

Rabbitmq的集群是依附於erlang的集群來工作的,所以必須先構建起erlang的集群鏡像。Erlang的集群中各節點是經由過程一個magic cookie來實現的,這個cookie存放在 $home/.erlang.cookie 中,我的是用rpm安裝的,所以.erlang.cookie就放在/var/lib/rabbitmq中

2.復制cookie內容 
erlang.cookie是erlang實現分布式的必要文件,erlang分布式的每個節點上要保持相同的.erlang.cookie文件,同時保證文件的權限是400,不然節點之間就無法通信。

打開文件然后需要先把其中的一台服務器的.erlang.cookie中的內容復制到別的機器上,最好是復制內容,因為文件權限不對的話會出現問題,在最后退出保存的時候使用wq!用!來進行強制保存即可.

也可是直接使用scp傳過去,記得文件權限和用戶屬主屬組如scp .erlang.cookie root@10.100.2.12:/tmp

##操作

3.erlang.cookie復制完成后,逐個重啟節點服務:

## 每個node上傳 .erlang.cookie

echo "123456" > .erlang.cookie

mv .erlang.cookie /var/lib/rabbitmq/

chmod 400 .erlang.cookie

## 重啟

systemctl restart rabbitmq-server.service

systemctl status rabbitmq-server.service

4.添加到集群:

將rabbit@node1作為集群主節點,在節點弄得node2和節點node3上面分別執行如下命令,以加入集群中.

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl join_cluster rabbit@v01-app-rabbitmq01

rabbitmqctl start_app

5.台都查看集群狀態

rabbitmqctl cluster_status

6.賬號管理

添加賬號:
rabbitmqctl add_user admin admin
添加 權限tag
rabbitmqctl set_user_tags admin administrator
 
刪除用戶(刪除guest用戶)
[root@v01-app-rabbitmq01 rabbitmq]# rabbitmqctl delete_user guest
Deleting user  "guest"
 
修改用戶的密碼
rabbitmqctl  change_password  Username  Newpassword
 
[root@v01-app-rabbitmq01 ~]# rabbitmqctl  change_password  admin 0GM1aol4z8GeSZY99
Changing password  for  user  "admin"
 
查看當前用戶列表
rabbitmqctl  list_users
Listing users
admin   [administrator]

7.訪問WEB地址:10.0.1.20:15672

至此rabbitmq普通集群模式創建完成.

 

 

從集群中移除節點:

[root@node2]# rabbitmqctl stop_app

Stopping rabbit application on node 'rabbit@node2'

[root@node2]# rabbitmqctl reset

Resetting node 'rabbit@v01-app-rabbitmq02'

[root@node2]#  rabbitmqctl start_app

Starting node 'node2'

加入集群時指定節點類型:

rabbitmqctl stop_app

rabbitmqctl join_cluster --ram rabbit@v01-app-rabbitmq01

rabbitmqctl start_app

--ram 指定內存節點類型,--disc指定磁盤節點類型

修改節點類型

rabbitmqctl stop_app

rabbitmqctl change_cluster_node_type disc

rabbitmqctl start_app

日志文件:

/var/log/rabbitmq/rabbit@v01-app-rabbitmq01.log

/var/log/rabbitmq/rabbit@v01-app-rabbitmq01-sasl.log  

集群鏡像模式配置:

     上面配置RabbitMQ默認集群模式,但並不保證隊列的高可用性,盡管交換機、綁定這些可以復制到集群里的任何一個節點,但是隊列內容不會復制,雖然該模式解決一部分節點壓力,但隊列節點宕機直接導致該隊列無法使用,只能等待重啟,所以要想在隊列節點宕機或故障也能正常使用,就要復制隊列內容到集群里的每個節點,需要創建鏡像隊列。

我們看看如何鏡像模式來解決復制的問題,從而提高可用性.

使用Rabbit鏡像功能,需要基於rabbitmq策略來實現,策略是用來控制和修改群集范圍的某個vhost隊列行為和Exchange行為

下面我們使用web端創建一個完整的鏡像隊列:

1.點擊admin菜單-->右側的Virtual Hosts選項- Add a new virtual host 

 

 2.點擊admin菜單-->右側的Policies選項-->左側最下下邊的Add / update a policy

 添加一個queues隊列

 

添加后刷新就可以看到策略已經應用了

命令行配置集群鏡像模式:

使用Rabbit鏡像功能,需要基於rabbitmq策略來實現,政策是用來控制和修改群集范圍的某個vhost隊列行為和Exchange行為

在cluster中任意節點啟用策略,策略會自動同步到集群節點

# rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'

這行命令在vhost名稱為hrsystem創建了一個策略,策略名稱為ha-allqueue, 策略模式為 all 即復制到所有節點,包含新增節點,策略正則表達式為 “^” 表示所有匹配所有隊列名稱。

實例:

   rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'

   rabbitmqctl set_policy ha-all "^SMS_BUSINESS_NOW\." '{"ha-mode":"all","ha-sync-mode":"automatic"}'

virtual_host管理

新建virtual_host: rabbitmqctl add_vhost  xxx
撤銷virtual_host: rabbitmqctl delete_vhost  xxx

 刪除隊列:

rabbitmqctl -p /activity purge_queue activity_register
 
RabbitMQ 高可用集群就已經搭建好了,最后一個步驟就是搭建均衡器。 安裝並配置 HAProxy
在 10.0.1.23上安裝 HAProxy,然后修改 /etc/haproxy/haproxy.cfg:
 
listen rabbitmq_cluster 0.0.0.0:5672

mode tcp
balance roundrobin

server node1 192.168.1.1:5672 check inter 2000 rise 2 fall 3
server node2 192.168.1.2:5672 check inter 2000 rise 2 fall 3
server node2 192.168.1.3:5672 check inter 2000 rise 2 fall 3

 
        

 

 

 

 

 

 

參考文檔:
rabbitmq——用戶管理
http://www.cnblogs.com/AloneSword/p/4200051.html
http://blog.csdn.net/njys1/article/details/53001728

集群高可用配置:
http://88250.b3log.org/rabbitmq-clustering-ha
http://www.cnblogs.com/flat_peach/archive/2013/04/07/3004008.html
http://www.cnblogs.com/wangiqngpei557/p/6158094.html

在WEB端創建鏡像隊列:
https://jingyan.baidu.com/article/e73e26c0c3841b24adb6a7b9.html

 

systemctl restart rabbitmq-server.service
systemctl status rabbitmq-server.service


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM