当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/282800.html

相关文章:

  • 【Jupyter】个人开发常见命令
  • 多房间 WebSocket 连接管理设计:从单例模式到多终端连接池
  • 【Unity】IL2CPP相关理论知识学习
  • Transformer 架构
  • 多语言json文件内\n换行不生效问题
  • ScratchCard刮刮卡交互元素的实现
  • 列车调度(vector)
  • 前端vue3获取excel二进制流在页面展示
  • 【unity知识点】已知发射的初始位置和目标位置,计算发射初速度,实现投掷物品或者弓箭手做抛体线运动精准的击中目标
  • C语言 --- 函数递归
  • Python编程基础(六)| 用户输入和while循环
  • 康华生物:以创新疫苗书写国产突围之路​​​
  • 李宏毅2025《机器学习》第七讲-推理模型:从原理、流派到未来挑战
  • 2025年自动化工程、物联网与计算机应用国际会议(AEITCA 2025)
  • 【时序数据库-iotdb】时序数据库iotdb的可视化客户端安装部署--dbeaver
  • 基于Spring AI Alibaba的智能知识助手系统:从零到一的RAG实战开发
  • 最细,Web自动化测试入门到精通整理,一套打通自动化测试...
  • ASP .NET Core 8集成Swagger全攻略
  • 从零开发足球比分APP:REST API与WebSocket的完美搭配
  • HAProxy简介及配置文件详解
  • ESP‑IDF 默认的连接流程是
  • 2_概要设计编写提示词_AI编程专用简化版
  • 快速开发汽车充电桩的屏幕驱动与语音提示方案
  • __is_constexpr(x)宏介绍---max()宏扩展
  • Linux 常用指令
  • 信而泰×DeepSeek:AI推理引擎驱动网络智能诊断迈向 “自愈”时代
  • Java基础语法补充v2
  • C# --- 单例类错误初始化 + 没有释放资源导致线程泄漏
  • The 2024 ICPC Asia Shenyang Regional Contest B. Magical Palette
  • Docker容器技术讲解