rabbitmq 鏡像集羣搭建

一、背景

二、步驟

1.找兩臺linux機器,可以是物理機,也可以是虛擬機,只要保證有網絡,彼此能互通即可。此處選取兩臺虛擬機,ip爲192.168.137.249和192.168.137.172.
2.安裝epel源。兩臺機器分別安裝。
yum install epel-release -y
3.安裝erlang。erlang是rabbitmq的依賴包,兩臺機器分別安裝。
yum install erlang -y
4.分別安裝rabbitMq。兩臺機器分別安裝。此處也可選擇自己想要的版本,詳情可百度查找rabbitmq官網。
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.0/rabbitmq-server-3.5.0-1.noarch.rpm
yum localinstall rabbitmq-server-3.5.0-1.noarch.rpm -y
5.分別添加開機啓動。
 chkconfig rabbitmq-server on
6.分別啓動rabbitmq。
systemctl start rabbitmq-server

##查看狀態
systemctl status rabbitmq-server
7.分別開啓web管理界面
rabbitmq-plugins enable rabbitmq_management
8.修改配置文件。
cp /usr/share/doc/rabbitmq-server-3.5.0/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

##{loopback_users, []} 刪除前面的註釋%%,同時注意後面的逗號,只有一個配置項的時候,請刪除後面的逗號。

在這裏插入圖片描述

9.rabbitmq 默認用戶爲guest,要添加其他的管理賬戶。此處建rabbitmq集羣,只要在一臺主機(rabbit主)上設置即可,其他會自動同步。
rabbitmqctl add_user xxx xxx
rabbitmqctl set_user_tags xxx administrator
rabbitmqctl set_permissions -p / xxx ".*" ".*" ".*"

##重啓rabbitmq
systemctl restart rabbitmq-server
10.瀏覽器訪問rabbitmq-server, http://ip:15672
11.設置每個節點Cookie。將rabbitmq主節點上的.erlang.cookie拷貝到從上。必須保證各節點cookie保持一致,否則節點之間就無法通信。
#從
chmod 777 /var/lib/rabbitmq/.erlang.cookie

#拷貝
scp -p /var/lib/rabbitmq/.erlang.cookie root@xxxx:/var/lib/rabbitmq/

#恢復從權限
chmod 600 /var/lib/rabbitmq/.erlang.cookie

##停止所有節點rabbitmq,用detached參數獨立運行,這步很關鍵,尤其增加節點停止節點後再次啓動遇到無法啓動都可以參照這個順序。
##主節點
systemctl stop rabbitmq-server
##從節點
systemctl stop rabbitmq-server

##主節點
rabbitmq-server -detached
##從節點
rabbitmq-server -detached
##這步報錯的話,請檢查rabbitmq進程是否正常退出,未正常退出,用ps -ef|grep rabbitmq|grep -v grep|awk -F ' ' '{print $2}'|xargs kill -9 刪除進程

##分別查看下每個節點
rabbitmqctl cluster_status

##將從節點作爲內存節點與主節點連接起來,在從節點上執行如下命令:
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@xxx
rabbitmqctl start_app

##主節點如果要使從節點在集羣裏也是磁盤節點,join_cluster 命令去掉--ram參數即可

##查看各節點狀態
rabbitmqctl cluster_status

在這裏插入圖片描述

12.添加鏡像模式配置。上面配置RabbitMQ默認集羣模式,但並不保證隊列的高可用性,儘管交換機、綁定這些可以複製到集羣裏的任何一個節點,但是隊列內容不會複製,雖然該模式解決一部分節點壓力,但隊列節點宕機直接導致該隊列無法使用,只能等待重啓,所以要想在隊列節點宕機或故障也能正常使用,就要複製隊列內容到集羣裏的每個節點,需要創建鏡像隊列。
##安裝haproxy,在除了以上兩個主從節點外完成
yum install -y haproxy

##修改配置/etc/haproxy/haproxy.cfg
##刪除 main frontend which proxys to the backends以下的所有內容,並添加
listen rabbitmq_cluster 0.0.0.0:5672
   mode tcp
   balance roundrobin
   server   rqslave1 114.55.29.241:5672 check inter 2000 rise 2 fall 3
   server   rqmaster 114.55.29.86:5672 check inter 2000 rise 2 fall 3

##如果有3臺或3臺以上,可以把disc節點註釋掉,原因就是讓rabbitmq性能最佳化。這樣負載均衡器會監聽5672端口,輪詢多個內存節點的5672端口,磁盤節點可以只做備份不提供給生產者、消費者使用,當然如果我們服務器資源充足情況也可以配置多個磁盤節點.

##此外,還需要修改defaults段配置

在這裏插入圖片描述

##檢查配置文件語法
haproxy -c -f /etc/haproxy/haproxy.cfg

##啓動haproxy
systemctl start haproxy 

##查看狀態
systemctl status haproxy

##若haproxy啓動失敗,開啓允許綁定非本機的IP
vi /etc/sysctl.conf
#新增net.ipv4.ip_nonlocal_bind=1

##生效
sysctl -p

##重新啓動
systemctl start haproxy 

##查看狀態
systemctl status haproxy

##配置策略:設置ha模式。使用Rabbit鏡像功能,需要基於rabbitmq策略來實現,政策是用來控制和修改羣集範圍的某個vhost隊列行爲和Exchange行爲。 其中ha-mode有三種模式:all: 同步至所有的;exactly: 同步最多N個機器. 當現有集羣機器數小於N時,同步所有,大於等於N時則不進行同步. N需要額外通過ha-params來指定;nodes: 只同步至符合指定名稱的nodes. N需要額外通過ha-params來指定。

##主節點執行
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
13.以上rabbitmq鏡像集羣搭建已結束。能看到ha-all的說明用我的ha-all策略啦,屬於鏡像模式,沒有表示的就是普通模式。

在這裏插入圖片描述

14.集羣退出。
##從節點
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

##主節點
rabbitmqctl forget_cluster_node rabbit@xxx

三、問題總結

搭建過程出現的問題,已寫在過程中,請仔細觀看。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章