RocketMQ-RocketMQ集群实践(搭建)

搭建RocketMQ可视化管理服务

下载可视化客户端源码下载 | RocketMQ

这里只提供了源码,并没有提供直接运行的jar包。将源码下载下来后,需要解压并进入对应的目录,使用maven进行编译。(需要提前安装maven客户端)

mvn clean package -Dmaven.test.skip=true

编译完成后,在源码的target目录下会生成可运行的jar包rocketmq-dashboard-1.0.1-SNAPSHOT.jar。

接下来可以将这个jar包上传到服务器上。我们上传到/usr/local/src/software/rocketmq/目录下

在rocketmq-dashboard-1.0.1-SNAPSHOT.jar同级目录中使用vi application.yml 命令生成yml文件

vi application.yml 

​ 接下来我们需要在jar包所在的目录下创建一个application.yml配置文件,在配置文件中做如下配置:

**添加 namesrv的配置:**​ 主要是要指定nameserver的地址。

rocketmq: 
  config: 
    namesrvAddrs: 
      - 192.168.200.7:9876 

​ 接下来就可以通过java指令执行这个jar包,启动管理控制台服务。

java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar

这里启动失败出了问题,有报错:

Dashboard 可能会使用 Spring Boot 的默认版本,该版本可能是与 Dashboard 兼容的版本。但由于遇到了 java.lang.NoSuchMethodError 的问题,可能是由于不同版本之间的冲突引起的。

尝试在 pom.xml 文件中显式添加 SnakeYAML 的依赖项,并指定一个版本。例如:

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.27</version> <!-- 根据你实际使用的版本调整 -->
</dependency>

然后重新打包rocketmq-dashboard 源码成jar包,将之前的jar包删除,将这个刚打好的jar替换上去,重新启动:

该启动过程中又出现了一个问题,端口8080被占用了,查看占用8080端口的进程:

sudo lsof -i :8080

将该进程杀掉:sudo kill -9 22731

重新启动,成功了!

成功访问!

搭建集群

升级分布式集群

对三台机器进行命名,进入编辑文件

sudo vi /etc/hosts

在文件中添加以下这段配置,ip映射域名

192.168.200.7 worker1
192.168.200.11 worker3
192.168.200.12 worker2

​ 之前我们用一台Linux服务器,快速搭建起了一整套RocketMQ的服务。但是很明显,这样搭建的服务是无法放到生产环境上去用的。一旦nameserver服务或者broker服务出现了问题,整个RocketMQ就无法正常工作。而且更严重的是,如果服务器出现了问题,比如磁盘坏了,那么存储在磁盘上的数据就会丢失。这时RocketMQ暂存到磁盘上的消息也会跟着丢失,这个问题就非常严重了。因此,我们需要搭建一个分布式的RocketMQ服务集群,来防止单点故障问题。

​ RocketMQ的分布式集群基于主从架构搭建。在多个服务器组成的集群中,指定一部分节点作为Master节点,负责响应客户端的请求。指令另一部分节点作为Slave节点,负责备份Master节点上的数据,这样,当Master节点出现故障时,在Slave节点上可以保留有数据备份,至少保证数据不会丢失。

​ 整个集群方案如下图所示:

​ 接下来我们准备三台相同的Linux服务器,搭建一下RocketMQ的分布式集群。为了更清晰的描述这三台服务器上的操作,我们给每个服务器指定一个机器名。

cat /etc/hosts
192.168.200.7 worker1
192.168.200.11 worker2
192.168.200.12 worker3

​ 为了便于观察,我们这次搭建一个2主2从的RocketMQ集群,并将主节点和节点都分别部署在不同的服务器上。预备的集群规划情况如下:

机器名 nameServer服务部署 broker服务部署
worker1 nameServer
worker2 nameServer broker-a,broker-b-s
worker3 nameServer broker-a-s,broker-b

第一步:部署nameServer服务。

​ nameServer服务不需要做特别的配置,按照之前的步骤,在三台服务器上都分别部署nameServer服务即可。

第二步:对Broker服务进行集群配置。

​ 这里需要修改RocketMQ的配置文件,对broker服务做一些集群相关的参数部署。这些配置文件并不需要我们手动进行创建,在RocketMQ运行包的conf目录下,提供了多种集群的部署配置文件模板。

  • 2m-noslave: 2主无从的集群参考配置。这种集群存在单点故障。

  • 2m-2s-async和2m-2s-sync: 2主2从的集群参考配置。其中async和sync表示主节点与从节点之间是同步同步还是异步同步。关于这两个概念,会在后续章节详细介绍

  • dledger: 具备主从切换功能的高可用集群。集群中的节点会基于Raft协议随机选举出一个Leader,其作用类似于Master节点。其他的节点都是follower,其作用类似于Slave节点。

我们这次采用2m-2s-async的方式搭建集群,需要在worker2和worker3上修改这个文件夹下的配置文件。

相关推荐
爱吃土豆的程序员1 分钟前
在oracle官网下载资源显示400 Bad Request Request Header Or Cookie Too Large 解决办法
java·数据库·oracle·cookie
尚学教辅学习资料23 分钟前
基于微信小程序的电商平台+LW示例参考
java·微信小程序·小程序·毕业设计·springboot·电商平台
尘浮生25 分钟前
Java项目实战II基于微信小程序的移动学习平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·学习·微信小程序·小程序
2401_857610031 小时前
Spring Boot框架:电商系统的技术优势
java·spring boot·后端
希忘auto1 小时前
详解MySQL安装
java·mysql
冰淇淋烤布蕾1 小时前
EasyExcel使用
java·开发语言·excel
拾荒的小海螺1 小时前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
Jakarta EE2 小时前
正确使用primefaces的process和update
java·primefaces·jakarta ee
马剑威(威哥爱编程)2 小时前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
java—大象2 小时前
基于java+springboot+layui的流浪动物交流信息平台设计实现
java·开发语言·spring boot·layui·课程设计