CentOS7系統內核版本:3.10.0-514.26.2.el7.x86_64
一、對應主機host地址(三台主機host文件要保持一致)
10.100.2.10 v01-app-rabbitmq01 10.100.2.11 v01-app-rabbitmq02 10.100.2.12 v01-app-rabbitmq03
二、3台主機都安裝相同的軟件:
1.erlang安裝:
下載地址: http://www.rabbitmq.com/releases/erlang/ [root@v01-app-rabbitmq01 opt]# wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el6.x86_64.rpm [root@v01-app-rabbitmq01 opt]# rpm -ivh erlang-19.0.4-1.el6.x86_64.rpm 准備中... ################################# [100%] 正在升級/安裝... 1:erlang-19.0.4-1.el6 ################################# [100%] [root@v01-app-rabbitmq01 opt]#
2.rabbitMQ安裝:
下載地址:https://dl.bintray.com/rabbitmq/rabbitmq-server-rpm/ [root@v01-app-rabbitmq01 opt]# wget https://dl.bintray.com/rabbitmq/rabbitmq-server-rpm/rabbitmq-server-3.6.12-1.el6.noarch.rpm [root@v01-app-rabbitmq01 opt]# rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc [root@v01-app-rabbitmq01 opt]# rpm -ivh rabbitmq-server-3.6.12-1.el6.noarch.rpm 錯誤:依賴檢測失敗: socat 被 rabbitmq-server-3.6.12-1.el6.noarch 需要 解決報錯: [root@v01-app-rabbitmq01 opt]# wget –no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo #如果下載yum源有問題,可以不適用yum源直接安裝試試. [root@v01-app-rabbitmq01 opt]# yum makecache -y [root@v01-app-rabbitmq01 opt]# yum install socat -y [root@v01-app-rabbitmq01 opt]# rpm -ivh rabbitmq-server-3.6.12-1.el6.noarch.rpm 准備中... ################################# [100%] 正在升級/安裝... 1:rabbitmq-server-3.6.12-1.el6 ################################# [100%]
3.啟動服務和查看狀態:
service rabbitmq-server start service rabbitmq-server status #CentOS7推薦使用如下方法: systemctl start rabbitmq-server.service systemctl status rabbitmq-server.service
4.安裝管理插件:
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復制完成后,逐個重啟節點服務:
systemctl restart rabbitmq-server.service systemctl status rabbitmq-server.service
4.添加到集群:
將rabbit@v01-app-rabbitmq01作為集群主節點,在節點rabbitmq02和節點rabbitmq03上面分別執行如下命令,以加入集群中.
rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@v01-app-rabbitmq01 rabbitmqctl start_app
5.3台都查看集群狀態
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.100.2.10:15672
至此rabbitmq普通集群模式創建完成.
從集群中移除節點:
[root@v01-app-rabbitmq02 rabbitmq]# rabbitmqctl stop_app Stopping rabbit application on node 'rabbit@v01-app-rabbitmq02' [root@v01-app-rabbitmq02 rabbitmq]# rabbitmqctl reset Resetting node 'rabbit@v01-app-rabbitmq02' [root@v01-app-rabbitmq02 rabbitmq]# rabbitmqctl start_app Starting node 'rabbit@v01-app-rabbitmq02'
改變集群節點類型
加入集群時指定節點類型:
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
如果有多個隊列應用ha-all策略,patten就寫成正則的,如下
添加一個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——用戶管理
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