RabbitMQ叢集搭建和使用
原文地址:https://www.cnblogs.com/java-spring/p/8855862.html
RabbitMQ叢集搭建和使用
一.環境準備
1、選擇RabbitMQ的版本
http://www.rabbitmq.com/changelog.html
注:不同版本的Linux選擇的RabbitMQ版本也不同,參照
http://www.rabbitmq.com/install-rpm.html
檢視CentOS版本:more /etc/redhat-release
2、RabbitMQ依賴於Erlang,兩者版本需匹配,版本對照表如下:
http://www.rabbitmq.com/which-erlang.html
2.1選擇Erlang的版本
http://www.erlang.org/downloads
二.安裝單機RabbtiMQ
2.1安裝Erlang
2.1.1安裝Erlang依賴
yum install gcc glibc-devel make ncurses-devel openssl-devel autoconf
2.1.2下載解壓縮
wget複製的下載連結地址
wgethttp://erlang.org/download/otp_src_20.3.tar.gz
tar -xvf otp_src_20.3.tar.gz
2.1.3安裝Erlang
轉到解壓目錄下cd otp_src_20.3挨個執行一下命令
./configure
make install
2.2安裝RabbitMQ
2.2.1下載RabbitMQ
wget複製的下載連結地址
wgethttps://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.4/rabbitmq-server-3.7.4-1.el6.noarch.rpm
2.2.2安裝RabbitMQ
rpm --importhttps://www.rabbitmq.com/rabbitmq-release-signing-key.asc
rpm -i --nodeps rabbitmq-server-3.7.4-1.el6.noarch.rpm
在/opt/rabbitmq資料夾下
檢視安裝包:rpm -qa | grep -irabbitmq-server-3.7.4-1.el6.noarch
刪除安裝包:rpm -erabbitmq-server-3.7.4-1.el6.noarch
2.2.3新建檔案,指定節點名
檔案路徑: /etc/rabbitmq/rabbitmq-env.conf
檔案內容: NODENAME=rabbit@節點名
節點名設為機器名稱即可
2.2.4啟動RabbitMQ
進入/usr/lib/rabbitmq/bin/
執行rabbitmq-server
按Ctrl+C,等一下就退出了
2.2.5 Web管理後臺
載入外掛:rabbitmq-plugins enable rabbitmq_management
再次執行rabbitmq-server
頁面訪問:http://IP:15672/
三.RabbtiMQ使用者管理
3.1參考連結
https://www.cnblogs.com/java-zhao/p/5670476.html
3.2新增一個使用者
rabbitmqctl add_user 使用者名稱使用者密碼
3.3給使用者賦角色
rabbitmqctl set_user_tags 使用者名稱角色名
3.4給使用者賦許可權
rabbitmqctl set_permissions -p "/" 使用者名稱".*" ".*" ".*"
3.5刪除使用者
rabbitmqctl delete_user 使用者名稱
3.6檢視使用者
rabbitmqctl list_users
注: 預設使用者為guest guest,可新建使用者
給檔案賦許可權:
chmod 777 /資料夾名字/檔名字或者*
四.RabbitMQ叢集搭建
4.1環境準備
多臺(3臺)安裝RabbitMQ Server的伺服器,伺服器IP分別為ip1,ip2,ip3,以選擇ip1伺服器為主節點為例
4.2保持.erlang.cookie一致
1)複製ip1伺服器中的.erlang.cookie
(.erlang.cookie 存在於/var/lib/rabbitmq/.erlang.cookie 和~/.erlang.cookie中)
2)保持ip1,ip2,ip3伺服器中的/var/lib/rabbitmq/.erlang.cookie和~/.erlang.cookie一致
4.3後臺啟動各個節點
rabbitmq-server -detached
這樣就成功了,網頁訪問一下能成功就行
切記:啟動後不要關閉,否則會出現錯誤
4.4檢視各節點狀態
rabbitmqctl status
4.5配置各節點的hosts檔案
檔案路徑:vi /etc/hosts
檔案內容:(注:名稱為2.2.3中的節點名)
10.170.1.22linux02
10.170.1.23linux03
4.6建立叢集
*以ip1伺服器為主節點為例,在ip2,ip3上執行相同的如下操作
ip1伺服器要啟動著(在/usr/lib/rabbitmq/bin下執行rabbitmq-server),然後在ip2和ip3上做以下操作
rabbitmqctl stop_app
rabbitmqctl reset//可以不做
rabbitmqctl join_cluster rabbit@名稱1
rabbitmqctl start_app
4.7檢視叢集的狀態資訊
rabbitmqctl cluster_status
4.8映象佇列
1).登入web後臺管理頁面
2).Admin -> Policies -> Add/update a policy
3).填寫內容(例如:
Name:Mirror_RabbitMQ
Pattern:^//"^"表示所有,最好手動輸入,不要貼上
Definition:HAmode=exactly
HAprarms=2
HAsyncmode=automatic)
4).Add policy
新增一個,其他的也都會有該策略
以下不用做
4.9退出叢集
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
4.10移除節點
1)關閉要移除的節點A
rabbitmqctl stop_app
2)在其他節點B移除節點A
rabbitmqctl forget_cluster_node rabbit@rabbitName
五.負載均衡-HAProxy
5.1安裝epel
rpm -ivhhttps://mirrors.tongji.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
5.2安裝HAProxy
yum -y install haproxy
5.1/5.2每臺伺服器都安裝
5.3修改配置檔案
1)配置檔案路徑:vi /etc/haproxy/haproxy.cfg
注:此配置需要在每臺伺服器上做一下,裡面標紅的IP必須和該配置檔案所在的伺服器IP一致
2)在配置檔案中追加如下內容:
#---------------------------------------------------------------------
# RabbitMQ叢集負載均衡
#---------------------------------------------------------------------
# 1.HAProxy統計頁面配置
#通過訪問http://10.170.1.18:1080/haproxy/stats賬號密碼admin:admin檢視統計資訊
listen haproxy_front10.170.1.18:1080
mode http
stats refresh 30s
stats uri /haproxy/stats
stats realm Haproxy Manager
stats auth admin:admin
# 2.rabbitmq叢集負載均衡配置
#通過10.170.1.18:5678接入rabbitmq
listen rabbitmq_cluster10.170.1.18:5678
option tcplog
mode tcp
timeout client 3h
timeout server 3h
balance roundrobin
server node1 10.170.1.18:5672 check inter 5s rise 2 fall 3
server node2 10.170.1.16:5672 check inter 5s rise 2 fall 3
# 3.rabbitmq叢集web管理頁面均衡配置
#訪問http://10.170.1.18:15678/接入rabbitmq web管理頁面
listen rabbitmq_admin10.170.1.18:15678
balance roundrobin
server node1 10.170.1.18:15672
server node2 10.170.1.16:15672
5.4重啟HAproxy
service haproxy restart
然後網頁訪問http://10.170.1.23:15678
六.主備-Keepalived
6.1安裝Keepalived
yum install keepalived
6.2建立監控指令碼
指令碼路徑:vi /etc/keepalived/check_haproxy.sh
指令碼內容:
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi
6.1/6.2主備機都需要做
6.3修改主機Keepalived配置檔案
檔案路徑:vi /etc/keepalived/keepalived.conf(這個檔案先刪除,然後在新建即可)
檔案內容:
#Keepalived配置檔案
global_defs {
router_id NodeA #路由ID,主備的ID不能相同
}
#自定義監控指令碼
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 5
weight 2
}
vrrp_instance VI_1 {
state MASTER#Keepalived的角色。Master表示主伺服器,從伺服器設定為BACKUP
interface eth0 #指定監測網絡卡
virtual_router_id 1
priority 100 #優先順序,BACKUP機器上的優先順序要小於這個值
advert_int 1 #設定主備之間的檢查時間,單位為s
authentication { #定義驗證型別和密碼
auth_type PASS
auth_pass root123
}
track_script {
chk_haproxy
}
virtual_ipaddress { #虛擬地址(可以隨便設,主備保持一致即可),可以設定多個
192.1.170.180
}
}
6.4修配備機Keepalived配置檔案
檔案路徑:vi /etc/keepalived/keepalived.conf(這個檔案先刪除,然後在新建即可)
#Keepalived配置檔案
global_defs {
router_id NodeB #路由ID,主備的ID不能相同
}
#自定義監控指令碼
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 5
weight 2
}
vrrp_instance VI_1 {
state BACKUP#Keepalived的角色。Master表示主伺服器,從伺服器設定為BACKUP
interface eth0 #指定監測網絡卡
virtual_router_id 1
priority 50 #優先順序,BACKUP機器上的優先順序要小於這個值
advert_int 1 #設定主備之間的檢查時間,單位為s
authentication { #定義驗證型別和密碼
auth_type PASS
auth_pass root123
}
track_script {
chk_haproxy
}
virtual_ipaddress { #虛擬地址,可以設定多個
192.1.170.180
}
}
6.5啟動Keepalived
service keepalived start
6.6檢視Keepalived執行情況(可不看)
1)檢視Keepalived日誌輸出
tail -f /var/log/messages -n 200
2)檢視新增的虛擬IP
ip add show
3)MASTER模擬異常關閉
service keepalived stop
對應的MASTER上的虛擬IP也會消失
MASTER關閉後,BACKUP成為新的MASTER
6.7程式碼訪問RabbitMQ
1)IP 為Keepalived中配置的虛擬IP
2)PORT 為RabbitMQ的PORT 預設為5672
3)賬號密碼同RabbitMQ
七.執行在記憶體或者硬碟中
注意:叢集搭建完畢後,測試中是隻在備機上修改成功了,主機上修改不成功
在/usr/lib/rabbitmq/bin下執行,rabbitmq預設安裝在這裡
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
注:disc-硬碟,ram-記憶體
八、springboot連線rabbitMQ叢集配置
spring:
# 訊息佇列配置
rabbitmq:
host:192.1.170.180#虛擬地址
port:5672
username:****
password:****
listener:
simple:
acknowledge-mode:AUTO
參考連結
[ 1] http://www.rabbitmq.com/tutorials/tutorial-one-java.html
RabbitMQ佇列模式介紹
[2] https://www.cnblogs.com/xmzJava/p/8036591.html
Springboot Rabbitmq整合
[3] https://www.cnblogs.com/lylife/p/5584019.html
Rabbitmq+haproxy+keepalived實現高可用叢集搭建
[4] http://blog.csdn.net/woogeyu/article/details/51119101
RabbitMQ分散式叢集架構
[5] https://www.cnblogs.com/lion.net/p/5725474.html
RabbitMQ3.6.3叢集搭建+HAProxy1.6做負載均衡
[6 ] http://blog.csdn.net/u013256816/article/details/77171017
RabbitMQ負載均衡(3)——Keepalived+HAProxy實現高可用的負載均衡
[7] http://blog.csdn.net/u014308482/article/details/52947492
RabbitMQ常用命令