前置条件及效果图

条件:

两台服务器,个人是两台腾讯云服务器(其中嫖的朋友一个);

版本:

  1. rocketmq-version:4.4.0
  2. rocketmq-console(mq控制台)
  3. Java:1.8
  4. maven:3.6.3

集群模式选择:

  1. 单master
  • 这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试。
  1. 多master
  • 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
  • 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。
  1. 多master和多slave(同步)-----本次搭建的模式
  • 优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
  • 缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。
  1. 多master和多slave(异步)
  • 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;
  • 缺点:Master宕机,磁盘损坏情况下会丢失少量消息。

下载地址:

rocketMq下载地址:https://rocketmq.apache.org/download

搭建过程

序号 IP 角色 架构模式
1 xxxx.xxx.246 nameserver、brokerserver Master1、Slave2
2 xxx.xxx..174 nameserver、brokerserver Master2、Slave1

配置Nameserver

NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

作用:管理Broker;举例:各个邮局的管理机构

vim /etc/hosts
# nameserver
xxx.xxx.xxx.174 rocketmq-nameserver1
xxx.xxx.xxx.246 rocketmq-nameserver2

重启下网卡使得配置生效:

# 查看网卡名字
systemctl list-unit-files | grep -i network
# 根据名字重启
systemctl restart network

关闭防火墙,开放端口号:在腾讯云中我是开放了所有端口。

# 关闭防火墙
systemctl stop firewalld.service
# 查看防火墙的状态
firewall-cmd --state
# 禁止firewall开机启动
systemctl disable firewalld.service

配置环境变量

Java环境配置和maven的配置:https://www.cnblogs.com/xbhog/p/15213838.html

rocketMQ的配置:将下载的包上传至服务器,获得其对应路径,进行配置

vim /etc/profile

#set rocketmq 在profile文件的末尾加入如下命令
ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.4.0-bin-release
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH

配置生效:

source /etc/profile

配置主从节点(xxx.xxx.xxx.246服务器)

保证一主一从:

xxx.xxx.xxx.246服务器修改的配置文件:broker-b.properties,broker-a-s.properties

xxx.xxx.xxx.174服务器修改的配置文件:broker-a.properties,broker-b-s.properties

创建所需要的存储路径:

主节点的文件创建:

mkdir -p /home/ubuntu/rocketmq/store
mkdir /home/ubuntu/rocketmq/store/commitlog
mkdir /home/ubuntu/rocketmq/store/consumequeue
mkdir /home/ubuntu/rocketmq/store/index

从节点的文件创建:

mkdir -p /home/ubuntu/rocketmq/store-s
mkdir /home/ubuntu/rocketmq/store-s/commitlog
mkdir /home/ubuntu/rocketmq/store-s/consumequeue
mkdir /home/ubuntu/rocketmq/store-s/index

注意的是,主节点和从节点使用的文件不能一样,否则启动不了。

进入路径:/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync(同步配置文件)

主配置文件:broker-b.properties

下面的配置的时候只需要修改以下几点:

  1. brokerIP1:(配置服务器的外网地址)非常重要,否则启动以后,在mq-console会出现内网地址
  2. namesrvAddr:配置两台服务器的外网地址加端口号
  3. brokerRole=SYNC_MASTER(主节点)
  4. storePathRootDir
  5. commitLog 存储路径
  6. storePathConsumeQueue 消费队列存储路径存储路径
  7. storePathIndex 消息索引存储路径
  8. storeCheckpoint 文件存储路径
  9. abort 文件存储路径
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#非常重要,否则启动以后,在mq-console会出现内网地址
brokerIP1=xxx.xxx.xxx.246
#nameServer地址,分号分割
namesrvAddr=xxx.xxx.xxx.246:9876;xxx.xxx.xxx.174:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/ubuntu/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/home/ubuntu/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/ubuntu/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/ubuntu/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/ubuntu/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/ubuntu/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH

从配置文件:broker-a-s.properties

