rocketmq两主两从搭建
目录
一,集群规划
二,准备工作
1,设置主机名
2,设置主机名ip映射
3,所有主机安装openjdk17
4,所有主机上传rocketmq
5,所有主机配置环境变量NAMESRV_ADDR
6,所有主机创建日志目录
7,主机内存小就修改脚本的java启动配置(可选)
编辑
a, 修改 runserver.sh
b,修改 runbroker.sh
编辑
三,修改每一个主机上2m-2s-async目录下的配置文件
1,worker1只保留2m-2s-async/broker-a.properties就可以了
2,worker2只保留2m-2s-async/broker-a-s.properties
3,worker3 只保留2m-2s-async/broker-b.properties
4,worker3 只保留2m-2s-async/broker-b-s.properties
四,所有主机启动nameServer
五,所有主机启动broker
1,worker1
2,worker2
3,worker3
4,worker4
六,检查集群状态
七,搭建dashboard
1,下载: 下载 | RocketMQ
2,本地编译项目源码得到jar包
3,上传 dashboard.jar到worker2 /app/rocketmq/dashboard
4,dashboard目录下创建springboot项目配置文件application.yml
5,启动rocketmq-dashboard,输出日志dashboard.log
6,访问项目 http://192.168.12.77/8080
八,制作启动脚本
1,编辑脚本
2,添加执行权限
3,测试
九,说明
一,集群规划
机器名 | ip | broker服务部署 | nameServer服务部署 | dashboard服务部署 |
worker1 | 192.168.12.76 | broker-a | nameServer |
|
worker2 | 192.168.12.77 | broker-a-s | nameServer | rocketmq-dashboard |
worker3 | 192.168.10.118 | broker-b | nameServer |
|
worker4 | 192.168.10.119 | broker-b-s | nameServer |
|
1.jdk使用17,安装在/usr/lib/java目录下
2.rocketeq安装在/app/rocketmq上,所有的数据和日志信息在这个目录下
3.rocketmq-dashboard安装在 192.168.12.77 这台
二,准备工作
1,设置主机名
192.168.12.76 运行命令 hostname worker1
192.168.12.77 运行命令 hostname worker2
192.168.10.118运行命令 hostname worker3
192.168.10.110 运行命令 hostname worker4
2,设置主机名ip映射
所有主机 执行
cat <<EOF >> /etc/hosts
192.168.12.76 worker1
192.168.12.77 worker2
192.168.10.118 worker3
192.168.10.119 worker4
EOF
3,所有主机安装openjdk17
下载地址: Java Platform, Standard Edition 17 Reference Implementations
上传到/opt目录
# 解压:
tar -xf openjdk-17.0.0.1+2_linux-x64_bin.tar.gz# 创建目录
/usr/lib/java# 移动文件
mv jdk-17.0.0.1/* /usr/lib/java# 设置环境变量,并追到/etc/profile
vim /etc/profileexport JAVA_HOME=/usr/lib/javaexport PATH=$JAVA_HOME/bin:$PATH# 刷新环境变量
source /etc/profile
4,所有主机上传rocketmq
下载地址:下载 | RocketMQ
上传到 /opt目录
#解压
unzip rocketmq-all-5.3.3-bin-release.zip# 创建目录
mkdir - p /app/rocketmq/# 移动到工作目录
mv rocketmq-all-5.3.3-bin-release /app/rocketmq/mq
5,所有主机配置环境变量NAMESRV_ADDR
# 追加环境变量
echo 'export NAMESRV_ADDR=localhost:9876' >> /etc/profile# 刷新
source /etc/profile# 验证
[root@worker1 opt]# echo $NAMESRV_ADDR
localhost:9876
6,所有主机创建日志目录
# 创建消息日志目录
mkdir /app/rocketmq/logs
# 创建软连接,链接到存储空间大的磁盘
ln -s /app/rocketmq/logs ~/logs
7,主机内存小就修改脚本的java启动配置(可选)
a, 修改 runserver.sh
修改改为
b,修改 runbroker.sh
改为
三,修改每一个主机上2m-2s-async目录下的配置文件
1,worker1只保留2m-2s-async/broker-a.properties就可以了
[root@worker1 2m-2s-async]# vim broker-a.properties
#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字⼀样的节点就是⼀组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876;worker4:9876
deleteWhen=04
#日志保留小时
fileReservedTime=120
#存储路径
storePathRootDir=/app/rocketmq/store
storePathCommitLog=/app/rocketmq/store/commitlog
storePathConsumeQueue=/app/rocketmq/store/consumequeue
storePathIndex=/app/rocketmq/store/index
storeCheckpoint=/app/rocketmq/store/checkpoint
abortFile=/app/rocketmq/store/abort
#Broker的角色
brokerRole=ASYNC_MASTER
#同步消息的方法
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=10911
2,worker2只保留2m-2s-async/broker-a-s.properties
#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876;worker4:9876
deleteWhen=04
fileReservedTime=120
#存储路径
storePathRootDir=/app/rocketmq/storeSlave
storePathCommitLog=/app/rocketmq/storeSlave/commitlog
storePathConsumeQueue=/app/rocketmq/storeSlave/consumequeue
storePathIndex=/app/rocketmq/storeSlave/index
storeCheckpoint=/app/rocketmq/storeSlave/checkpoint
abortFile=/app/rocketmq/storeSlave/abort
#Broker 的角色
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口,四个主机的情况下设置为一样的也可以
listenPort=11011
3,worker3 只保留2m-2s-async/broker-b.properties
#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876;woker4:9876
deleteWhen=04
fileReservedTime=120
#存储路径
storePathRootDir=/app/rocketmq/store
storePathCommitLog=/app/rocketmq/store/commitlog
storePathConsumeQueue=/app/rocketmq/store/consumequeue
storePathIndex=/app/rocketmq/store/index
storeCheckpoint=/app/rocketmq/store/checkpoint
abortFile=/app/rocketmq/store/abort
#Broker 的角色
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=10911
4,worker3 只保留2m-2s-async/broker-b-s.properties
#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876;worker4:9876
deleteWhen=04
fileReservedTime=120
#存储路径
storePathRootDir=/app/rocketmq/storeSlave
storePathCommitLog=/app/rocketmq/storeSlave/commitlog
storePathConsumeQueue=/app/rocketmq/storeSlave/consumequeue
storePathIndex=/app/rocketmq/storeSlave/index
storeCheckpoint=/app/rocketmq/storeSlave/checkpoint
abortFile=/app/rocketmq/storeSlave/abort
#Broker 的角色
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=11011
四,所有主机启动nameServer
nohup bin/mqnamesrv &
五,所有主机启动broker
1,worker1
nohup bin/mqbroker -c ./conf/2m-2s-async/broker-a.properties &
2,worker2
nohup bin/mqbroker -c ./conf/2m-2s-async/broker-a-s.properties &
3,worker3
nohup bin/mqbroker -c ./conf/2m-2s-async/broker-b.properties &
4,worker4
nohup bin/mqbroker -c ./conf/2m-2s-async/broker-b-s.properties &
六,检查集群状态
bin/mqadmin clusterList -n localhost:9876
七,搭建dashboard
1,下载: 下载 | RocketMQ
2,本地编译项目源码得到jar包
编译命令: mvn clean package -Dmaven.test.skip=true
3,上传 dashboard.jar到worker2 /app/rocketmq/dashboard
4,dashboard目录下创建springboot项目配置文件application.yml
rocketmq:config:namesrvAddrs:- worker1:9876- worker2:9876- worker3:9876- worker4:9876
5,启动rocketmq-dashboard,输出日志dashboard.log
java -jar rocketmq-dashboard-2.0.0.jar 1>dashboard.log 2>&1 &
6,访问项目 http://192.168.12.77/8080
修改版本,语言
八,制作启动脚本
1,编辑脚本
#!/bin/bashMQ_PATH=/app/rocketmq/mqdeclare -A OPTIONS=([1]="启动nameserver服务"[2]="启动borker服务"[3]="停止nameserver服务"[4]="停止broker服务"[5]="启动dashboard服务"[6]="停止dashboard服务"[0]="取消"
)find_pid() {ps -ef | grep "$1" | grep -v grep | awk '{print$2}'
}# 停止方法
stop() {# 查找进程IDPID=$(find_pid "$1")if [ -z "$PID" ]; thenecho "No service running $1"else kill -15 $PIDecho "$1 stopping ..."# 等待进程退出while kill -0 $PID 2>/dev/null; doecho "Waiting for process to terminate..."sleep 1doneecho "$1 have been stoped."fi
}# 打印欢迎信息和选项
print_menu() {clearecho "===============rocketmq 命令行=============="for key in "${!OPTIONS[@]}"; doprintf "(%2s) %s\n" "$key" "${OPTIONS[$key]}"doneecho "===================================="echo "请输入命令编号:"
}# 主循环
while true; doprint_menuread -r choice# 检查用户输入是否有效if [[ -z "${OPTIONS[$choice]}" ]]; thenecho "无效的输入,请重新输入。"sleep 1continuefi# 根据用户选择执行相应操作case $choice in0)echo "操作已取消。"break;;1)echo "启动nameserver服务..."nohup $MQ_PATH/bin/mqnamesrv &sleep 2echo "nameserver服务已启动";;2)# 不同主机放开不同的命令echo "启动borker服务..." # worker1# nohup $MQ_PATH/bin/mqbroker -c $MQ_PATH/conf/2m-2s-async/broker-a.properties &# worker2# nohup $MQ_PATH/bin/mqbroker -c $MQ_PATH/conf/2m-2s-async/broker-a-s.properties & # worker3# nohup $MQ_PATH/bin/mqbroker -c $MQ_PATH/conf/2m-2s-async/broker-b.properties &# worker4# nohup $MQ_PATH/bin/mqbroker -c $MQ_PATH/conf/2m-2s-async/broker-b-s.properties & sleep 2echo "broker服务已启动。";;3) echo "停止nameserver服务..."sh $MQ_PATH/bin/mqshutdown namesrvsleep 2echo "nameserver服务已停止。";;4) echo "停止borker服务..."sh $MQ_PATH/bin/mqshutdown brokersleep 2echo "broker服务已停止。";;5)# 只在woker2上有效echo "启动dashboard服务..."nohup java -jar /app/rocketmq/dashboard/rocketmq-dashboard-2.0.0.jar 2>&1 &sleep 2echo "dashboard服务已启动。";;6)# 只在woker2上有效stop "rocketmq-dashboard";;*)echo "无效的输入,请重新输入。"sleep 1;;esac# 如果不是取消操作,询问是否继续if [[ $choice -ne 0 ]]; thenecho "是否继续?(y/n)"read -r continueif [[ "$continue" != "y" && "$continue" != "Y" ]]; thenbreakfifi
doneecho "脚本执行结束o "
2,添加执行权限
chmod +x mqrun.sh
3,测试
sh mqrun.sh
九,说明
双主双从架构当有一个broeker master服务和一个nameserver服务保持正常运行时,就可以提供消息服务。
参考:
部署方式 | RocketMQ