RocketMQ消息中间件(五上):实战部署与Linux内核OS调优,JVM调优,MQ调优

前言

别看这个标题写的夸张,实际上,跟着步骤仔细一些,稍微懂一些jvm和mq在这里相当于是外行看热闹,内行看笑话了,前面的4章一直和订单系统有关系,理论化的引出来很多东西,要用,首先要部署一个MQ,才行,循循渐进,闲话多了,开战!

1.快速部署RocketMQ

1.1:首先要弄一台Linux的虚拟机,这个是必备的,用net模式或者是桥接模式都可以,前提是整一台Linux虚拟机,然后安装好一个JDK,配置号JAVA_HOME,这篇文章主要以MQ为主,所以就不过多的啰嗦这个,JDK最好是安装1.8的版本;

2.构建Dledger(推荐)

【PS:本文使用的是基于dledger基础,也就是rocketMQ4.5以后版本的,好处就是master broker下挂多个slave broker,master出现宕机后,slave会自动提升master,在文章rocketMQ(四中有讲到,有兴趣可以去我主页看看)】

2.1:下载dledger命令:
git clone https://github.com/openmessaging/openmessaging-storage-dledger.git
2.2:进入dledger目录
cd openmessaging-storage-dledger
2.3:install一把【mvn命令失效的,提前输出:sudo yum install maven】
mvn clean install -DskipTests

3.构建RocketMQ

3.1:下载rocketMQ
git clone https://github.com/apache/rocketmq.git
3.2:进入MQ目录
cd rocketmq
3.3:创建分支和切换分支,也可以称为检出分支
git checkout -b store_with_dledger origin/store_with_dledger
3.4:install一把
mvn -Prelease-all -DskipTests clean install -U

【构建rocketMQ的时候不需要手动创建目录,如果有需要分的很清的情况下,可以创建一个mq的专属目录也可以,如果你需要讲mq放在哪里,你输入第一个3.1这个步骤的时候,就先进入这个目录,例如图中就是在/usr/local输入的命令】
插个图:
在这里插入图片描述

4.进入目录,修改对应配置文件

4.1:配置文件都在rocketMQ中的
cd distribution/target/apache-rocketmq
4.2:在这个目录中,需要编辑三个文件
一个是bin/runserver.sh,一个是bin/runbroker.sh,还一个是bin/tools.sh
在这里插入图片描述
4.3:进入这几个文件
vi runserver.sh
vi runbroker.sh
vi tools.sh
修改配置文件主要是修改Java_home:
4.4:在里面找到如下的三行,然后将第一二行和第三行都删了,同时将第一行的值修改为自己的JDK目录
mq修改Javahome配置文件
ps:如果要看JDK安装位置:
/usr/libexec/java_hom -V修改为java主目录即可

5.快速rocketMQ集群启动

5.1:启动:这个命令会在当前这台机器上启动一个nameServer和三个broker,三个broker其中一个是master,另外两个是slave,瞬间就可以组成一个最小可用的rocketMQ集群;

命令:sh bin/dledger/fast-try.sh start
5.2:检查集群状态
sh bin/mqadmin clusterList -n 127.0.0.1:9876
PS:此时需要等待一会,这个命令执行周期会有点慢,接着会看到3行记录;
5.3:状态查看
RaftCluster,broker名称叫做raftnode00,然后是BID是0、1、2,也有可能是0、1、3;

这个时候就说明rocketMQ集群启动成功了,BID为0的就是mater,BID大于0的就是slave,其实在这里也可以叫做leader和follower;

6.slave broker是如何切换为master broker的

6.1:首先查看下三台机器的进程,然后kill -9将BID为0的直接杀死;等待10s左右;
6.2:再次执行命令查看集群状态:
sh bin/mqadmin clusterList -n 127.0.0.1:9876
6.3:slave提升为master:
此时发现作为leader的BID为0的节点,变成另外一个broker了,切换成功;

以上一台最小的高可用rocketMQ集群就搭建完成了,细节上可能会出现一些网络波动和错误,Linux上面细节决定成败,和写代码一样,多个分号,也不行,总之方法总比问题多,接下来搭建MQ的nameServer;

7. nameServer Start!

