CentOS7環境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
二、3臺主機都安裝相同的軟體:
1.erlang安裝:
1 2 3 4 5 6 7 8 9 |
下載地址:
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安裝:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
下載地址: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.啟動服務和檢視狀態:
1 2 3 4 5 6 |
service rabbitmq-server start
service rabbitmq-server status
#CentOS7推薦使用如下方法:
systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service
|
4.安裝管理外掛:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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 [email protected]:/tmp
3.erlang.cookie複製完成後,逐個重啟節點服務:
1 2 |
systemctl restart rabbitmq-server.service
systemctl status rabbitmq-server.service
|
4.新增到叢集:
將rabbit@v01-app-rabbitmq01作為叢集主節點,在節點rabbitmq02和節點rabbitmq03上面分別執行如下命令,以加入叢集中.
1 2 3 4 |
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@v01-app-rabbitmq01
rabbitmqctl start_app
|
5.3臺都檢視叢集狀態
1 |
rabbitmqctl cluster_status
|
6.賬號管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
新增賬號:
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普通叢集模式建立完成.
從叢集中移除節點:
1 2 3 4 5 6 |
[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'
|
改變叢集節點型別
加入叢集時指定節點型別:
1 2 3 4 5 |
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@v01-app-rabbitmq01
rabbitmqctl start_app
--ram 指定記憶體節點型別,--disc指定磁碟節點型別
|
修改節點型別:
1 2 3 |
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl start_app
|
日誌檔案:
1 2 |
/ var /log/rabbitmq/[email protected]
/ var /log/rabbitmq/[email protected]
|
叢集映象模式配置:
上面配置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中任意節點啟用策略,策略會自動同步到叢集節點
1 |
# 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