在当今大数据时代,消息队列系统成为了构建高可用、可扩展和可靠的分布式应用的重要组件之一。而Apache RocketMQ作为一款开源的分布式消息中间件,以其高吞吐量、低延迟和可靠性而备受青睐。为了满足大规模应用的需求,搭建RocketMQ集群是一种常见的部署方式。
本文将介绍如何在Linux系统上搭建RocketMQ双主双从集群。通过搭建双主双从集群,我们可以实现消息的高可用性和容错性,确保在单个Broker节点故障时仍能保持服务的正常运行。
首先,让我们了解一下RocketMQ集群的基本概念。RocketMQ集群由多个Broker节点组成,每个节点负责存储和传递消息。在双主双从集群中,我们将集群划分为两个主节点和两个从节点。主节点负责接收和处理消息的写入请求,而从节点则负责复制主节点的消息,并提供读取请求的服务。通过这种方式,我们可以实现消息的冗余备份和负载均衡,提高系统的可用性和性能。
这次我们要搭建的是双主双从集群异步
除了这种集群官方还支持以下几种集群方式:
集群搭建方式 | 冗余备份 | 同步方式 | 写入性能 | 数据一致性 | 可用性 | 链接 |
---|---|---|---|---|---|---|
单主单从集群 | 无 | 无 | 高 | 低 | 低 | 【Spring Cloud Alibaba】Linux安装RocketMQ |
多主多从集群 | 有 | 无 | 高 | 低 | 高 | |
双主双从集群异步 | 有 | 异步 | 高 | 低 | 高 | |
双主双从集群同步 | 有 | 同步 | 低 | 高 | 高 |
从上表可以看出,不同的集群搭建方式在冗余备份、同步方式、写入性能、数据一致性和可用性等方面存在差异。
- 冗余备份:单主单从集群没有冗余备份,其他集群搭建方式都有冗余备份。
- 同步方式:双主双从集群异步模式是异步复制,而双主双从集群同步模式和其他集群搭建方式是同步复制。
- 写入性能:单主单从集群和多主多从集群具有较高的写入性能,而双主双从集群异步模式的写入性能也较高,但双主双从集群同步模式的写入性能较低。
- 数据一致性:双主双从集群同步模式具有较高的数据一致性,其他集群搭建方式的数据一致性较低。
- 可用性:多主多从集群和双主双从集群(异步和同步模式)具有较高的可用性,而单主单从集群的可用性较低。
需要根据具体的业务需求和性能要求来选择适合的集群搭建方式。如果对于消息的可用性要求较高,可以选择多主多从集群或双主双从集群。如果对于写入性能要求较高,可以选择单主单从集群或双主双从集群异步模式。如果对于数据一致性要求较高,可以选择双主双从集群同步模式。
这次的搭建我们需要准备以下的服务器环境:
ip | 角色 | 名称 |
---|---|---|
192.168.65.130 | 从 | Linux003 |
192.168.65.131 | 从 | Linux004 |
192.168.65.132 | 主 | Linux001 |
192.168.65.133 | 主 | Linux002 |
第一步,安装前的准备
安装的这些步骤博主原来都写过。
安装jdk:Linux安装Java环境(OracleJDK) 安装并解压rockemq:【Spring Cloud Alibaba】Linux安装RocketMQ
关闭四台服务器的防火墙:
java
systemctl stop firewalld.service
第二步,启动NameServer
我们使用下面两台机器作为NameServer的集群
ip | 角色 | 名称 |
---|---|---|
192.168.65.132 | 主 | Linux001 |
192.168.65.133 | 主 | Linux002 |
两台机器执行一样的操作:
运行bin文件夹里面的mqnamesrv
脚本
java
sh mqnamesrv
出现下面语句则启动成功
java
The Name Server boot success. serializeType=JSON
编写启动脚本后台运行
java
vim startupmqnamesrv.sh
添加内容如下
java
nohup sh bin/mqnamesrv &
运行启动脚本即可后台运行
第三步,编辑双主节点配置文件
配置文件 | 描述 | 分配 |
---|---|---|
broker-a.properties | Broker A主节点 的配置文件,用于配置Broker A节点的相关参数和属性。 |
Linux001 |
broker-a-s.properties | Broker A从节点 的安全配置文件,用于配置Broker A节点的安全相关参数和属性。 |
Linux003 |
broker-b.properties | Broker B主节点 的配置文件,用于配置Broker B节点的相关参数和属性。 |
Linux002 |
broker-b-s.properties | Broker B从节点 的安全配置文件,用于配置Broker B节点的安全相关参数和属性。 |
Linux004 |
Linux001:
java
vim 2m-2s-async/broker-a.properties
配置NameServer
的地址为
java
namesrvAddr=192.168.65.132:9876;192.168.65.133:9876
- brokerClusterName=DefaultCluster:指定Broker所属的集群名称,这里设置为"DefaultCluster"。
- brokerName=broker-a:指定Broker的名称,这里设置为"broker-a"。
- brokerId=0:指定Broker的唯一标识符,这里设置为0。
- deleteWhen=04:指定消息文件的删除时间,这里设置为04,表示消息文件在存储超过4天后会被删除。
- fileReservedTime=48:指定消息文件的保留时间,这里设置为48,表示消息文件在不活动超过48小时后会被删除。
- brokerRole=ASYNC_MASTER:指定Broker的角色,这里设置为ASYNC_MASTER,表示该Broker是双主双从集群中的异步主节点。
- flushDiskType=ASYNC_FLUSH:指定消息刷盘方式,这里设置为ASYNC_FLUSH,表示消息异步刷盘到磁盘。
- namesrvAddr=192.168.65.132:9876;192.168.65.133:9876:指定NameServer的地址,这里设置了两个NameServer的地址,分别是192.168.65.132:9876和192.168.65.133:9876。
Linux002:
java
vim 2m-2s-async/broker-b.properties
Linux003:
java
vim 2m-2s-async/broker-a-s.properties
Linux004:
java
vim 2m-2s-async/broker-b-s.properties
第四步,启动Broker
Linux001:
java
vim startupmqbroker.sh
java
nohup sh bin/mqbroker -c /opt/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-a.properties &
启动
java
sh startupmqbroker.sh
查看是否启动成功
java
ps -ef | grep rocket
Linux002:
java
vim startupmqbroker.sh
java
nohup sh bin/mqbroker -c /opt/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-b.properties &
java
sh startupmqbroker.sh
java
ps -ef | grep rocket
Linux003:
java
vim startupmqbroker.sh
java
nohup sh bin/mqbroker -c /opt/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-a-s.properties &
java
sh startupmqbroker.sh
java
ps -ef | grep rocket
Linux004:
java
vim startupmqbroker.sh
java
nohup sh bin/mqbroker -c /opt/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-b-s.properties &
java
sh startupmqbroker.sh
java
ps -ef | grep rocket
第五步,验证成果
使用mqadmin命令查看集群环境:
java
sh mqadmin clusterList -n 127.0.0.1:9876
- Cluster Name:集群名称,这里是"DefaultCluster"。
- Broker Name:Broker节点名称,这里有两个节点,分别是"broker-a"和"broker-b"。
- BID:Broker节点的唯一标识符,0表示主节点,1表示从节点。
- Addr:Broker节点的地址和端口号。
- Version:RocketMQ的版本号,这里是"V491"。
- InTPS(LOAD):消息的入站速率和负载情况。
- OutTPS(LOAD):消息的出站速率和负载情况。
- PCWait(ms):消息生产者和消费者的等待时间。
- Hour:Broker节点的运行时间。
- SPACE:消息存储空间的使用情况。
可以成功看到集群已经搭建成功!!
在本文中,我们详细介绍了如何在Linux上搭建RocketMQ双主双从集群。通过设置双主双从集群,我们可以实现高可用性、容错性、负载均衡和可扩展性。我们提供了逐步指南,包括下载和安装RocketMQ、配置集群、启动NameServer和Broker节点以及验证集群状态。我们还解释了双主双从集群与其他集群搭建方式的区别,以及不同模式的优势和适用场景。
搭建RocketMQ双主双从集群是构建可靠消息传递系统的重要一步。通过合理配置和调优,我们可以满足不同业务需求的可用性、一致性和性能要求。在实际应用中,我们应根据具体情况选择适合的集群搭建方式,并进行相应的配置和管理。
希望本文对大家在Linux上搭建RocketMQ双主双从集群有所帮助。如果大家有任何问题或疑问,请随时向我提问