下面的配置的时候只需要修改以下几点:

  1. brokerIP1:(配置服务器的外网地址)非常重要,否则启动以后,在mq-console会出现内网地址
  2. namesrvAddr:配置两台服务器的外网地址加端口号
  3. brokerRole=SLAVE(从节点)
  4. storePathRootDir
  5. commitLog 存储路径
  6. storePathConsumeQueue 消费队列存储路径存储路径
  7. storePathIndex 消息索引存储路径
  8. storeCheckpoint 文件存储路径
  9. abort 文件存储路径
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
brokerIP1=xxx.xxx.xxx.246
#nameServer地址,分号分割
namesrvAddr=xxx.xxx.xxx.246:9876;xxx.xxx.xxx.174:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/ubuntu/rocketmq/store-s
#commitLog 存储路径
storePathCommitLog=/home/ubuntu/rocketmq/store-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/ubuntu/rocketmq/store-s/consumequeue
#消息索引存储路径
storePathIndex=/home/ubuntu/rocketmq/store-s/index
#checkpoint 文件存储路径
storeCheckpoint=/home/ubuntu/rocketmq/store-s/checkpoint
#abort 文件存储路径
abortFile=/home/ubuntu/rocketmq/store-s/abort
#限制的消息大小
maxMessageSize=65536
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

启动服务

在xxx.xxx.xxx.246服务器上执行启动操作:

首先需要修改启动脚本文件(runbroker):

cd rocketmq-all-4.4.0-bin-release/bin
vim runbroker.sh
# 替换原来的信息:原来大小是G
#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

同理修改启动脚本(runserver)

cd rocketmq-all-4.4.0-bin-release/bin
vim runserver.sh
# 替换原来的信息:原来大小是G
#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

启动nameserve:

cd rocketmq-all-4.4.0-bin-release/bin

nohup sh mqnamesrv &

启动broker,并设置启动日志的存放地址(启动前需要创建日志路径):

nohup sh mqbroker -c ./conf/2m-2s-sync/broker-b.properties >./broker-b.log &
nohup sh mqbroker -c ./conf/2m-2s-sync/broker-a-s.properties >./broker-a-s.log &

查看启动效果(启动成功):

root@VM-4-11-ubuntu:/home/ubuntu/rocketmq-all-4.4.0-bin-release# jps
796522 NamesrvStartup
2081303 BrokerStartup
2080501 BrokerStartup

服务器(xxx.xxx.xxx.174)相关操作如上。

客户端搭建请求集群

集群监控平台搭建

RocketMQ有一个对其扩展的开源项目incubator-rocketmq-externals,这个项目中有一个子模块叫rocketmq-console,这个便是管理控制台项目了,先将incubator-rocketmq-externals拉到本地,因为我们需要自己对rocketmq-console进行编译打包运行。

git clone https://github.com/apache/rocketmq-externals
cd rocketmq-console
mvn clean package -Dmaven.test.skip=true

打包前需要在rocketmq-console中配置下namesrv集群地址,

cd \rocketmq-console\src\main\resources

# 编辑application.properties
server.contextPath=
server.port=8080 ### SSL setting
#server.ssl.key-store=classpath:rmqcngkeystore.jks
#server.ssl.key-store-password=rocketmq
#server.ssl.keyStoreType=PKCS12
#server.ssl.keyAlias=rmqcngkey #spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=xxx.xxx.xxxx.174:9876;xxx.xxx.xxx.246:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
#set the message track trace topic if you don't want use the default one
rocketmq.config.msgTrackTopicName=
rocketmq.config.ticketKey=ticket #Must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
rocketmq.config.loginRequired=false

生成jar包,上传服务器,

启动:nohup java -jar rocketmq-console-ng-1.0.1.jar >./rockermq-console.log &

请求地址为:http://xx.xxx.xxx.246:8080/#/cluster

客户端请求

pom.xml配置

<properties>
<java.version>1.8</java.version>
<rocketmq-spring-boot-starter-version>2.0.3</rocketmq-spring-boot-starter-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--rocket-->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.9.3</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>${rocketmq-spring-boot-starter-version}</version>
</dependency>
</dependencies>
# application.properties
rocketmq.name-server=xxx.xxx.xxx.174:9876;xxx.xxx.xxx.246:9876
rocketmq.producer.group=my-group

结果:Receive message:hello springboot rocketmq

