容器化部署RocketMQ5.3.1集群
背景: 生產環境單機的MQ不具有高可用,所以我們應該部署成集群模式,這里給大家部署一個雙主雙從異步復制的Broker集群
一、安裝docker
yum install -y docker
systemctl enable docker --now
# 單機部署參考:
https://www.cnblogs.com/hsyw/p/17429834.html
二、集群部署
2.1、基礎概念介紹
單節點 :
優點:本地開發測試,配置簡單,同步刷盤消息一條都不會丟
缺點:不可靠,如果宕機,會導致服務不可用
主從(異步、同步雙寫) :
優點:同步雙寫消息不丟失, 異步復制存在少量丟失 ,主節點宕機,從節點可以對外提供消息的消費,但是不支持寫入
缺點:主備有短暫消息延遲,毫秒級,目前不支持自動切換,需要腳本或者其他程序進行檢測然后進行停止broker,
重啟讓從節點成為主節點
雙主:
優點:配置簡單, 可以靠配置RAID磁盤陣列保證消息可靠,異步刷盤丟失少量消息
缺點: master機器宕機期間,未被消費的消息在機器恢復之前不可消費,實時性會受到影響
雙主雙從,多主多從模式(異步復制)我們這里采用這種
優點:磁盤損壞,消息丟失的非常少,消息實時性不會受影響,Master 宕機后,消費者仍然可以從Slave消費
缺點:主備有短暫消息延遲,毫秒級,如果Master宕機,磁盤損壞情況,會丟失少量消息
雙主雙從,多主多從模式(同步雙寫)
優點:同步雙寫方式,主備都寫成功,向應用才返回成功,服務可用性與數據可用性都非常高
缺點:性能比異步復制模式略低,主宕機后,備機不能自動切換為主機
概念
rocketmq分為Name Server和Broker Server
名字服務(Name Server)
名稱服務充當路由消息的提供者。生產者或消費者能夠通過名字服務查找各主題相應的Broker IP列表。多個Namesrv實例組成集群,但相互獨立,沒有信息交換。
是Topic路由注冊中心,端口默認為9876
代理服務器(Broker Server)
消息中轉角色,負責存儲消息、轉發消息。代理服務器在RocketMQ系統中負責接收從生產者發送來的消息并存儲、同時為消費者的拉取請求作準備。代理服務器也存儲消息相關的元數據,包括消費者組、消費進度偏移和主題和隊列消息等。
端口有三個
listenPort:默認10911,接受客戶端連接的監聽端口,作為對producer和consumer使用服務的端口號,可以通過配置文件改
haListenPort:默認為listenPort + 1,高可用服務監聽端口,主要用于slave同master同步
fastListenPort:默認為listenPort -2, 主要是fastRemotingServer服務使用,用于VIP通道
2.2、集群規劃、部署
雙主雙從異步復制的Broker集群
集群角色劃分如下
主機名 IP 功能 集群角色
node1 10.7.8.73 NameServer+Broker Master01+Slave02
node2 10.7.215.96 NameServer+Broker Master02+Slave01
2.2.1、部署rmqnamesrv
兩臺的rmqnamesrv節點都直接運行即可【10.7.8.73、10.7.215.96】
mkdir -p /rocketmq/r