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上修改这个文件夹下的配置文件。

相关推荐
BillKu37 分钟前
Java + Spring Boot + Mybatis 插入数据后,获取自增 id 的方法
java·tomcat·mybatis
全栈凯哥37 分钟前
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
java·算法·leetcode·链表
chxii38 分钟前
12.7Swing控件6 JList
java
全栈凯哥40 分钟前
Java详解LeetCode 热题 100(27):LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)详解
java·算法·leetcode·链表
YuTaoShao41 分钟前
Java八股文——集合「List篇」
java·开发语言·list
PypYCCcccCc1 小时前
支付系统架构图
java·网络·金融·系统架构
华科云商xiao徐1 小时前
Java HttpClient实现简单网络爬虫
java·爬虫
扎瓦1 小时前
ThreadLocal 线程变量
java·后端
BillKu2 小时前
Java后端检查空条件查询
java·开发语言
jackson凌2 小时前
【Java学习笔记】String类(重点)
java·笔记·学习