linux rocketmq集群,二、RocketMQ入门(集群模式搭建与测试)

我们在博文:一、RocketMQ入门(单机安装、控制台、SpringBoot整合)大概了解了啥是RocketMQ,以及对它进行单机部署,但是RocketMQ一般都是集群搭建的,很少单机的,所以我们在这一篇博文就从0开始搭建一个集群环境,当然这里也不用去考虑太多的原理性东西先。

一、RocketMQ物理部署结构图

c1f4b28b12401a76ae43756e41c515c1.png

由图可知,RocketMQ 最适合的集群搭建模式就是多主多备的模式,这样子可以保证数据的备份和高可用。

二、RocketMQ部署模式

其实我们在rocketmq安装包的conf目录下可以找到如下文件夹,这也对应了RocketMQ的4中部署模式:

68ddb394d5b851e40ad6563a1d50ac4a.png

(1)broker.conf : 单Master模式

(2)2m-noslave : 多Master模式

(3)2m-2s-sync : 多Master多Slave模式,同步双写

(4)2m-2s-async : 多Master多Slave模式,异步复制

1、单个Master模式

很显然,这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用。

2、多Master模式

一个集群无Slave,全是Master,例如2个Master或者3个Master。

优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。

缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。

3、多Master多Slave模式,异步复制

每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟,毫秒级。

优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master宕机后,消费者仍然可以从Slave消费,此过程对应用透明,不需要人工干预。性能同多Master模式几乎一样,推荐使用。

缺点:Master宕机,磁盘损坏情况,会丢失少量消息。

4、多Master多Slave模式,同步双写

每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,主备都写成功,才向应用返回成功。

优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高。

缺点:性能比异步复制模式略低,大约低10%左右,发送单个消息的RT会略高。目前主宕机后,备机不能自动切换为主机,阿里后续版本应该会支持自动切换功能。

通过比较上述四种环境搭建模式优缺点后,一般在生产环境中都是采用2m-2s-async(多Master多Slave模式,异步复制)的集群模式来部署。

三、部署环境准备

这里准备搭建的是“多Master多Slave模式,异步复制”的模式,需要进行一些环境的准备。可以参考我的开头指明的单机模式那篇博文搭建好“rocketmq console”和“springboot”先。

1、部署明细

我这里是打算部署4个NameServer,2个Master,2个Slave。所以这里需要四台linux.

2、linux准备

可以参考我的博文:VMWare安装CentOS7超全图解来搭建一台linux,搭建好配置好网络连接后就可以用这一台直接克隆(注意是完全克隆),克隆完后需要修改下物理地址以及指定IP,我的那篇文章里应该找得到。然后就准备好了四台linux,我这里是;

192.168.157.6

192.168.157.7

192.168.157.8

192.168.157.9

用户和密码因为是测试我这里就直接指定为root/forever.

3、服务器规划

这里打算每台linux都启动一个NameServer(当然我们也可以任意选择两个来启动即可)。

然后192.168.157.6做Master,192.168.157.7做6的slaver,192.168.157.8做Master,192.168.157.9做8的Slaver.

四、开始部署

到这里,rocketmq安装包也下载了,linux也准备了,开始部署。

1、上传文件解压安装rocketmq

用SecureCRT或者别的远程连接工具将rocketmq的安装包:rocketmq-all-4.6.0-bin-release.zip 上传到192.168.157.6的/usr/local目录下。执行如下命令进行解压安装。

unzip rocketmq-all-4.6.0-bin-release.zip

mv rocketmq-all-4.6.0-bin-release rocketmq

这里有可能找不到unzip命令,那么我们可以如下安装:

yum install-y unzip zip

2、跟上一篇博文一样,修改所需内存

rocketmq的nameserver和broker默认都需要很大的内存,最少2G的,我们的虚拟机怎么承受得了,启动都启动不了,所以这里需要去改一下:

修改NameServer所需内存

cd bin/

vi runserver.sh

将JAVA_OPT全部改为128m

JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"

修改broker所需内存

cd bin/

vi runbroker.sh

将JAVA_OPT全部改为128m

JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m"

3、创建存储路径

在rocketmq的根路径下创建存储路径mkdir store

commitLog的存储路径mkdir/store/commitlog

消费队列存储路径mkdir/store/consumequeue

消息索引存储路径

mkdir /store/index

4、修改配置文件

进入到rocketmq的conf/2m-2s-async的目录下,也就是官方指定好的多主多备模式的配置文件,我们只需要在每个配置文件下都加入如下内容指定存储位置即可,其他的都用默认,这里也不去详解配置的含义,留待另一篇来讲解。

#nameServer地址,分号分割

namesrvAddr=192.168.157.6:9876;192.168.157.7:9876;192.168.157.8:9876;192.168.157.9:9876

#存储路径

storePathRootDir=/usr/local/rocketmq/store

#commitLog存储路径

