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