RabbitMQ集群安裝
1.前言
OS: CentOS Linux release 7.9.2009 (Core)
機器:
IP | node | cpu | 內(nèi)存 | 存儲 |
---|---|---|---|---|
10.106.1.241 | max-rabbitmg-01 | 8 核 | 16 G | 100 G |
10.106.1.242 | max-rabbitmg-02 | 8 核 | 16 G | 100 G |
10.106.1.243 | max-rabbitmg-03 | 8 核 | 16 G | 100 G |
因為操作系統(tǒng)版本是 centos7,所以RabbitMQ安裝版本,選的是最后一個支持RHEL7的版本。
在安裝RabbitMQ之前,需要安裝Erlang/OTP支持的版本。RabbitMQ是實現(xiàn)了高級消息隊列協(xié)議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務(wù)器是用Erlang語言編寫的。
再確定要下載的RabbitMQ的版本號之后,訪問網(wǎng)址選擇Erlang版本查看匹配對應(yīng)Erlang的版本號,并進行下載。
本次下載RabbitMQ版本為3.10.0-1對應(yīng)的Erlang版本為23.3.4.11-1
RabbitMQ: 3.10.0-1
Erlang: 23.3.4.11-1
2.準備
注意,以下操作,分別在3臺機器上執(zhí)行
配置hosts:
cat << \EOF >> /etc/hosts
10.106.1.241 max-rabbitmq-01
10.106.1.242 max-rabbitmq-02
10.106.1.243 max-rabbitmq-03
EOF
查看hosts配置是否正確:
ping max-rabbitmq-01
ping max-rabbitmq-02
ping max-rabbitmq-03
關(guān)閉selinux:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
關(guān)閉防火墻:
systemctl stop firewalld
systemctl disable firewalld
安裝存儲庫:
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | bash
下載rpm安裝包:
wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm/download.rpm?distro_version_id=205
wget --content-disposition https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm/download.rpm?distro_version_id=205
3.安裝
注意,以下操作,分別在3臺機器上執(zhí)行
安裝:
yum install -y erlang-23.3.4.11-1.el7.x86_64.rpm
yum install -y rabbitmq-server-3.10.0-1.el7.noarch.rpm
啟動服務(wù)、并設(shè)置開機服務(wù):
systemctl start rabbitmq-server
systemctl enable rabbitmq-server
其它服務(wù)命令:
# 啟動
systemctl start rabbitmq-server
# 查看狀態(tài)
systemctl status rabbitmq-server
# 停止
systemctl stop rabbitmq-server stop
4.端口授權(quán)
RabbitMQ節(jié)點綁定到端口(開放服務(wù)器TCP套接字)以接受客戶端和CLI工具連接。
其他進程和工具(如SELinux)可能會阻止RabbitMQ綁定端口。
當發(fā)生這種情況時,節(jié)點將無法啟動。
CLI工具、客戶端庫和RabbitMQ節(jié)點也可以打開連接(客戶端TCP套接字)。
防火墻可以阻止節(jié)點和CLI工具之間的通信。
為了確保以下端口可訪問,請單獨端口開啟授權(quán),請直接關(guān)閉防火墻。
這里推薦直接關(guān)閉防火墻
4369: epmd, RabbitMQ節(jié)點和CLI工具使用的對等體發(fā)現(xiàn)服務(wù)
5672, 5671:用于AMQP 0-9-1和1.0客戶端,無論是否使用TLS
25672:用于節(jié)點間和CLI工具通信(Erlang分發(fā)服務(wù)器端口),動態(tài)范圍分配(默認限制為單個端口,計算為AMQP端口+ 20000)。除非這些端口上的外部連接確實是必要的(例如集群使用聯(lián)合或在子網(wǎng)外的機器上使用CLI工具),否則這些端口不應(yīng)該公開。具體請參見組網(wǎng)指南。
35672-35682: CLI工具(Erlang分發(fā)客戶端端口)用于與節(jié)點通信,按動態(tài)范圍(服務(wù)器分發(fā)端口+ 10000 ~服務(wù)器分發(fā)端口+ 10010計算)分配。具體請參見組網(wǎng)指南。
15672: HTTP API客戶端,管理UI和rabbitmqadmin(只有啟用了管理插件)
61613,61614: STOMP客戶端不帶TLS或帶TLS(僅當啟用STOMP插件時)
1883、8883:MQTT客戶端,如果啟用了MQTT插件,則不使用TLS或使用TLS
15674: STOMP-over- websockets客戶端(僅當Web STOMP插件啟用時)
15675: MQTT-over- websockets客戶端(僅當啟用Web MQTT插件時)
15692: Prometheus metrics(僅當Prometheus插件啟用時)
5.開啟遠程登錄
注意,以下操作,分別在3臺機器上執(zhí)行
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_mqtt
6.添加用戶及權(quán)限
注意,以下操作,分別在3臺機器上執(zhí)行
添加RabbitMQ用戶及權(quán)限:
rabbitmqctl add_user admin 你RabbitMQ的密碼
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
執(zhí)行rabbitmqctl add_user
時,出現(xiàn) Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
這段是提醒記得設(shè)置權(quán)限。
執(zhí)行完創(chuàng)建用戶及授權(quán)命令后,可以試下賬號是否能登錄:
http://10.106.1.241:15672
http://10.106.1.242:15672
http://10.106.1.243:15672
7.默認集群配置
在max-rabbitmq-02、max-rabbitmq-03節(jié)點執(zhí)行停RabbitMQ服務(wù)的命令:
systemctl stop rabbitmq-server
后面的集群配置,為了確保計算機中erlang.cookie文件是一致的,執(zhí)行以下腳本scp命令。
拷貝.erlang.cookie到max-rabbitmq-02、max-rabbitmq-03節(jié)點:
scp /var/lib/rabbitmq/.erlang.cookie root@max-rabbitmq-02:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@max-rabbitmq-03:/var/lib/rabbitmq/.erlang.cookie
重啟max-rabbitmq-02、max-rabbitmq-03的RabbitMQ服務(wù):
systemctl start rabbitmq-server
max-rabbitmq-02加入集群:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@max-rabbitmq-01
rabbitmqctl start_app
rabbitmqctl cluster_status
max-rabbitmq-03加入集群:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@max-rabbitmq-01
rabbitmqctl start_app
rabbitmqctl cluster_status
登錄http://10.106.1.241:15672查看集群狀態(tài)
正常情況如下圖:
8.安裝插件
安裝延遲消息隊列插件
插件下載地址:rabbitmq_delayed_message_exchange-3.10.0.ez
請注意插件的版本號,這里下載的是與之相對應(yīng)的版本。
查看插件存放目錄:
rabbitmq-plugins directories -s
執(zhí)行查看存放目錄后,顯示如下
Plugin archives directory: /usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-3.10.0/plugins
Plugin expansion directory: /var/lib/rabbitmq/mnesia/rabbit@max-rabbitmq-01-plugins-expand
Enabled plugins file: /etc/rabbitmq/enabled_plugins
將rabbitmq_delayed_message_exchange-3.10.0.ez
下載至/usr/lib/rabbitmq/lib/rabbitmq_server-3.10.0/plugins
目錄下。
執(zhí)行安裝命令:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
3臺rabbitmq分別重啟服務(wù):
systemctl restart rabbitmq-server
查看插件安裝是否成功:
9.鏡像集群配置
為什么要配置鏡像集群?因為默認集群無法達到高可用的效果。
- 默認模式:
即普通模式,默認模式,以兩個節(jié)點(rabbit01,rabbit02)為例來進行說明,對于Queue來說,消息實體只存在于其中一個節(jié)點rabbit01(或者rabbit02),rabbit01和rabbit02兩個節(jié)點僅有相同的元數(shù)據(jù),即隊列結(jié)構(gòu)。當消息進入rabbit01節(jié)點的Queue后,consumer從rabbit02節(jié)點消費時,RabbitMQ會臨時在rabbit01,rabbit02間進行消息傳輸,把A中的消息實體取出并經(jīng)過B發(fā)送給consumer,所以consumer應(yīng)盡量連接每一個節(jié)點,從中取消息。即對于同一個邏輯隊列,要在多個節(jié)點建立物理Queue。否則無論consumer連rabbit01或rabbit02,出口總在rabbit01,會產(chǎn)生瓶頸。當rabbit01節(jié)點故障后,rabbit02節(jié)點無法取到rabbit01節(jié)點中還未消費的消息實體。如果做了消息持久化,那么等到rabbit01節(jié)點恢復(fù),然后才可被消費。如果沒有消息持久化,就會產(chǎn)生消息丟失的現(xiàn)象。
- 鏡像模式:
把需要的隊列做成鏡像隊列,存在與多個節(jié)點屬于RabibitMQ的HA方案,該模式解決了普通模式中的問題,其實質(zhì)和普通模式不同之處在于,消息體會主動在鏡像節(jié)點間同步,而不是在客戶端取數(shù)據(jù)時臨時拉取,該模式帶來的副作用也很明顯,除了降低系統(tǒng)性能外,如果鏡像隊列數(shù)量過多,加之大量的消息進入,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會被這種同步通訊大大消耗掉,所以在對可靠性要求比較高的場合中適用。
配置鏡像集群:
鏡像模式要依賴policy模塊,policy中文來說是政策,策略的意思,那么他就是要設(shè)置,那些Exchanges或者queue的數(shù)據(jù)需要復(fù)制,同步,如何復(fù)制同步?對就是做這些的。
- 進入Policies配置頁面:
通過Web控制臺操作,隨便找一臺節(jié)點服務(wù),這里以max-rabbitmq-01節(jié)點為例,按下圖中標記出的數(shù)字先后順序,點擊進入Policies配置頁面。
-
Policies配置頁面介紹:
參數(shù)解釋:
name: 策略名稱,自定義命名;
Pattern: 匹配符,只有一個代表匹配所有,test為匹配名稱為test的exchanges或者queue;
***Apply to:***使用對象,使用Exchanges and queues;
Priority:配置了多個策略時候的優(yōu)先級,值越大,優(yōu)先級越高。(單個策略配置意義不大),注意:沒有指定優(yōu)先級的消息會將優(yōu)先級以0對待,即沒有配置Priority時默認為0。 對于超過優(yōu)先級隊列所定最大優(yōu)先級的消息,優(yōu)先級以最大優(yōu)先級對待;
Definition: 匹配類型,他分為3種模式:all-所有(所有的queue),exctly-部分(需配置ha-params參數(shù),此參數(shù)為int類型比如3,眾多集群中的隨機3臺機器),nodes-指定(需配置ha-params參數(shù),此參數(shù)為數(shù)組類型比如[“3rabbit@F”,“rabbit@G”]這樣指定為F與G這2臺機器。)文章來源:http://www.zghlxwxcb.cn/news/detail-451043.html
-
查驗鏡像集群是否生效:
查看Queues,會發(fā)現(xiàn)在Node字段中,默認指向了Master,當Master故障后,會切換至新選擇產(chǎn)生的Maseter,可自行測試驗證,比如將max-rabbitmq-01服務(wù)停掉,再來看此處的Node字段,是不是指向了新的節(jié)點上。
此至,鏡像集群配置已經(jīng)完成。
10.引用Reference
CentOS8搭建nfs服務(wù)
Kubernetes 1.25.4版本安裝
kubeasz安裝kubernetes1.25.5
k8s一鍵安裝redis單機版
k8s一鍵安裝mysql8單機版
k8s部署springboot應(yīng)用
Docker安裝及學(xué)習
Docker制作springboot運行應(yīng)用鏡像
Docker制作Java8環(huán)境鏡像
Docker安裝Mysql5.7.31
Docker安裝Mysql8.1.0
Elasticsearch單機版本安裝
Elasticsearch集群安裝
ELK安裝
Docker安裝ELK
zookeeper集群安裝
Nginx日志切割
RabbitMQ集群安裝
springboot集成prometheus+grafana
windows11安裝android應(yīng)用文章來源地址http://www.zghlxwxcb.cn/news/detail-451043.html
到了這里,關(guān)于RabbitMQ集群安裝的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!