天天看點

linux安裝rabbitmq離線版(含單機部署和叢集部署)

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包下載下傳位址如下:

  1. rabbitMq:https://github.com/rabbitmq/rabbitmq-server/releases/
  2. erlang:https://github.com/rabbitmq/erlang-rpm/releases
  3. 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通,如下圖:

linux安裝rabbitmq離線版(含單機部署和叢集部署)
linux安裝rabbitmq離線版(含單機部署和叢集部署)

【注意】如果無法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
           
linux安裝rabbitmq離線版(含單機部署和叢集部署)

從上面的結果{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主機上檢視叢集狀态如下:

linux安裝rabbitmq離線版(含單機部署和叢集部署)

【注意】如果在添加叢集節點的時候報錯,可能的原因如下:

  1. 防火牆問題,端口被攔截,需關閉防火牆或者開放相應端口
  2. hosts檔案未修改或者不正确,需檢查/etc/hosts檔案
  3. cookie檔案不一緻,需保證兩台主機的.erlang.cookie檔案的值一緻
  4. 叢集名稱錯誤,導緻叢集添加節點失敗;通過rabbitmqctl cluster_status指令得到的cluster_name為[email protected],而實際的主機名稱為mem-100,此時的叢集名稱應該為[email protected],而不是[email protected]
  5. 如果仍然不能成功,請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管理界面顯示如下

linux安裝rabbitmq離線版(含單機部署和叢集部署)