RocketMQ搭建
1. 普通集群搭建
-
打开RocketMQ的安装路径:/usr/local/apache-rocketmq-all-5.1.0-bin-release
-
cd bin(修改内存配置)
runbroker.sh文件
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m "
runserver.sh
JAVA_OPT=“${JAVA_OPT} -server -Xms256g -Xmx256g -Xmn128g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”
-
cd conf(进入存放配置文件的文件夹)
borker.conf配置文件,文件内容
brokerId = 0 -------------------- 0表示Master(主),>0表示slave(从)
deleteWhen = 04 ----------------- 删除文件时间点,默认是凌晨4点
fileReservedTime = 48 ----------- 文件保留时间,默认48小时
brokerRole = ASYNC_MASTER ------- Broker的角色:ASYNC_MASTER异步复制Master,SYNC_MASTER同步双写Master,SLAVE从节点
flushDiskType = ASYNC_FLUSH ----- 异步刷盘
autoCreateTopicEnable = true ---- 是否允许Broker自动创建Topic,建议线下开启,线上关闭
2m-2s-async: 两主两从异步配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L4iOE0jt-1679450027645)(G:\note\RocketMQ\images\1678238917634.jpg)]
broker-a.properties, broker-b.properties
brokerClusterName=DefaultCluster ----- 所属集群名字
brokerName=broker-a ------------------ borker的名称
brokerId=0 --------------------------- 0表示Master(主),>0表示slave(从)
deleteWhen=04 ------------------------ 删除文件时间点,默认是凌晨4点
fileReservedTime=48 ------------------ 文件保留时间,默认48小时
brokerRole=ASYNC_MASTER -------------- Broker的角色:ASYNC_MASTER异步复制Master,SYNC_MASTER同步双写Master,SLAVE从节点
flushDiskType=ASYNC_FLUSH ------------ 异步刷盘
broker-a-s.properties,broker-b-s.properties
brokerClusterName=DefaultCluster ----- 所属集群名字
brokerName=broker-a ------------------ borker的名称
brokerId=1 --------------------------- 0表示Master(主),>0表示slave(从)
deleteWhen=04 ------------------------ 删除文件时间点,默认是凌晨4点
fileReservedTime=48 ------------------ 文件保留时间,默认48小时
brokerRole=SLAVE -------------- Broker的角色:ASYNC_MASTER异步复制Master,SYNC_MASTER同步双写Master,SLAVE从节点
flushDiskType=ASYNC_FLUSH ------------ 异步刷盘
2m-2s-sync: 两主两从同步配置
2m-2s-sync文件夹内的文件同2m-2s-async的文件相同,文件内属性也是由:brokerClusterName,brokerName,brokerId,deleteWhen,fileReservedTime,brokerRole,flushDiskType这些属性,具体描述可以参考以上(两主两从异步配置)
2m-noslave: 两主无从配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZvDvW2Z-1679450027646)(G:\note\RocketMQ\images\20230308113928.png)]
2m-noslave文件夹中的文件:broker-a.properties,broker-b.properties和broker-trace.properties和2m-2s-async中的文件属性是一样的,也是由:brokerClusterName,brokerName,brokerId,deleteWhen,fileReservedTime,brokerRole,flushDiskType这些属性,具体描述可以参考以上(两主两从异步配置)
- 启动RocketMQ
先启动namesrv
输入: nohup sh mqnamesrv &
输入: jps 查看是否启动成功
再启动broker
输入: nohup sh mqbroker -c /usr/local/server/mq/rocketmq/conf/2m-2s-async/broker-a.properties
输入: jps 查看是否启动成功
- 关闭namesrv和broker
在/bin目录下边
sh mqshutdown namesrv
sh mqshutdown broker
jps 验证
2. 举例
-
环境准备
服务器:192.168.2.28 console(可视化界面,也可以配置在下边俩台中的任意一台服务器中) 服务器:192.168.2.32 nameserver broker-a broker-b-s 服务器:192.168.2.35 nameserver broker-b broker-a-s
-
集群搭建
-
第一台机器
修改broker-a.properties
namesrvAddr=192.168.2.32:8600;192.168.2.35:8600 #集群名称,主从要一样 brokerClusterName=ttparkCluster #broker名称,主从要一样,根据BrokerRole来确定谁是主谁是从 brokerName=broker-a #brokerID 0是主,>0是从 brokerId=0 #删除日志时间为凌晨4点 deleteWhen=04 #文件保留时间48小时 fileReservedTime=48 #主从关系,异步复制 brokerRole=ASYNC_MASTER #刷盘模式,异步刷盘 flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 #存储路径 storePathRootDir=/data/rocketmq-a/store #commitLog 存储路径 storePathCommitLog=/data/rocketmq-a/store/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/data/rocketmq-a/store/consumequeue #消息索引存储路径 storePathIndex=/data/rocketmq-a/store/index #checkpoint 文件存储路径 storeCheckpoint=/data/rocketmq-a/store/checkpoint #abort 文件存储路径 abortFile=/data/rocketmq-a/store/abort listenPort=10911
修改broker-b-s.properties
namesrvAddr=192.168.2.32:8600;192.168.2.35:8600 #集群名称,主从要一样 brokerClusterName=ttparkCluster #broker名称,主从要一样,根据BrokerRole来确定谁是主谁是从 brokerName=broker-b #brokerID 0是主,>0是从 brokerId=1 #删除日志时间为凌晨4点 deleteWhen=04 #文件保留时间48小时 fileReservedTime=48 #主从关系,异步复制 brokerRole=SLAVE #刷盘模式,异步刷盘 flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 #存储路径 storePathRootDir=/data/rocketmq-b/store #commitLog 存储路径 storePathCommitLog=/data/rocketmq-b/store/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/data/rocketmq-b/store/consumequeue #消息索引存储路径 storePathIndex=/data/rocketmq-b/store/index #checkpoint 文件存储路径 storeCheckpoint=/data/rocketmq-b/store/checkpoint #abort 文件存储路径 abortFile=/data/rocketmq-b/store/abort listenPort=10921
-
第二胎机器
修改broker-b.properties
namesrvAddr=192.168.2.32:8600;192.168.2.35:8600 #集群名称,主从要一样 brokerClusterName=ttparkCluster #broker名称,主从要一样,根据BrokerRole来确定谁是主谁是从 brokerName=broker-b #brokerID 0是主,>0是从 brokerId=0 #删除日志时间为凌晨4点 deleteWhen=04 #文件保留时间48小时 fileReservedTime=48 #主从关系,异步复制 brokerRole=ASYNC_MASTER #刷盘模式,异步刷盘 flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 #存储路径 storePathRootDir=/data/rocketmq-b/store #commitLog 存储路径 storePathCommitLog=/data/rocketmq-b/store/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/data/rocketmq-b/store/consumequeue #消息索引存储路径 storePathIndex=/data/rocketmq-b/store/index #checkpoint 文件存储路径 storeCheckpoint=/data/rocketmq-b/store/checkpoint #abort 文件存储路径 abortFile=/data/rocketmq-b/store/abort listenPort=10911
修改borker-a-s.properties
namesrvAddr=192.168.2.32:8600;192.168.2.35:8600 #集群名称,主从要一样 brokerClusterName=ttparkCluster #broker名称,主从要一样,根据BrokerRole来确定谁是主谁是从 brokerName=broker-a #brokerID 0是主,>0是从 brokerId=1 #删除日志时间为凌晨4点 deleteWhen=04 #文件保留时间48小时 fileReservedTime=48 #主从关系,异步复制 brokerRole=SLAVE #刷盘模式,异步刷盘 flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 #存储路径 storePathRootDir=/data/rocketmq-a/store #commitLog 存储路径 storePathCommitLog=/data/rocketmq-a/store/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/data/rocketmq-a/store/consumequeue #消息索引存储路径 storePathIndex=/data/rocketmq-a/store/index #checkpoint 文件存储路径 storeCheckpoint=/data/rocketmq-a/store/checkpoint #abort 文件存储路径 abortFile=/data/rocketmq-a/store/abort listenPort=10921
-
-
启动
-
创建commitLog,队列(consumequeue),日志(index)等存储路径
mkdir commitlog consumequeue index
-
启动第一台机器的nameserver
nohup sh bin/mqnamesrv -c conf/namesrv.properties &
-
启动第二台机器的nameserver
nohup sh bin/mqnamesrv -c conf/namesrv.properties &
-
启动broker-a
nohup bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
-
启动broker-b
nohup bin/mqbroker -c conf/2m-2s-async/broker-b.properties &
-
启动broker-a-s
nohup bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
-
启动broker-b-s
nohup bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &
-
-
查看集群的启动状况
./mqadmin clusterList -n 192.168.2.32:8600
#ClusterName #BrokerName #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE ttparkCluster broker-a 0 192.168.2.32:10911 V4_4_0 0.00(0,0ms) 0.00(0,0ms) 0 444721.04 0.1022 ttparkCluster broker-a 1 192.168.2.35:10921 V4_4_0 0.00(0,0ms) 0.00(0,0ms) 0 444721.04 0.0586 ttparkCluster broker-b 0 192.168.2.35:10911 V4_4_0 0.00(0,0ms) 0.00(0,0ms) 0 444721.04 0.0586 ttparkCluster broker-b 1 192.168.2.32:10921 V4_4_0
3. Docker搭建RocketMQ
3.1 Docker搭建单机
-
搜索镜像
docker search rocketmq
-
拉取(下载镜像) 镜像选用rocketmqinc/rocketmq
docker pull rocketmqinc/rocketmq
-
拉取rocketmq可视化图形界面
docker pull pangliang/rocketmq-console-ng
- 镜像拉取成功,可输入docker images查看
-
创建namesrv数据存储路径
mkdir -p /opt/docker/rocketmq/data/namesrv/log
mkdir -p /opt/docker/rocketmq/data/namesrv/store
-
创建namesrv容器
docker run -d --restart=always
–name rmqnamesrv
-p 9876:9876
-v /opt/docker/rocketmq/data/namesrv/logs:/root/logs
-v /opt/docker/rocketmq/data/namesrv/store:/root/store
-e “MAX_POSSIBLE_HEAP=100000000”
rocketmqinc/rocketmq
sh mqnamesrv
创建容器成功之后返回容器的ID
-
创建broker节点
- 创建broker数据存储路径
mkdir -p /opt/docker/rocketmq/data/broker/logs
mkdir -p /opt/docker/rocketmq/data/broker/store
mkdir -p /opt/docker/rocketmq/conf
- 在/opt/docker/rocketmq/conf目录下创建broker.conf文件,文件内容为:
# 所属集群名称,如果节点较多可以配置多个 brokerClusterName = DefaultCluster #broker名称,master和slave使用相同的名称,表明他们的主从关系 brokerName = broker-a #0表示Master,大于0表示不同的slave brokerId = 0 #表示几点做消息删除动作,默认是凌晨4点 deleteWhen = 04 #在磁盘上保留消息的时长,单位是小时 fileReservedTime = 48 #有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制; brokerRole = ASYNC_MASTER #刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要; flushDiskType = ASYNC_FLUSH # 设置broker节点所在服务器的ip地址 brokerIP1 = 192.168.52.136 # 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full diskMaxUsedSpaceRatio = 95
- 创建容器
docker run -d
–restart=always
–name rmqbroker
–link rmqnamesrv:namesrv
-p 10911:10911
-p 10909:10909
-v /opt/docker/rocketmq/data/broker/logs:/root/logs
-v /opt/docker/rocketmq/data/broker/store:/root/store
-v/opt/docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
-e “NAMESRV_ADDR=namesrv:9876”
-e “MAX_POSSIBLE_HEAP=200000000”
-e “autoCreateTopicEnable=true”
rocketmqinc/rocketmq
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
创建容器成功之后返回容器的ID
-
创建RocketMQ图形化界面服务容器
docker run -d
–restart=always
–name rmqadmin
-e “JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.85:9876
-Dcom.rocketmq.sendMessageWithVIPChannel=false”
-p 9999:8080
pangliang/rocketmq-console-ng
创建图形化界面服务容器成功,并返回容器ID
3.2 Docker搭建集群
- 搭建服务器要求: [采用交叉部署的方式,优点是从机上备份的数据不会丢]
服务器资源 | IP端口 |
---|---|
192.168.0.85 | broker-a(Master):10911;broker-b-s(Slave):10900;nameserver:9876 |
192.168.0.114 | broker-b(Master):10911;broker-a-s(Slave):10900;nameserver:9876 |
-
防火墙配置
# 关闭防火墙 systemctl stop firewalld.service # 查看防火墙的状态 firewall-cmd --state # 禁止firewall开机启动 systemctl disable firewalld.service
-
端口放行
#开放nameserver默认端口 firewall-cmd --remove-port=9876/tcp --permanent #开放master默认端口 firewall-cmd --remove-port=10911/tcp --permanent #开放slave默认端口 firewall-cmd --remove-port=11011/tcp --permanent #重启防火墙 firewall-cmd --reload
-
创建docker容器的映射目录
- 192.168.0.85服务器上配置 broker-a ,broker-b-s
mkdir -p /opt/docker/rocketmq/data/broker-a/conf mkdir -p /opt/docker/rocketmq/data/broker-a/logs mkdir -p /opt/docker/rocketmq/data/broker-a/store mkdir -p /opt/docker/rocketmq/data/broker-b-s/conf mkdir -p /opt/docker/rocketmq/data/broker-b-s/logs mkdir -p /opt/docker/rocketmq/data/broker-b-s/store
-
在/opt/docker/rocketmq/data/broker-a/conf下分创建:broker.conf,配置内容如下:
#集群名称 brokerClusterName=DefaultCluster #broker名称 brokerName=broker-a #brokerId master用0 slave用其他 brokerId=0 #清理时机 deleteWhen=4 #文件保留时长 48小时 fileReservedTime=48 #broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE brokerRole=SYNC_MASTER #刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH #主机ip brokerIP1=192.168.0.85 brokerIP2=192.168.0.85 #对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同 listenPort=10911 #是否能够自动创建topic autoCreateTopicEnable=true
-
在/opt/docker/rocketmq/data/broker-b-s/conf这个目录下创建broker.conf,配置内容如下
#集群名称 brokerClusterName=DefaultCluster #broker名称 brokerName=broker-b #brokerId master用0 slave用其他 brokerId=1 #清理时机 deleteWhen=4 #文件保留时长 48小时 fileReservedTime=48 #broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE brokerRole=SLAVE #刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH #主机ip brokerIP1=192.168.0.85 #对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同 listenPort=11911 #是否能够自动创建topic autoCreateTopicEnable=true
-
在/opt/docker/rocketmq/docker-compose.yml
version: "3" services: namesrv: image: rocketmqinc/rocketmq container_name: namesrv ports: - 9876:9876 environment: JAVA_OPT: -server -Xms256m -Xmx256m command: sh mqnamesrv broker-a: image: rocketmqinc/rocketmq container_name: broker-a ports: - 10911:10911 - 10909:10909 - 10912:10912 volumes: - /opt/docker/rocketmq/data/broker-a/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf - /opt/docker/rocketmq/data/broker-a/logs:/root/logs - /opt/docker/rocketmq/data/broker-a/store:/root/store environment: JAVA_OPT_EXT: -Duser.home=/opt/rocketmq-4.4.0 -Xms512M -Xmx512M -Xmn128m NAMESRV_ADDR: namesrv:9876 command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf depends_on: - namesrv broker-b-s: image: rocketmqinc/rocketmq container_name: broker-b-s ports: - 11911:11911 - 11909:11909 - 11912:11912 volumes: - /opt/docker/rocketmq/data/broker-b-s/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf - /opt/docker/rocketmq/data/broker-b-s/logs:/root/logs - /opt/docker/rocketmq/data/broker-b-s/store:/root/store environment: JAVA_OPT_EXT: -Duser.home=/opt/rocketmq-4.4.0 -Xms512M -Xmx512M -Xmn128m NAMESRV_ADDR: namesrv:9876 command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf depends_on: - namesrv console: image: pangliang/rocketmq-console-ng container_name: console ports: - 19876:8080 environment: JAVA_OPTS: -Drocketmq.namesrv.addr=namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=falses depends_on: - namesrv
-
一台一主一从的服务就配置好了
-
192.168.0.114服务器上配置 broker-b,broker-a-s
mkdir -p /opt/docker/rocketmq/data/broker-a-s/conf mkdir -p /opt/docker/rocketmq/data/broker-a-s/logs mkdir -p /opt/docker/rocketmq/data/broker-a-s/store mkdir -p /opt/docker/rocketmq/data/broker-b/conf mkdir -p /opt/docker/rocketmq/data/broker-b/logs mkdir -p /opt/docker/rocketmq/data/broker-b/store
-
在/opt/docker/rocketmq/data/broker-a-s/conf下分创建:broker.conf,配置内容如下:
#集群名称 brokerClusterName=DefaultCluster #broker名称 brokerName=broker-a #brokerId master用0 slave用其他 brokerId=1 #清理时机 deleteWhen=4 #文件保留时长 48小时 fileReservedTime=48 #broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE brokerRole=SLAVE #刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH #主机ip brokerIP1=192.168.0.114 #对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同 listenPort=11911 #是否能够自动创建topic autoCreateTopicEnable=true
-
在/opt/docker/rocketmq/data/broker-b/conf这个目录下创建broker.conf,配置内容如下
#集群名称 brokerClusterName=DefaultCluster #broker名称 brokerName=broker-b #brokerId master用0 slave用其他 brokerId=0 #清理时机 deleteWhen=4 #文件保留时长 48小时 fileReservedTime=48 #broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE brokerRole=SYNC_MASTER #刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH #主机ip brokerIP1=192.168.0.114 brokerIP2=192.168.0.114 #对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同 listenPort=10911 #是否能够自动创建topic autoCreateTopicEnable=true
-
在/opt/docker/rocketmq/docker-compose.yml
version: "3" services: broker-b: image: rocketmqinc/rocketmq container_name: broker-b ports: - 10911:10911 - 10909:10909 - 10912:10912 volumes: - /opt/docker/rocketmq/data/broker-b/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf - /opt/docker/rocketmq/data/broker-b/logs:/root/logs - /opt/docker/rocketmq/data/broker-b/store:/root/store environment: JAVA_OPT_EXT: -Duser.home=/opt/rocketmq-4.4.0 -Xms512M -Xmx512M -Xmn128m NAMESRV_ADDR: 192.168.0.85:9876 command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf broker-a-s: image: rocketmqinc/rocketmq container_name: broker-a-s ports: - 11911:11911 - 11909:11909 - 11912:11912 volumes: - /opt/docker/rocketmq/data/broker-a-s/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf - /opt/docker/rocketmq/data/broker-a-s/logs:/root/logs - /opt/docker/rocketmq/data/broker-a-s/store:/root/store environment: JAVA_OPT_EXT: -Duser.home=/opt/rocketmq-4.4.0 -Xms512M -Xmx512M -Xmn128m NAMESRV_ADDR: 192.168.0.85:9876 command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
-
到目前为止,在服务器上192.168.0.85,192.168.0.114两台服务器上两主两从,已部署完毕
-
_name: broker-a-s
ports:
- 11911:11911
- 11909:11909
- 11912:11912
volumes:
- /opt/docker/rocketmq/data/broker-a-s/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
- /opt/docker/rocketmq/data/broker-a-s/logs:/root/logs
- /opt/docker/rocketmq/data/broker-a-s/store:/root/store
environment:
JAVA_OPT_EXT: -Duser.home=/opt/rocketmq-4.4.0 -Xms512M -Xmx512M -Xmn128m
NAMESRV_ADDR: 192.168.0.85:9876
command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
```
-
到目前为止,在服务器上192.168.0.85,192.168.0.114两台服务器上两主两从,已部署完毕
[外链图片转存中…(img-phXN6XfB-1679450027651)]