rabbitMq離線部署文檔
1.環境說明
對于linux系統版本、rabbitMq及相關依賴版本如下:
名稱 | 版本要求 |
---|---|
centos系統 | 7.0以上 |
rabbitmq | 3.7.7~3.7.14 |
erlang | 20.3.x~21.3.x |
socat | 1.7.3.x |
rabbitMq及相關依賴的rpm包下載下傳位址如下:
- rabbitMq:https://github.com/rabbitmq/rabbitmq-server/releases/
- erlang:https://github.com/rabbitmq/erlang-rpm/releases
- socat:https://pkgs.org/download/socat
該部署文檔使用的版本如下:
rabbitMq:3.7.9
erlang:21.3.6
socat:1.7.3.2
2.單機版部署
2.1上傳rpm包并安裝
将rpm包上傳至$HOME目錄,按照順序分别執行以下指令
#安裝erlang依賴
rpm -ivh erlang-21.3.6-1.el7.x86_64.rpm
#安裝socat依賴
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
#安裝rabbitmq
rpm -ivh rabbitmq-server-3.7.9-1.el7.noarch.rpm
【注意】:部分伺服器在執行第一個rpm的時候可能會出現error:Failed dependencies:libcrypto.so.10() …的錯誤,解決方法如下三種,
1.更新openssl,安裝離線檔案中的openssl-libs-1.0.2k-19.el7.x86_64.rpm包,然後重新安裝上面報錯的rpm包即可,執行指令如下
rpm -ivh openssl-libs-1.0.2k-19.el7.x86_64.rpm --force
2.安裝rpm包的時候添加–force(強制)和–nodeps(不查找依賴關系)參數即可,如下
rpm -ivh erlang-21.3.6-1.el7.x86_64.rpm --force --nodeps
3.使用yum安裝libcrypto*後,再重新安裝rpm包指令如下
yum install libcrypto*
2.2 rabbitMq服務的啟停
#檢視狀态
systemctl status rabbitmq-server
#啟動服務
systemctl start rabbitmq-server
#停止服務
systemctl stop rabbitmq-server
#重新開機服務
systemctl restart rabbitmq-server
#添加開機啟動RabbitMQ服務
chkconfig rabbitmq-server on
2.3 開啟web管理接口
RabbitMQ自帶了web管理界面,隻需要啟動插件便可以使用,指令如下:
rabbitmq-plugins enable rabbitmq_management
然後通過浏覽器通路 http://localhost:15672 (預設使用者:guest,密碼:guest)
2.4 使用者管理
由于RabbitMQ預設的賬号使用者名和密碼都是guest。為了安全起見,我們需要删掉預設使用者,并添加新使用者,此處使用者名、密碼以【admin、admin123】為例,指令如下:
# 1.删除guest使用者
rabbitmqctl delete_user guest
# 2.添加admin使用者
rabbitmqctl add_user admin admin123
# 3.将admin添加至administrator
rabbitmqctl set_user_tags robot administrator
# 4.賦予使用者預設vhost的全部操作權限
rabbitmqctl set_permissions -p / robot ".*" ".*" ".*"
# 5.檢視目前所有使用者
rabbitmqctl list_users
# 6.檢視admin使用者的權限
rabbitmqctl list_user_permissions admin
2.5 修改端口(可跳過)
rabbitmq服務的主程式使用的預設端口為5672,如果有需要修改,則按如下步驟操作
查找配置檔案位置:
find / -name rabbitmq.config*
# /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example
拷貝配置檔案到
/etc/rabbitmq
目錄下:
cp /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
修改配置檔案:
#修改控制台端口号
{rabbitmq_management, [{listener, [{port, 8888}]}]}
#修改mq服務端口号
{rabbit, [{tcp_listeners, [5673]}]}
3.叢集版部署
3.1 簡介
RabbitMQ的Cluster叢集模式一般分為兩種,普通模式和鏡像模式。消息隊列通過rabbitmq HA鏡像隊列進行消息隊列實體複制。
普通模式下,以兩個節點(rabbit01、rabbit02)為例來進行說明。對于Queue來說,消息實體隻存在于其中一個節點rabbit01(或者rabbit02),rabbit01和rabbit02兩個節點僅有相同的中繼資料,即隊列的結構。當消息進入rabbit01節點的Queue後,consumer從rabbit02節點消費時,RabbitMQ會臨時在rabbit01、rabbit02間進行消息傳輸,把A中的消息實體取出并經過B發送給consumer。是以consumer應盡量連接配接每一個節點,從中取消息。即對于同一個邏輯隊列,要在多個節點建立實體Queue。否則無論consumer連rabbit01或rabbit02,出口總在rabbit01,會産生瓶頸。
鏡像模式下,将需要消費的隊列變為鏡像隊列,存在于多個節點,這樣就可以實作RabbitMQ的HA高可用性。作用就是消息實體會主動在鏡像節點之間實作同步,而不是像普通模式那樣,在consumer消費資料時臨時讀取。缺點就是,叢集内部的同步通訊會占用大量的網絡帶寬。
3.2 部署方案
3.2.1 部署規劃
準備至少兩台機器,我這裡分别為:192.168.24.100,192.168.24.101,設定主機名分别為:mem-100,mem-101。
【注意】如果主機名為localhost,請修改主機名,指令如下
hostnamectl set-hostname mem-100
3.2.2 配置hosts檔案
配置hosts檔案内容(兩台台機器上都需要配置,内容一樣就可以,前面是IP,後面是各個主機的主機名)
指令:
vi /etc/hosts
在hosts檔案末尾添加一下内容:
192.168.24.100 mem-100
192.168.24.101 mem-101
修改完成後保證兩台主機能夠互相ping通,如下圖:
【注意】如果無法ping通,請確定兩台伺服器防火牆關閉,指令如下
systemctl stop firewalld
3.2.3 安裝和啟動
兩台伺服器分别安裝rabbitmq并啟動,具體可參考單機部署
#啟動服務
systemctl start rabbitmq-server
#啟用web插件
rabbitmq-plugins enable rabbitmq_management
3.2.4 建立使用者(僅在主節點執行)
請在主節點主機上添加使用者,參考2.4部分内容
3.2.5 拷貝cookie檔案,并重新開機子節點
Rabbitmq的叢集是依附于erlang的叢集來工作的,是以必須先建構起erlang的叢集景象。Erlang的叢集中各節點是經由過程一個magic cookie來實作的,這個cookie存放在$HOME中或者在/var/lib/rabbitmq/.erlang.cookie中,檔案是400的權限。是以必須保證各節點cookie一緻,不然節點之間就無法通信。(此處的cookie存放在/var/lib/rabbitmq/.erlang.cookie中)
此處将mem-100設為主節點,使用scp的方式将mem-100節點的.erlang.cookie的值複制到mem-101節點中,指令如下:
scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/.erlang.cookie
檢視.erlang.cookie中的值,保證mem-100和mem-101的cookie值一樣,指令如下:
cat /var/lib/rabbitmq/.erlang.cookie
重新開機子節點的rabbitmq,使新的.erlang.cookie生效
#重新開機服務
systemctl restart rabbitmq-server
3.2.6 檢視叢集狀态
此處已mem-100作為主節點,在主節點mem-100伺服器上檢視叢集狀态,指令:
rabbitmqctl cluster_status
從上面的結果{cluster_name,<<“[email protected]”>>},可以看出來,叢集的名稱叫[email protected]
3.2.7 添加叢集節點
在子節點mem-101主機上做如下操作,将該節點添加到叢集([email protected])中,指令:
# 1.rabbitmqctl stop是停止應用和叢集節點,rabbitmqctl stop_app是隻停應用,不停叢集節點
rabbitmqctl stop_app
rabbitmqctl reset
# 2.添加叢集節點
rabbitmqctl join_cluster [email protected]
# 3.再啟動應用
rabbitmqctl start_app
此時在主節點mem-100主機上檢視叢集狀态如下:
【注意】如果在添加叢集節點的時候報錯,可能的原因如下:
- 防火牆問題,端口被攔截,需關閉防火牆或者開放相應端口
- hosts檔案未修改或者不正确,需檢查/etc/hosts檔案
- cookie檔案不一緻,需保證兩台主機的.erlang.cookie檔案的值一緻
- 叢集名稱錯誤,導緻叢集添加節點失敗;通過rabbitmqctl cluster_status指令得到的cluster_name為[email protected],而實際的主機名稱為mem-100,此時的叢集名稱應該為[email protected],而不是[email protected]
- 如果仍然不能成功,請kill掉子節點主機的rabbitmq的服務,删除/var/lib/rabbitmq/目錄下的mnesia目錄所有内容,然後再啟動rabbitmq,執行添加節點操作
3.2.8 啟用鏡像模式,實作高可用叢集
在主節點mem-100主機上執行指令:
參數意思為:
ha-all:為政策名稱。
:為比對符,隻有一個代表比對所有,^zlh為比對名稱為zlh的exchanges或者queue。
ha-mode:為比對類型,他分為3種模式:all-所有(所有的queue),exctly-部分(需配置ha-params參數,此參數為int類型比如3,衆多叢集中的随機3台機器),nodes-指定(需配置ha-params參數,此參數為數組類型比如[“[email protected]”,“[email protected]”]這樣指定為mem-100與mem-101這2台機器。)。
web管理界面顯示如下