RocketMQ集群搭建(2m-2s-sync)及搭建中遇到的问题

RocketMQ集群搭建(2m-2s-sync)及搭建中遇到的问题

      在学习一门技术之前,首先应该弄明白这门技术的使用流程或者说是运行流程,这样在代码开发、环境搭建上都会有很大的帮助,首先我们梳理下2m-2s-sync的原理图,如下:
在这里插入图片描述
1.各个角色及功能
(1)Producer生产者:生产并发送消息
(2)Consumer消费者:消费处理消息
(3)Broker:消息存储,生产者发送消息到broker,同时broker可完成消息的持久化
(4)Topic:消息主题,一个broker可以创建一个或者多个topic,生产者发送消息的时候,选择topic,会将消息发送到该topic所属的broker上
(5)NameServer:集群的路由控制中心,从上图可以看到,集群中的各个节点都会和nameServer连接。

      集群中先启动nameServer,再启动broker,broker启动时,会将自己的地址及所属的topic信息注册到nameServer,每一个broker节点都是如此,当生产者启动,会和nameServer建立连接,发送消息时,先去nameServer询问,该topic的消息应该发往哪台broker,同样,消费者启动,会去询问nameServer,自己订阅的主题消息在哪一台broker上,再去获取消息这就是nameServer的路由功能。

2.搭建2m-2s-sync集群
      2m-2s:双主双从,两对节点,一对节点的brokerName相同,brokerId为0的为主节点,非0的为从节点,一个主节点可以有多个从节点,一个从节点只能有一个主节点
      sync:同步复制,同步是相对与异步来说的,双主双从模式下,生产者发送消息到broker主节点,主节点完成持久化的同时复制消息给从节点,等从节点复制并持久化完成,才给生产者返回消息发送状态,这种模式就是同步;如果主节点接收到消息后,立马给生产者返回,不管从节点的复制,这种模式是异步,同步的消息可靠性高,异步的性能高

集群搭建的特点
      集群下的多个nameServer之间是没有数据同步的关系的,多个生产者、多个消费者之间也是如此,所以搭建他们的集群相对简单,只需要启动多个、保证端口不冲突即可。broker就不一样了,主从之间存在数据同步,主从的配置文件一定要仔细,例如一对节点的brokerName相同,brokerId为0的为主节点,非0的为从节点,等等主从配置。所以RocketMQ集群实际上就是broker的集群

搭建过程参考以下链接:https://edu.csdn.net/course/play/25950/318125(讲的特别详细)
准备了两台服务器:
198.1.245.202:brokerA(master)、brokerB(slave)、nameServer1、rocketmq-console
198.1.245.204:brokerB(master)、brokerA(slave)、nameServer2
搭建过程就不多说了,上面的博客说的很详细,这里总结下搭建过程中出现的问题:
(1)broker端口号
      每台服务器上有两个broker节点,broker监听的端口号不能相同
      broker默认的端口号是10911,需要检查下10912端口是否被其他应用占用,10911+1(HA端口),主从模式下用来同步数据的端口
修改两台服务器的防火墙,保证对应端口开发
(2)一台服务器上当主节点启动后,从节点启动不了,查看logs下的broker.log日志文件,没有报错信息,只有如下提示
在这里插入图片描述
      经查阅资料发现,broker-a.properties和broker-b-s.properties两个节点的持久化目录不可配置成相同的,并且不能手动创建持久化目录,修改从节点的持久化目录为store-s,重启成功。
在这里插入图片描述
(3)broker-b注册到nameServer失败,查看日志发现不是自身服务器ip,如下图
在这里插入图片描述
正常ip应该是198.1.245.204,172.17.42.1这个IP不知道是哪来的?
经查阅资料,网上说是多网卡的问题,便查看了两台服务器的IP信息,如下:
在这里插入图片描述
有个docker0的ip是172.17.42.1,可如何让broker启动时不使用这个IP呢,配置文件中有如下配置
brokerIP1:broker自身IP
brokerIP2:主从模式下,主节点连接该IP进行数据同步
配置了brokerIP1后,重启broker,注册到nameServer成功
在这里插入图片描述

3.安装rocketmq-console控制台查看集群下各个节点的信息
      rocketmq安装路径的bin目录下有命令mqadmin,通过该命令,可以在服务器查看各个节点信息,不过没有控制台好用,rocketmq-console代码被托管到了git上,从git上下载代码,并修改application.properties配置文件中nameServer的地址,打成jar包,在服务器运行即可,如下图
在这里插入图片描述
集群搭建完毕。


版权声明:本文为qq_36816062原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。