【环境搭建】RocketMQ集群搭建的更多相关文章

  1. RocketMQ集群搭建(3m-3s-async)

    RocketMQ集群搭建(3m-3s-async) 各角色介绍 角色 作用 Producer 消息发送者,将消息发送到 Broker.无状态,其与NameServer集群中的一个节点建立长连接,定期从 ...

  2. Linux环境下Hadoop集群搭建

    Linux环境下Hadoop集群搭建 前言: 最近来到了武汉大学,在这里开始了我的研究生生涯.昨天通过学长们的耐心培训,了解了Hadoop,Hdfs,Hive,Hbase,MangoDB等等相关的知识 ...

  3. 环境搭建-Hadoop集群搭建

    环境搭建-Hadoop集群搭建 写在前面,前面我们快速搭建好了centos的集群环境,接下来,我们就来开始hadoop的集群的搭建工作 实验环境 Hadoop版本:CDH 5.7.0 这里,我想说一下 ...

  4. 环境搭建-CentOS集群搭建

    环境搭建-CentOS集群搭建 写在前面 最近有许多小伙伴问我,大数据的hadoop分布式集群该如何去搭建.所以,想着,就写一篇博客,帮助到更多刚入门大数据的人.本博客会一步一步带你实现一个Hadoo ...

  5. 4 种高可用 RocketMQ 集群搭建方案!

    背景 笔者所在的业务线,最初化分为三个服务,由于业务初期业务复杂度相对简单,三个业务服务都能很好的独立完成业务功能. 随着产品迭代,业务功能越来越多后慢慢也要面对高并发.业务解耦.分布式事务等问题,所 ...

  6. RocketMQ集群搭建方式

    各角色介绍 Producer:消息的发送者:举例:发信者 Consumer:消息接收者:举例:收信者 Broker:暂存和传输消息:举例:邮局 NameServer:管理Broker:举例:各个邮局的 ...

  7. RocketMQ集群搭建

    1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅 ...

  8. CentOS7.4上搭建rocketMQ集群

    一.rocketMQ集群部署方案优缺点对比: 多Master模式(2m-noslave) : 一个集群无Slave,全是Master,例如2个Master或者3个Master 优点:配置简单,单个Ma ...

  9. 搭建RocketMQ集群

    一.环境及准备 集群环境: 软件版本: 部署前操作: 关闭防火墙,关闭selinux(生产环境按需关闭或打开) 同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 [root@es1 ~]# ...

  10. centos6搭建redis集群搭建(单机多节点)

    一.安装redis 1.安装gcc环境 yum install gcc-c++ 2.下载源码包并解压 wget http://download.redis.io/releases/redis-3.2. ...

随机推荐

  1. Python实现改进后的Bi-RRT算法实例

    Python实现改进后的Bi-RRT算法实例 1.背景说明 以下代码是参照上海交通大学海洋工程国家重点实验室<基于改进双向RRT的无人艇局部路径规划算法研究>的算法思想实现的. 2.算法流 ...

  2. Allure的简单使用

    Allure的简单使用 1.Allure简介 简单的理解下,可以把Allure当成一个用于生成美观测试报告的开源工具,配合Pytest测试框架使用更佳. 也就是说,Allure是在Pytest执行测试 ...

  3. 关于AWS-EC2或者多个资源的tag的批量添加-基于Resource Groups & Tag Editor 和 命令处理

    今天收到一个请求,需要对公司所有的ec2-添加上两个成本IO标签,因为机器太多了 想到了如下两种方案去批量处理 方案一:利用aws的 [Management Tools]下的 Resource Gro ...

  4. 洛谷P4197 Peaks (Kruskal重构树)

    读题,只经过困难值小于等于x的路径,容易想到用Kruskal重构树:又要查询第k高的山峰,我们选择用主席树求解. 先做一棵重构树,跑一遍dfs,重构树中每一个非叶子节点对应一段区间,我们开range[ ...

  5. 跨平台客户端Blazor方案尝试

    一.方案选择 Electron/MAUI + Blazor(AntDesgin blazor) BlazorApp:Blazor Razor页面层,抽象独立层,被BlazorAppElectron/B ...

  6. Java中的名称命名规范

    包名:多单词组成时所有字母都小写:xxxyyyzzz 类名.接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz 变量名.方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首 ...

  7. .NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度

    作业调度其实就是一个定时器,定时完成某件事, 比如:每分钟执行一次,每小时执行一次,每天执行一次,第二周几执行,每月几号几点执行,间隔多少个小时执行一次等. 作业类:XiaoFeng.Threadin ...

  8. 一天十道Java面试题----第五天(spring的事务传播机制------>mybatis的优缺点)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 41.spring的事务传播机制 42 .spring事务什么时候会失效 43 .什么的是bean的自动装配.有哪些方式? ...

  9. 9.pygame-键盘捕获

    创建英雄类 """英雄精灵""" class Hero(GameSprite): def __init__(self): # 调用父类方法, ...

  10. 【JavaSE】面向对象三大特征——封装、继承、多态

    前言:本文主要介绍思想 封装 封装这一概念并不仅存在与面向对象中,甚至说封装这一概念不仅限于编程中,其实生活中的封装无处不在.比如 需求:你到银行取钱 参数:你只需要提供银行卡和密码 返回值:柜员会将 ...