storePathCommitLog=/usr/local/rocketmq/store/commitlog

#消费队列存储路径

storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue

#消息索引存储路径

storePathIndex=/usr/local/rocketmq/store/index

#checkpoint 文件存储路径

storeCheckPoint=/usr/local/rocketmq/store/checkpoint

#abort 文件存储路径

abortFile=/usr/local/rocketmq/store/abort

官方已经默认有如下配置:我们不需要进行任何修改,这里大概解释下各项配置的含义

#所属集群名字

brokerClusterName=DefaultCluster

#broker名字,注意此处不同的配置文件填写的不一样,但是一主一备是相同的

brokerName=broker-a

#0 表示Master, >0 表示Slave

brokerId=0

#删除文件时间点,默认凌晨4点

deleteWhen=04

#文件保留时间,默认48小时

fileReservedTime=48

#Broker 的角色

#- ASYNC_MASTER 异步复制Master

#- SYNC_MASTER 同步双写Master

#- SLAVE 从节点

brokerRole=ASYNC_MASTER

#刷盘方式

#- ASYNC_FLUSH 异步刷盘

#- SYNC_FLUSH 同步刷盘

flushDiskType=ASYNC_FLUSH

flushDiskType=ASYNC_FLUSH

当然,还有很多很多配置文件,比如指定端口啊,指定是否自动创建主题啊,等等,这里就不说小先。

注:storeCheckPoint:checkpoint文件的作用是记录commitlog、consumequeue、index文件的刷盘时间点,文件固定长度4k,其中只用了该文件的前24个字节。查看其存储格式

5、同步rocketmq文件夹到各个节点。

到上一步,我们的环境和配置基本上都已经弄好了,只需要同步到各个节点即可。

tar-zcvf rocketmq.tar.gz rocketmq

scp rocketmq.tar.gz root@192.168.157.7:/usr/local/

scp rocketmq.tar.gz root@192.168.157.8:/usr/local/

scp rocketmq.tar.gz root@192.168.157.9:/usr/local/

登录各个节点,进行解压

tar-zxvf rocketmq.tar.gz

6、启动NameServer

我们按照上面的规划是打算启动四台NameServer,所以要在每个节点的rocketmq目录下执行启动NameServer的命令。

nohup sh bin/mqnamesrv&

如果我们只需要两个NameServer,那么我们需要将配置文件中的namesrvAddr去掉两个。

7、启动Broker.

按我们上面的规划,要启动4个Broker,两主两备,分别是:

192.168.157.6 主(Master)

192.168.157.7 备(Slaver)

192.168.157.8 主(Master)

192.168.157.9 备(Slaver)

所以我们的启动指定的配置文件也要注意。

#192.168.157.6

nohup sh bin/mqbroker-c conf/2m-2s-async/broker-a.properties&

192.168.157.7

nohup sh bin/mqbroker-c conf/2m-2s-async/broker-a-s.properties&

192.168.157.8

nohup sh bin/mqbroker-c conf/2m-2s-async/broker-b.properties&

192.168.157.9

nohup sh bin/mqbroker-c conf/2m-2s-async/broker-b-s.properties&

启动完后,可以用jps命令检查下进程是否存在。

8、因为我们要用SpringBoot来测试,所以关闭防火墙systemctl stop firewalld

五、测试集群

在之前,大家参照我的第一篇博文,相信已经搭建好了rocketmq console和springboot的测试程序,这里只需要修改配置文件,将NameServer指定为集群即可。

1、修改rocketmq console的application.propertiesrocketmq.config.namesrvAddr=192.168.157.6:9876;192.168.157.7:9876;192.168.157.8:9876;192.168.157.9:9876

2、修改springboot测试的application.ymlrocketmq:

name-server:192.168.157.6:9876;192.168.157.7:9876;192.168.157.8:9876;192.168.157.9:9876

3、分别启动程序

01b1d9776727a8ab158272c541007f25.png

因为一台电脑启动的程序太多了,我这里有点卡。

4、进入console,建立topic,指定broker-a和broker-b

访问:localhost:8080, 因为我这里是没有配置自动创建topic,所以这里要手动创建。

aa88d05ae5e90ce4413c3b8b7335e2a9.png

42bd41928efb1f581043cfe8361519e6.png

创建好后就可以用测试程序测试了,我们可以看到有4个NameServer和4个Broker

97d8f7fd074d677c264a2e9cdafd1da4.png

b3da48969be87d3d3f1ea163053b227c.png

看日志,也可以看到是连接上了

7e91fcf4f6693ea37c52b714a243daf7.png

5、发送消息测试

访问:http://localhost:8088/sendMsg 发送消息,会返回success,也可以看得到日志有消费。我们也可以看控制台哟消息,以及集群的消息消费接收情况。

我们也可以测试把8节点停了,可以看到8节点自动切换为Master了,然后把7节点启动起来,可以看到又切换回去了。

完成,收工先!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值