RocketMQ-RocketMQ集群实践

搭建RocketMQ可视化管理服务

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

RocketMQ-RocketMQ集群实践_第1张图片

这里只提供了源码,并没有提供直接运行的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配置文件,在配置文件中做如下配置:

RocketMQ-RocketMQ集群实践_第2张图片

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

rocketmq: 
  config: 
    namesrvAddrs: 
      - 192.168.200.7:9876 

 RocketMQ-RocketMQ集群实践_第3张图片

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

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

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

RocketMQ-RocketMQ集群实践_第4张图片

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

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


    org.yaml
    snakeyaml
    1.27 

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

RocketMQ-RocketMQ集群实践_第5张图片

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

sudo lsof -i :8080

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

RocketMQ-RocketMQ集群实践_第6张图片

重新启动,成功了!

RocketMQ-RocketMQ集群实践_第7张图片 成功访问!

RocketMQ-RocketMQ集群实践_第8张图片

 搭建集群

升级分布式集群

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

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节点上可以保留有数据备份,至少保证数据不会丢失。

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

RocketMQ-RocketMQ集群实践_第9张图片

​ 接下来我们准备三台相同的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上修改这个文件夹下的配置文件。

你可能感兴趣的:(java-rocketmq,rocketmq,java)