0.实践部署一个RocketMQ集群保证消息中间件的高可用

以下部分内容来源借鉴于儒猿技术窝 以及RocketMQ官方文档

 

目前要做到的是实现RocketMQ的高可用,总体的部署架构如下

image.png

也就是说,NameServer会部署3个节点,来保证所有的broker能够注册到NameServer上面,哪怕之后又一个NameServer挂掉了,生产者或者消费者也能够找到一个NameServer从而路由到所有的Broker

每个Master部署2个对应的Slave Broker,在保证消息的正常存储之后,一旦Master Broker挂掉之后,能够基于Dledger能够将2个Slave Broker中选举出来一个切换为主节点,进而保证消息的高可用。

所以目前先以上面的图来进行部署,在部署之后也要保证有一个对应的RocketMQ的可视化界面,至于如何保证RocketMQ的在高并发场景下如何部署和搭建,可以后续再进行补充。


准备一台4G+内存的虚拟机或者linux服务器

官网要求:

  1. 64bit OS, Linux/Unix/Mac is recommended;(Windows user see guide below)
  2. 64bit JDK 1.8+;
  3. Maven 3.2.x;
  4. Git;
  5. 4g+ free disk for Broker server

所以,按照上述内容进行准备一台Linux机器

官网:https://rocketmq.apache.org/docs/quick-start/


git clone https://github.com/openmessaging/openmessaging-storage-dledger.git

cd openmessaging-storage-dledger

mvn clean install -DskipTests

ps:如果感觉mav下载依赖比较慢

mvn -X 命令可以查看到maven的setting.xml位置

后续配置成阿里的maven仓库

<mirror>  
    <id>nexus-aliyun</id>  
    <mirrorOf>central</mirrorOf>    
    <name>Nexus aliyun</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
</mirror>

下载rocketmq源码

git clone https://github.com/apache/rocketmq.git

cd rocketmq

git checkout -b store_with_dledger origin/store_with_dledger

mvn -Prelease-all -DskipTests clean install -U

 

cd distribution/target/apache-rocketmq

在这个目录中,需要编辑三个文件,一个是bin/runserver.sh,一个是bin/runbroker.sh,另外一个是bin/tools.sh


在里面找到如下三行,然后将第二行和第三行都删了,同时将第一行的值修改为你自己的JDK的主目录


[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java

[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java

[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"

接着执行下面的命令进行快速RocketMQ集群启动:

sh bin/dledger/fast-try.sh start

ps:由于我这边机器本身的是一个4G的虚拟机,我这边手动调整了JVM分配的堆内存大小,以及新生代的大小。在其中遇到一个错误就是我在修改那3个sh文件的时候JAVA_HOME我为了偷懒直接JAVA_HOME=$JAVA_HOME导致了地址错误,最后启动时候一直报错。

 

使用下面命令查看rocketMQ运行情况

sh bin/mqadmin clusterList -n 127.0.0.1:9876

image.png

我们发现30921端口的Broker的BID是0,说明他是Master

此时我们可以用命令(lsof -i:30921)找出来占用30921端口的进程PID,接着就用kill -9的命令给他杀了,比如我这里占用30921端口的进程PID是4344,那么就执行命令:kill -9 4344


接着等待个10s,再次执行命令查看集群状态:

sh bin/mqadmin clusterList -n 127.0.0.1:9876


此时就会发现作为Leader的BID为0的节点,变成另外一个Broker了,这就是说Slave切换为Master了。

开启NameServer

配置每个broker注册到的NameServer

 


配置RocketMQ可视化工具

git clone https://github.com/apache/rocketmq-externals.git

 

然后进入rocketmq-console的目录:

cd rocketmq-externals/rocketmq-console

 

执行以下命令对rocketmq-cosole进行打包,把他做成一个jar包:

mvn package -DskipTests


 

然后进入target目录下,可以看到一个jar包,接着执行下面的命令启动工作台:

java -jar rocketmq-console-ng-2.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=127.0.0.1:9876

 

关闭防火墙:systemctl stop firewalld(我是Centos7.9 其他版本需要自己查如何关闭防火墙)
 

这里务必要在启动的时候设置好NameServer的地址,如果有多个地址可以用分号隔开,接着就会看到工作台启动了,然后就通过浏览器访问那台机器的8080端口就可以了,就可以看工作台界面。

image.png


代码参考官网:

https://rocketmq.apache.org/docs/simple-example/

 

实际代码地址(02springboot-rocketmq):

https://gitee.com/xiejueshenshang/java-learn-history.git


eureka截图
image.png

 

代码运行后效果:

image.png

 

番外:

上面部署的其实没有完全达到我想要的结果,主要是没有做到master broker 和salve broker分机器部署,我虽然用了两个虚拟机操作,但是可能是我系统配置不够的原因,开了两个虚拟机后其中一个运行一段时间莫名其妙的宕掉了 ,所以集群配置的话参考了一个博客,主要是修改了

image.png

然后指定了同一个brokername来证明是同一个broker的主从,后续启动的时候需要调整,需要按照配置文件进行启动(但是我看了下好像博文没有做到,主备切换)

https://blog.csdn.net/u010634288/article/details/56686978

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值