首页 运维干货高可用RocketMQ集群搭建

高可用RocketMQ集群搭建

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

一、集群搭建可选方式

RocketMQ的物理部署结构图如下:

高可用RocketMQ集群搭建插图

Producer和Consumer对应的是我们的应用程序,多个NameServer实例组成集群,但相互独立,没有信息交换,所以对于NameServer来说部署两个或两个以上即可保证高可用,对于Broker来说,我们可以选择以下几种集群部署方式:

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会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。

本篇文章介绍如何用两台服务器搭建双Nameserver、双主Broker、双从Broker、无单点故障的高可用RocketMQ集群,两台服务器IP分别为:192.168.31.186和192.168.31.231。

二、安装环境

  • Linux版本:CenterOS 7
  • RocketMQ版本:4.7.0
  • Java版本:jdk1.8

三、安装步骤

1.安装java环境

在两台机器上分别安装Java环境,以其中一台为例。

1.1.下载jdk安装包

可以上Oracle官网下载Linux版的jdk安装包,jdk-8u161-linux-x64.tar.gz

1.2.上传jdk包到服务器

在/usr/local目录下创建一个java目录,并将jdk包上传至java目录下

解压jdk安装包

1.3.配置环境变量

在文件的最下方添加

使环境变量修改生效

1.4.验证安装是否成功

2.安装NameServer

在两台机器上分别安装启动NameServer,以其中一台为例。

2.1.创建data目录并进入到data目录

2.2.下载RocketMQ安装包

2.3.解压RocketMQ安装包

2.4.启动NameServer

2.5.验证NameServer是否启动成功

通过jps命令查看有NameServer进程表示启动成功,NameServer的日志文件在/root/logs/rocketmqlogs目录中,通过/data/rocketmq-all-4.7.0-bin-release/conf/logback_namesrv.xml可以配置日志文件目录。

2.6 停止NameServer

3.安装Broker

每台机器上都要启动一个Master角色和Slave角色的Broker,并互为主备,即在A机器上启动broker-a的master节点、broker-b-s的slave节点;在B机器上启动broker-b的master节点、broker-a-s的slave节点。

在conf目录下提供了几种集群方式配置文件的示例,2m-noslave=双master模式;2m-2s-sync=双master双slave同步双写模式;2m-2s-async=双master双slave异步复制模式。

本次安装采用2m-2s-async模式

3.1 编辑broker配置文件

在192.168.31.186机器上的Master Broker的配置文件broker-a.properties

在192.168.31.186机器上的Slave Broker的配置文件broker-b-s.properties

在192.168.31.231机器上的Master Broker的配置文件broker-b.properties

在192.168.31.231机器上的Slave Broker的配置文件broker-a-s.properties

3.2 启动broker

启动时,先启动两台机器上的Master节点,再启动两台机器上的Slave节点。

192.168.31.186上启动broker-a

192.168.31.231上启动broker-b

192.168.31.231上启动broker-a-s

192.168.31.186上启动broker-b-s

3.3 注意事项
3.3.1 内存不足

  • 原因:broker的java启动内存参数配置的是8g,请根据服务器实际资源做调整。
  • 解决方案:修改内存参数,在bin/runbroker.sh文件中

3.3.2 开放RocketMQ相关端口

NameServer的9876端口、Broker的10911、11011、10909、11009端口

可以选择关闭服务器防火墙或者开放相应的端口

3.4 验证

查看broker.log日志文件输出正常,日志文件的目录在/data/rocketmq-all-4.7.0-bin-release/conf/logback_broker.xml可以查看/修改

3.5 mqadmin工具

查看集群情况

mqadmin还有其他的用法,具体的可以参考文档。

3.6 关闭服务

先关闭Broker、再关闭NameServer,服务启动的时候正好相反。

[root@rocketmq-1 data]# wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

[root@rocketmq-1 data]# tar zxvf apache-maven-3.5.4-bin.tar.gz

[root@rocketmq-1 data]# vi /etc/profile

export MAVEN_HOME=/data/apache-maven-3.5.4
export PATH=MAVEN_HOME/bin:PATH

[root@rocketmq-1 data]# source /etc/profile
验证
[root@rocketmq-1 data]# mvn -v

[root@rocketmq-1 data]# unzip rocketmq-externals-master.zip

进入rocketmq-console目录
[root@rocketmq-1 data]# cd rocketmq-externals-master/rocketmq-console/
打包
[root@rocketmq-1 rocketmq-console]# mvn clean package -Dmaven.test.skip=true

[root@rocketmq-1 rocketmq-console]# java -jar target/rocketmq-console-ng-1.0.1.jar --rocketmq.config.namesrvAddr='192.168.31.186:9876;192.168.31.231:9876'

http://rocketmq.apache.org/docs/quick-start/
https://github.com/apache/rocketmq/tree/master/docs/cn
https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console

本文链接:http://www.yunweipai.com/36987.html

网友评论comments

发表评论

电子邮件地址不会被公开。

暂无评论

Copyright © 2012-2020 YUNWEIPAI.COM - 运维派
扫二维码
扫二维码
返回顶部