高可用RocketMQ集群搭建

本文档详细介绍了如何在两台服务器上搭建高可用的RocketMQ集群,包括双Nameserver、双主Broker和双从Broker的配置,涵盖了安装Java环境、NameServer、Broker的步骤,以及解决内存不足和端口开放等问题。此外,还提到了可选的rocketmq-console安装流程。

一、集群搭建可选方式

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目录下

cd /usr/local/
mkdir java

解压jdk安装包

tar zxvf jdk-8u161-linux-x64.tar.gz
1.3.配置环境变量
vi /etc/profile

在文件的最下方添加

JAVA_HOME=/usr/local/java/jdk1.8.0_161
CLASSPATH=.:$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

使环境变量修改生效

source /etc/profile
1.4.验证安装是否成功
java -version
2.安装NameServer

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

2.1.创建data目录并进入到data目录
mkdir /data
2.2.下载RocketMQ安装包
[root@rocketmq-2 data]# wget https://mirror.bit.edu.cn/apache/rocketmq/4.7.0/rocketmq-all-4.7.0-bin-release.zip
2.3.解压RocketMQ安装包
[root@rocketmq-2 data]# unzip rocketmq-all-4.7.0-bin-release.zip
2.4.启动NameServer
[root@rocketmq-2 data]# nohup sh /data/rocketmq-all-4.7.0-bin-release/bin/mqnamesrv &
2.5.验证NameServer是否启动成功
[root@rocketmq-2 data]# jps
1842 NamesrvStartup

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

2.6 停止NameServer
[root@rocketmq-2 rocketmq-all-4.7.0-bin-release]# sh /data/rocketmq-all-4.7.0-bin-release/bin/mqshutdown namesrv
3.安装Br
### RocketMQ 高可用集群搭建教程 #### 了解RocketMQ架构 Apache RocketMQ 是一款分布式消息中间件,支持高吞吐量和低延迟的消息传递。为了确保系统的高可用性和可靠性,在生产环境中通常会部署多副本的Broker实例来组成集群[^2]。 #### 准备工作环境 在开始之前,确认已准备好至少两台服务器用于构建主从结构的Broker节点。每一对Broker之间保持网络互通,并且时间同步服务正常运行。此外,还需安装JDK并设置好JAVA_HOME环境变量[^4]。 #### 安装与初始化 下载官方发布的最新稳定版本二进制包至各目标机器上解压。对于每一个打算作为Name Server的角色来说,只需启动该进程而无需额外配置;而对于计划成为Broker的服务端,则需依据实际需求调整`broker.conf`中的参数设定[^1]。 #### 修改默认配置文件 进入解压缩后的目录下的`conf/2m-2s-sync`路径找到适用于双Master加双Slave模式同步刷盘方式的模板文件。重点编辑如下几项: - `brokerRole=ASYNC_MASTER` 或者 `SYNC_MASTER`: 设置当前Broker角色为主节点还是异步复制类型的从节点。 - `flushDiskType=ASYN_FLUSH` : 控制磁盘刷新机制为异步操作以提高性能。 - 更新监听IP(`listenPort`) 和其他必要的连接属性以便于远程访问控制。 ```properties # Example of broker configuration file snippet. brokerClusterName=DefaultCluster brokerName=broker-a brokerId=0 namesrvAddr=localhost:9876 storePathRootDir=/home/wangym/rocketmq/store storePathCommitLog=/home/wangym/rocketmq/store/commitlog ``` #### 启动组件 按照先启动NameServer再依次开启各个Broker的原则执行命令行指令完成整个集群的激活过程。注意观察日志输出确保没有任何错误提示发生。 ```bash nohup sh bin/mqnamesrv & nohup sh bin/mqbroker -n localhost:9876 & ``` #### 测试验证 通过发送测试消息到主题(Topic),然后尝试读取消息的方式检验集群是否能够正确处理请求。可以借助工具类如`tools.sh`来进行简单的生产和消费模拟实验[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值