RocketMQ多Master多Slave模式部署
每个 Master 配置一个 Slave,有多对Master-Slave,HA采用同步双写方式,主备都写成功,向应用返回成功。
优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高。
缺点:性能比异步复制模式略低,大约低10%左右,发送单个消息的RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。
### 先启动 NameServer
### 在机器 A,启动第一个 Master
### 在机器 B,启动第二个 Master
### 在机器 C,启动第一个 Slave
### 在机器 D,启动第二个 Slave
以上 Broker 与 Slave 配对是通过指定相同的brokerName 参数来配对,Master的 BrokerId 必须是 0,Slave 的BrokerId 必须是大与 0 的数。
另外一个 Master 下面可以挂载多个 Slave,同一 Master 下的多个 Slave通过指定不同的 BrokerId来区分。
1. 服务器环境如下图所示,四台机器,IP位7为主节点,149是7的从节点。105是主节点,160是105的从节点
序号 IP 用户名 角色 模式 1 192.168.1.7 root nameServer1,brokerServer1 Master1 2 192.168.1.105 root nameServer2,brokerServer2 Master2 3 192.168.1.149 root nameServer3,brokerServer3 Master1-slave1 4 192.168.1.160 root nameServer4,brokerServer4 Master2-slave1
2. Hosts添加信息
IP NAME 192.168.1.7 rocketmq-nameserver1 192.168.1.7 rocketmq-master1 192.168.1.105 rocketmq-nameserver2 192.168.1.105 rocketmq-master2 192.168.1.149 rocketmq-nameserver3 192.168.1.149 rocketmq-master1-slave1 192.168.1.160 rocketmq-nameserver4 192.168.1.160 rocketmq-master2-slave1
3.编辑hosts文件【4台机器】
# vim /etc/hosts
4.上传解压【4台机器】
# 上传alibaba-rocketmq-3.2.6.tar.gz文件至/home/xm6f/dev # cd /home/xm6f/dev # tar -zxvf alibaba-rocketmq-3.2.6.tar.gz # mv alibaba-rocketmq rocketmq
5.创建存储路径【4台机器】
# mkdir /home/xm6f/dev/rocketmq/store # mkdir /home/xm6f/dev/rocketmq/store/commitlog # mkdir /home/xm6f/dev/rocketmq/store/consumequeue # mkdir /home/xm6f/dev/rocketmq/store/index
6.RocketMQ配置文件【4台机器】--该文件有点类似于Redis里面的redis.con
# sudo vim /home/xm6f/dev/rocketmq/conf/2m-2s-async/broker-a.properties ##192.168.1.7配置文件 # sudo vim /home/xm6f/dev/rocketmq/conf/2m-2s-async/broker-a-s.properties ##192.168.1.149配置文件 # sudo vim /home/xm6f/dev/rocketmq/conf/2m-2s-async/broker-b.properties ##192.168.1.105配置文件 # sudo vim /home/xm6f/dev/rocketmq/conf/2m-2s-async/broker-b-s.properties ##192.168.1.160配置文件
broker-a.properties文件
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4: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
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/xm6f/dev/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/home/xm6f/dev/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/xm6f/dev/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/xm6f/dev/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/xm6f/dev/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/xm6f/dev/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误
brokerIP1=192.168.1.7
broker-a-s.properties文件
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4: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
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/xm6f/dev/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/home/xm6f/dev/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/xm6f/dev/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/xm6f/dev/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/xm6f/dev/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/xm6f/dev/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误
brokerIP1=192.168.1.149
broker-b.properties文件
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4: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
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/xm6f/dev/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/home/xm6f/dev/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/xm6f/dev/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/xm6f/dev/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/xm6f/dev/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/xm6f/dev/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误
brokerIP1=192.168.1.105
broker-b-s.properties文件
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4: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
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/xm6f/dev/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/home/xm6f/dev/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/xm6f/dev/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/xm6f/dev/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/xm6f/dev/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/xm6f/dev/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误
brokerIP1=192.168.1.160
7. 修改启动脚本参数【4台机器】
# vim /home/xm6f/dev/rocketmq/bin/runbroker.sh JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m" # vim /home/xm6f/dev/rocketmq/bin/runserver.sh JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m"
注意:启动脚本设置不合理,可能报如下异常:
Error occurred during initialization of VM
Too small new size specified
8.防火墙
默认启动用使用3个端口9876,10911,10912
分别代表名称服务端口,broker端口,broker ha端口。
ha端口haListenPort表示Master监听Slave请求的端口,默认为服务端口+1
添加到/etc/sysconfig/iptables的filter表INPUT链中
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9876 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 10911 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 10912 -j ACCEPT
添加完成后重启防火墙
service iptables restart
9.启动NameServer【4台机器】
# cd /home/xm6f/dev/rocketmq/bin # sudo nohup sh mqnamesrv &
10.启动BrokerServer 【4台机器】
注意配置文件需要根据实际配置/broker-X.properties
# cd /home/xm6f/dev/rocketmq/bin # 192.168.1.7 # sudo nohup sh mqbroker -c /home/xm6f/dev/rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 & # 192.168.1.105 # sudo nohup sh mqbroker -c /home/xm6f/dev/rocketmq/conf/2m-2s-async/broker-b.properties >/dev/null 2>&1 & # 192.168.1.149 # sudo nohup sh mqbroker -c /home/xm6f/dev/rocketmq/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 & # 192.168.1.160 # sudo nohup sh mqbroker -c /home/xm6f/dev/rocketmq/conf/2m-2s-async/broker-b-s.properties >/dev/null 2>&1 &
说明:IP位7为主节点,149是7的从节点。105是主节点,160是105的从节点
输入jps看到如上图所示表示成功
停止服务broker:
# sh mqshutdown broker
11.在tomcat中部署rocketmq-console.war
修改rocketmq-console配置文件,找到/tomcat-8082/webapps/rocketmq-console/WEB-INF/classes/config.properties文件,添加如下:
rocketmq.namesrv.addr=192.168.1.7:9876;192.168.1.105:9876;192.168.1.149:9876;192.168.1.160:9876 throwDone=true
启动tomcat,在浏览器输入:http://192.168.1.105:8082/rocketmq-console/
多Master多Slave可以保证实时消费,比如说:我有一主一从,如果主机宕机,那么我从主机上获得的数据如果在没有从节点,那么这些消息将在主节点重启之前将无法被消费,直到主节点启动,如果这个主节点里面有从节点,从节点可以对外提供服务,并且从节点有从主节点同步过来的数据,那么还是可以将这些消息实时地消费掉。这点多Master方式无法做到。
当宕机的主节点起来之后,会和从节点进行数据的同步,不会重复消费刚刚消费过的数据。
12.数据清理
# cd /home/xm6f/devrocketmq/bin # sh mqshutdown broker # sh mqshutdown namesrv # --等待停止 # rm -rf /home/xm6f/devrocketmq/store # mkdir /home/xm6f/devrocketmq/store # mkdir /home/xm6f/devrocketmq/store/commitlog # mkdir /home/xm6f/devrocketmq/store/consumequeue # mkdir /home/xm6f/devrocketmq/store/index # --按照上面步骤重启NameServer与BrokerServer
启动时报错:
注释runserver.sh和runbroker.sh以下,并添加JAVA_HOME地址
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/home/xm6f/dev/jdk1.7.0_80 #[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/home/xm6f/dev/jdk1.7.0_80 #[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"export JAVA_HOME="/home/xm6f/dev/jdk1.7.0_80" export JAVA="$JAVA_HOME/bin/java" .....
转载于:https://www.cnblogs.com/linjiqin/p/7511062.html
RocketMQ多Master多Slave模式部署相关推荐
- redis配置master-slave模式
由于云服务器存在闪断现象,项目线上会存在基于redis的功能在闪断时段内出现异常,所以redis需要做master-slave模式.直接上代码: 原单机redis,RedisConnectionFac ...
- rocketMq双master集群模式下故障演练
在上一篇,我们简单搭建了rocketMq双master的集群,沿用这个思路,这一篇我们用代码来模拟一下rocketMq集群故障情况下完成自动切换的效果. 1.启动两个节点的broker和nameser ...
- linux环境下rocketMq双master集群搭建
为什么要使用集群 在生产环境中,经常会有意外的情况发生,对于rocketmq也不例外,单节点情况下,如果出现网络闪断,服务器掉电或宕机之类的,如果服务器不能及时恢复,很可能造成丢消息的情况,因此,集群 ...
- RocketMQ的各种集群模式的搭建和消息可靠性保证和服务可用性描述
RocketMQ集群搭建的特点 NameServer是一个几乎无状态的节点,可直接启动集群部署.节点之间没有任何信息同步,并且集群的NameServer之间都不知道彼此的存在. Broker部署相对复 ...
- Bind view的master与slave部署与测试
上次写过一篇关于"centos 6.2安装bind 9.8.2 master.slave与自动修改后更新",地址为http://dl528888.blog.51cto.com/23 ...
- 适合MySQL master/slave模式的JDBC driver: lbpool
去年写了篇MySQL分表实现上百万上千万记录分布存储的批量查询设计模式的文章,思路是基于MySQL手动分表的.缺点是增加了程序的复杂性.现在有一个更简单和方便的现成的产品了,那就是lbpool lbp ...
- NVMe协议逻辑实现、nvme固态硬盘,支持master和slave两种模式,FPGA、SSD控制器,接口统一标准化、简单方便
NVMe协议逻辑实现.nvme固态硬盘,支持master和slave两种模式,FPGA.SSD控制器,接口统一标准化.简单方便. 1.支持admin和nvme命令集. 2.支持随机和顺序读写,顺序读写 ...
- RocketMQ 简单梳理 及 集群部署笔记【转】
一.RocketMQ 基础知识介绍 Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ ...
- RocketMQ 简单梳理 及 集群部署笔记
一.RocketMQ 基础知识介绍 Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ ...
最新文章
- 同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)
- 给你一个网站你是如何来渗透测试的
- 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例二 | 修改边界条件 | 使用递推方法证明 )
- Android UI之ProgressBar
- powerpoint 2016表格中添加行
- uuid.randomuuid()回重复么_【编译器玄学研究报告】第三期——“O0” 就能逃出优化的魔爪么?...
- 程序员如何学习一门新的编程语言
- 全国高校计算机能力挑战赛Java试题(一)
- mongodb与mysql优缺点
- “阀值”与“阈值”的区别
- 怎么把计算机隐藏文件显示出来,隐藏文件夹怎么显示出来
- 最终幻想14 服务器维护,《FF14》服务器遭到攻击 官方补偿方案今日不收时长费...
- 学习 Linux 有哪些好处?
- ArcGIS必会的几个工具的应用
- 简单发送QQ邮件教程
- 我薅了四年的国内外免费服务器
- Markdown极简教程
- Hyperspectral Band Selection by Multitask Sparsity Puisuit
- 视频去水印怎么去?这几款视频去水印工具推荐给你
- 建筑八大员培训湖北质量员培训工程质量监督管理的措施和原则
热门文章
- 升级到BigSur无法使用git和brew解决办法
- python 数据科学书籍_您必须在2020年阅读的数据科学书籍
- 《成为一名机器学习工程师》_如何在2020年成为机器学习工程师
- 乡镇银行和信用社哪个正规?
- C++17标准制定完成
- 将1bpp的bmp图像存储为1bpp或者2bpp的tiff格式
- oracle空值判断 =,Oracle,sql server的空值(null)判断
- python po设计模式_(Python)PO设计模式
- python在统计专业的应用_Python统计学一数据的概括性度量详解
- 怎么把字符串变成数组_字符串哈希:从零开始的十分钟包会教程