nameServer前言==
完成正式三台NameServer路由部署(nameServer相当于ribbitMQ中的交换机,比较关键,至少2台集群以上,保证服务生产者和消费的正常数据交换)

1.1:在三台nameServer的机器上面,按照快速部署MQ,安装好Java,构件好dledger和rocketMQ,然后编辑对应的文件,设置好Java-home就可以了;
1.2:2.启动nameServer
启动命令:nohup sh mqnamesrv &
注释:nameServer监听的默认端口就是9876,所以如果在三台机器上面都启动了nameserver,那么他们的端口就都是9876,此时就成功的启动了三个nameServer;

8.完成一组broker集群的部署

8.1:接着需要启动一个master broker和两个slave
broker,分别在三台broker准备的机器上,安装好Java,构件好dledger和rocketMQ,然后编辑对应的文件,设置好Java-home就可以了参考上面的步骤
8.2:执行命令:nohup sh bin/mqbroker -c conf/dledger/broker-n0.conf &
注释:这里第一个broker的配置文件是broker-n0.conf,第二个broker的配置文件可以是broker-n1.conf,第三个broker的配置文件可以是broker-n2.conf【可以对对应的配置文件做自己想要做的修改】
8.3:配置举例(例如使用broker-n0.conf文件为例子),说明一下配置文件中的一些说明

8.3.1:NameServer配置nameServer的监听地址,可以写多个:
nameservAddr=127.0.0.1:9876

8.3.2:这个配置文件代表的是broker的name:
brokerName=RaftNode00
注释:例如有一个master和两个slave,那么他们的broker名称必须是一样的,因为它们是三个分一组,如果有另外一组的master和两个slave,也可以起名称为例如:RaftNode01;

8.3.3:集群名称:
brokerClusterName = RaftCluster
注释:整个broker集群都可以使用这个名称;

8.3.4:发送消息的线程数量: sendMessageThreadPoolNums=24
注释:这个一般配置和机器的cpu核数一样,这里假设的是24核的机器

8.3.5:broker在组里面的id:
dlegerSelfId=n0
注释:正常情况就是n0,n1,n2

8.3.6:broker数据文件存放:
storePathRootDir=/tmp/mqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog

注释:【这两个都是存放数据和日志的:可以根据需要改变】类似可以改成自己的/usr/local/mq/node00等等;

8.3.7:dledger关键技术: enableDlegerCommintLog=true
注释:是否启动dledger技术,如果要启动必须设置为true;

8.3.7:1M2S组设定:
dlegerGroup=RaftNode00 group分组
注释:group分组:这里一般建议和broker设置的名称一样,一个master和两个slave会组成一个group;

8.3.7:监听同组内的所有broker: dLegerPeers=n0-127.0.0.1:40911;n1-127.0.0.1:40922;n2-127.0.0.1:40933
注释:是否启动dledger技术,如果要启动必须设置为true;

8.3.7:dledger关键技术: enableDlegerCommintLog=true
注释:这个很关键,对于每一组broker,得必须要保证他们的这个配置是一样的,在这里要写出来第一个组有哪几个broker,假设这里有三台机器部署了broker,要作为一个组,那么在这个配置文件中就要写入这三个的ip地址和监听的端口号;

以上就是配置信息的说明了,但是有点点费神,梳理出来一份完整的图,也写上了相应的注释,不喜欢看文字的,可以看看图,缓解一下压力:
在这里插入图片描述
最后启动起来:

sh bin/mqadmin clusterList -n 127.0.0.1:9876

测试

最后在简单的写段代码,测试一下:
1.新建两个工程

1.1:消息生产者and消息消费者
1.2:同时都需要引入RocketMQ客户端的依赖
引入mq依赖
1.3:生产者代码:
MQ生产者代码
1.4:消费者代码:
MQ消费者代码

只要代码一执行,就立马不停的在while死循环中发送消息,根据需要可以设置为多个线程;消费者不停的去获取消息,打印在控制台即可;

下一篇文章地址
链接: RocketMQ消息中间件(五下)

由于文章的长度和简洁度,打算将这章的内容分为五上和五下分开完成,这样的阅读起来不会太累,这也是一个MQ的总结,共同进步,记载,让实践变成一种爱好,步骤落下,写的不好的地方,多多海涵!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖喱ABC

无需打赏,共同进步学习!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值