集群(3主三从)"/>
基于docker容器搭建rocketmq集群(3主三从)
基于docker容器搭建rocketmq集群(3主三从)
一、安装前准备
本文所需文件免费提供地址:
觉得作者不错的还请点个关注,后续还有博客上新。
1.1、服务器准备
本次集群搭建使用docker容器模拟服务器资源,因为要搭建三主三从集群,因此需要准备三个docker容器充当三台服务器资源。
本文中的容器使用搭建redis集群的三台容器,本次准备使用三台容器模拟中间件服务器,在三个容器中搭建三个中间件集群,本篇博客为第二个中间件—rocketmq。具体的容器准备(局域网搭建、ip分配、容器环境)见上篇博客基于docker容器搭建redis集群(3主三从)。
本次规划上做三主三从,每台服务器做一主一从,启动一个nameserver(默认9876)和两个broker(10911,10900),因此需要两个broker端口一个nameserver端口。
服务器资源 | IP端口 | 备注 |
---|---|---|
10.25.27.116 | broker-a:10911;broker-b-s:10900;nameserver:9876 | |
10.25.27.117 | broker-b:10911;broker-c-s:10900;nameserver:9876 | |
10.25.27.118 | broker-c:10911;broker-a-s:10900;nameserver:9876 |
三个broker主节点分别为broker-a、broker-b,broker-c,三个从节点分别为broker-a-s,broker-b-s,broker-c-s,主节点和从节点分别部署到不同的服务器上。
1.2、安装软件准备
序号 | 软件名称 | 功能用途 |
---|---|---|
1 | jdk1.8.0_152 | RocketMq运行环境 |
2 | apache-rocketmq.4.3.2 | 分布式消息和流处理平台 |
二、软件安装
2.1、jdk1.8安装
Rocketmq是由java开发,所以运行rocketmq需要安装java运行环境jdk,本次采用jdk1.8.0_152,将下载的压缩包上传到用户目录下/home/test01/java
1、解压文件
cd /home/test01/java
tar -zxvf jdk1.8.0_152.tar.gz
2、配置环境变量
vim ~/.bash_profileexport JAVA_HOME=/home/test01/java/jdk1.8.0_152
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
3、使配置立刻生效
source ~/.bash_profile
输入java,javac等命令进行测试
2.2、apache-rocketmq.4.3.2安装
1、到用户目录下创建rocketmq目录
mkdir -p /home/test01/rocketmq
2、将apache-rocketmq.4.3.2.tar.gz安装包上传到/home/test01/software目录下,解压安装包到目录/home/test01/rocketmq/
tar -zxvf apache-rocketmq.4.3.2.tar.gz -C /home/test01/rocketmq/
3、配置环境变量
vim ~/.bash_profileexport ROCKETMQ_HOME=/home/test01/rocketmq/apache-rocketmq-4.3.2
export PATH=$ROCKETMQ_HOME/bin:$PATHsource ~/.bash_profile
三、配置及启动rocketmq
3.1、配置创建集群的相关文件
1、创建文件目录结构
# 创建集群配置文件存放的目录
mkdir -p /home/test01/rocketmq/conf/clusterconf# 创建集群节点的日志相关文件路径
#主节点
mkdir -p /home/test01/rocketmq/data/broker-a-m/commitlog
mkdir -p /home/test01/rocketmq/data/broker-a-m/consumequeue
mkdir -p /home/test01/rocketmq/data/broker-a-m/index
#从节点
mkdir -p /home/test01/rocketmq/data/broker-b-s/commitlog
mkdir -p /home/test01/rocketmq/data/broker-b-s/consumequeue
mkdir -p /home/test01/rocketmq/data/broker-b-s/index# 打印启动日志(可选)
mkdir -p /home/test01/rocketmq/logs
注意:另外两个服务器根据规划,10.25.27.117创建的是broker-b-m和broker-c-s,10.25.27.118创建的是broker-c-m和broker-a-s,a,b,c代表三个broker的名称,m为主节点,s为从节点。也可以根据自己需求进行自定义命名规范,但是下面的配置文件也要随之改变。
2、配置主机broker-a.properties文件
进入/home/test01/rocketmq/conf/clusterconf目录下,使用vim创建并编辑broker-a.properties文件
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字
brokerName=broker-a
#集群中 0 表示 Master,>0 表示 Slave
brokerId=0
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE 从节点
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#指定broker的IP(根据实际情况填写)
brokerIP1=10.25.27.116
#nameServer地址,集群用分号分割,域名1:9876; 域名2:9876; 域名3:9876(根据实际情况填写)
namesrvAddr=10.25.27.116:9876;10.25.27.117:9876;10.25.27.118:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/test01/rocketmq/data/broker-a-m
#commitLog 存储路径
storePathCommitLog=/home/test01/rocketmq/data/broker-a-m/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/test01/rocketmq/data/broker-a-m/consumequeue
#消息索引存储路径
storePathIndex=/home/test01/rocketmq/data/broker-a-m/index
#checkpoint 文件存储路径
storeCheckpoint=/home/test01/rocketmq/data/checkpoint
#abort 文件存储路径
abortFile=/home/test01/rocketmq/data/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#checkTransactionMessageEnable=false
#发消息线程池数量
sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessaeThreadPoolNums=128#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true
waitTimeMillsInSendQueue=300 #或者更大
3、配置从机broker-b-s.properties文件
进入/home/test01/rocketmq/conf/clusterconf目录下,使用vim创建并编辑broker-b-s.properties文件
# 所属集群名称
brokerClusterName=rocketmq-cluster
# broker名称
brokerName=broker-b
#broker的角色
# 集群中0表示Master,>0表示Slave
brokerId=1# broker的数据规则
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER同步双写Master
#- SLAVE
brokerRole=SLAVE# 刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH# 指定broker的IP
brokerIP1=10.25.27.116
#nameServer地址,集群用分号分割
namesrvAddr=10.25.27.116:9876;10.25.27.117:9876;10.25.27.118:9876# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4# 是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false# broker对外服务的监听端口
listenPort=10900# 删除文件时间点,默认凌晨四点
deleteWhen=04# 文件保留时间,默认48小时
fileReservedTime=48# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
# destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/test01/rocketmq/data/broker-b-s#commitLog存储路径
storePathCommitLog=/home/test01/rocketmq/data/broker-b-s/commitlog
#消费队列存储路径
storePathConsumeQueue=/home/test01/rocketmq/data/broker-b-s/consumequeue
#消息索引存储路径
storePathIndex=/home/test01/rocketmq/data/broker-b-s/index
#checkpoint文件存储路径
storeCheckpoint=/home/test01/rocketmq/data/broker-b-s/checkpoint
#abort文件存储路径
abortFile=/home/test01/rocketmq/data/broker-b-s/abort#限制消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#checkTransactionMessageEnable=false#发送消息线程池数量
sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true
waitTimeMillsInSendQueue=300
116服务器配置完毕后,另外两台服务器也根据规划分别进行相应的配置,主要注意broker名称、brokerid、角色、ip、监听端口、文件目录的区别。也可以使用scp将整个目录拷贝到另外两个服务器后进行配置及目录的修改。
3.2、修改启动内存
因为rocket默认启动内存比较大,因此需要修改启动内存,实际生产中根据需要进行修改,本次为测试搭建,虚拟机内存较小,所以我们把启动内存减小。
进入/home/test01/rocketmq/apache-rocketmq-4.3.2/bin目录下
分别修改runbroker.sh和runserver.sh文件,将jvm启动参数修改为合适大小然后保存。
3.3、启动nameserver
进入/home/test01/rocketmq/apache-rocketmq-4.3.2/bin目录下
#三台服务器都执行启动#nohup表示以守护程序运行,&表示后台运行
nohup sh mqnamesrv &#执行后使用jps查看启动结果,或者查看nohup.out文件查看启动日志
3.4、启动broker
进入/home/test01/rocketmq/apache-rocketmq-4.3.2/bin目录下
#116服务器
#执行后使用jps查看启动结果,或者查看nohup.out文件查看启动日志
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-a.properties &
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-b-s.properties &#另外两台也对应启动broker
#117
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-b.properties &
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-c-s.properties &
#118
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-c.properties &
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-a-s.properties &
注意:防火墙一定要开放所使用的端口。
四、安装rocketmq监控台(可选)
为方便管理我们在116服务器上安装rocketmq-console,并查看集群运行情况。
4.1、下载rocketmq-console
使用浏览器下载rocketmq-console.zip压缩包,在本地解压
4.2、配置访问端口及集群地址
进入rocketmq-console\src\main\resources目录下,打开application.properties文件进行编辑(根据自己情况进行配置)
4.3、编译打包
打开命令窗口进入rocketmq-console目录下执行(需安装有maven)
mvn clean package -Dmaven.test.skip=true
在rocketmq-console\target目录下会生成rocketmq-console-ng-1.0.1.jar文件
4.4、上传启动
将上面生成的jar包上传到116服务器上的/home/test01/rocketmq目录下,然后启动
nohup java -jar rocketmq-console-ng-1.0.1.jar &
注意:因为我们使用的是docket容器模拟的服务器,所以我们需要将访问端口(我的是9898)进行端口映射,即将容器的端口映射到宿主机对应端口,然后使用浏览器访问宿主机的对应端口即可。对于如何为容器追加端口映射可以自行百度或参考:
浏览器访问后查看集群信息可以看到三主三从集群搭建成功。
更多推荐
基于docker容器搭建rocketmq集群(3主三从)
发布评论