RockerMQ介绍 及搭建双master模式

时间:2022-09-09 21:56:08

一.RocketMQ介绍

1.1 简介

RocketMQ 是一款分布式、队列模型的消息中间件,具有以下特点:

能够保证严格的消息顺序

提供丰富的消息拉取模式

高效的订阅者水平扩展能力

实时的消息订阅机制

亿级消息堆积能力

选用理由:

  • 强调集群无单点,可扩展,任意一点高可用,水平可扩展
  • 海量消息堆积能力,消息堆积后,写入低延迟
  • 支持上万个队列
  • 消息失败重试机制
  • 消息可查询
  • 开源社区活跃
  • 成熟的

1.2 关键概念

1.2.1 主题与标签

  主题Topic:第一级消息类型,书的标题

  标签Tags: 第二级消息类型,书的目录,可以基于Tag做消息过滤

  例如:

  主题:

    订单交易

  标签:

    订单交易-创建

    订单交易-付款

    订单交易-完成

1.2.2 发送与订阅群组

RockerMQ介绍 及搭建双master模式

生产组:用于消息的发送

消费组:用于消息的订阅处理

生产组和消费组,方便扩缩机器,增减处理能力,集群组的名字,用于标记用途中的一员。每次只会随机的发给每个集群中的一员。

二、RocketMQ集群方式

推荐的几种 Broker 集群部署方式,这里的Slave 不可写,但可读,类似于 Mysql 主备方式。

2.1 单个Master

  这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用

2.2 多master模式

  一个集群无Slave,全是master,例如2个master或者3个master

  优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,及时机器宕机不可回复的情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)性能最高。

  缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会收到影响。

  ###先启动NameServer

  ###在机器A,启动第一个Master

  ###在机器B,启动第二个Master

2.3 多Master多Slave模式,异步复制

  每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟,毫秒级。

  优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master宕机后,消费者仍然可以从Slave消息,此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样。

  缺点:Master宕机,磁盘损坏情况,会丢失少量消息

  ### 先启动 NameServer

  ### 在机器 A,启动第一个 Master

  ### 在机器 B,启动第二个 Master

  ### 在机器 C,启动第一个 Slave

  ### 在机器 D,启动第二个 Slave

2.4 多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 来区分。

三、RocketMQ部署【双master模式】

3.1 服务器环境

序号  IP 用户名 密码 角色 模式
1 192.168.1.114 root   nameServer1,brokerServer1 master
2 192.168.2.2 root   nameServer1,brokerServer1 master

3.2 Hosts添加信息

IP NAME
192.168.1.114 rocketmq-nameserver1
192.168.1.114 rocketmq-master1
192.168.2.2 rocketmq-nameserver2
192.168.2.2 rocketmq-master2

通过ssh链接,修改linux服务器相关信息;

#  vi /etc/hosts

RockerMQ介绍 及搭建双master模式

添加相应信息后,保存退出

3.3 上传解压【两台机器】

上传alibaba-rocketmq-3.2.6.tar.gz 文件至/usr/local

解压文件到执行目录

#  tar -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local

重命名 增加版本号,方便日后整理

#  mv alibaba-rocketmq alibaba-rocketmq-3.2.6

创建软连接,这边没有-s 就是创建硬连接

#  ln -s alibaba-rocketmq-3.2.6 rocketmq

# ll .usr/local    查看文件,会看到软连接标识

3.4 创建存储路径【两台机器】

# mkdir /usr/local/rocketmq/store

# mkdir /usr/local/rocketmq/store/commitlog

# mkdir /usr/local/rocketmq/store/consumequeue

# mkdir /usr/local/rocketmq/store/index

 3.5 RocketMQ配置文件【两台机器】

# vim /usr/local/rocketmq/conf/2m-noslave/broker-a.properties

# vim /usr/local/rocketmq/conf/2m-noslave/broker-b.properties

删除原配置,复制下面的配置,粘贴后,进行相应的修改,然后保存退出

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样,a.properties,就写broker-a,b的就填写b
brokerName=broker-a|broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2: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=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/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

3.6 修改日志配置文件【两台机器】

#  mkdir -p /usr/local/rocketmq/logs

#  cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml

 3.7 修改启动脚本参数【两台机器】

#  vim /usr/local/rocketmq/bin/runbroker.sh

这边由于机器的硬件配置不够,所以采用最低配置,注意的是 -Xms -Xmx 不能低于1g

RockerMQ介绍 及搭建双master模式

# vim /usr/local/rocketmq/bin/runserver.sh

RockerMQ介绍 及搭建双master模式

3.8 启动NameServer【两台机器】

# cd /usr/local/rocketmq/bin

# nohup sh mqnamesrv &

可以输入命令 jps  可以查看到

NamesrvStartup

在这里注意:如果jdk是sun jdk,同时也配置了JAVA_HOME,那么现在问题应该不大。如果是openjdk,这个在平时用的时候,不配JAVA_HOME也是可以用的,但是因为rocketmq是纯java编的,所以必须配置JAVA_HOME。一般openjdk默认安装的位置在/usr/lib/jvm/java-8-openjdk-amd64,在这个目录下看到bin目录下有javac文件,就说明这就是JDK了。编辑/etc/profile或者/root/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin

如果执行bash mqnamesrv还是报错:"Please set the JAVA_HOME variable in your environment, We need java(x64)!"
查看runserver.sh文件:

[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"

这个位置,没有用全部注释掉添加[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64。当然删了也没有问题。

效果如下:

#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
#[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

3.9 启动BrokerServer A 【192.168.1.114】

# cd /usr/local/rocketmq/bin

# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &

# netstat -ntlp

# jps

# tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log

# tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log

3.10 启动BrokerServer B 【192.168.2.2】

# cd /usr/local/rocketmq/bin

# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &

# netstat -ntlp

# jps

# tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log

# tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log

3.11 部署RocketMQ Console

wget https://github.com/duomu/rocketmq-console/raw/master/rocketmq-console.war 下载

也可以复制后面这个地址直接下载,完成后

将rocketmq-console.war 部署到tomcat上,启动之前,修改war包中的\WEB-INF\classes的config.properties文件里面的配置,

我这边将配置修改成:

rocketmq.namesrv.addr=192.168.2.2:9876;192.168.1.114:9876

然后启动tomcat,查看tomcat的启动日志

然后浏览器访问控制台,我这边项目是部署在192.168.1.114:10000

RockerMQ介绍 及搭建双master模式

这样环境就搭建完成了,后面,就是编写HelloWorld。

RockerMQ介绍 及搭建双master模式的更多相关文章

  1. RocketMQ环境搭建(双master模式)

    介绍: 多Master模式,一个集群无Slave,全是Master,例如2个Master或者3个Master. 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时, ...

  2. RocketMQ学习笔记(4)----RocketMQ搭建双Master集群

    前面已经学习了RockeMQ的四种集群方式,接下来就来搭建一个双Master(2m)的集群环境. 1. 双Master服务器环境 序号 ip 用户名 密码 角色 模式 (1) 47.105.145.1 ...

  3. RocketMQ环境搭建(双master双slave模式)

    1.环境准备: 准备四台主机(我这里用CentOSx64) 主机 角色 broker 192.168.192.130 Master1 BrokerServerA 192.168.192.131 Mas ...

  4. rocketmq在linux搭建双master遇到的坑

    我的环境 两台阿里云centos7服务器 首先,去官网下载解压包,解压. 然后进入bin目录,需要修改runserver.sh文件和runbroker.sh文件.因为rocketmq默认配置文件需要的 ...

  5. RocketMQ 集群搭建--双Master方案

    安装环境 jdk1.7 alibaba-rocketmq-3.2.6.tar.gz VM虚拟机redhat6.5-x64:192.168.1.201  192.168.1.202 Xshell4 部署 ...

  6. Linux环境快速搭建RocketMQ双Master模式

    RocketMQ的集群部署方式有多种,其中包括单个Master.多个Master.多Master多Slave模式(异步复制)以及多Master多Slave模式(同步双写).本次以多Master集群模式 ...

  7. RocketMQ初探(五)之RocketMQ4.2.6集群部署(单Master+双Master+2m+2s+async异步复制)

    以下部署方式结合众多博友的博客,经过自己一步一步实际搭建,如有雷同,侵权行为,请见谅...其中遇到不少的坑,希望能帮到更多的人,现在很少能找到一份完整版4.2.6版本的搭建教程了,如果你有幸遇见,那么 ...

  8. RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群

    1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...

  9. Linux下安装配置rocketmq (单个Master、双Master)

    一.环境: centos7(2台虚拟机):192.168.64.123:192.168.64.125 apache-maven-3.2.5(官网要求maven版本是3.2.x,版本不同,编译rocke ...

随机推荐

  1. (4)WebApi 跨域问题

    在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webapi的程序,如下图所示: 由于微软已 ...

  2. import

    避免类名混淆: 区分有包名的类,如果一个源文件引入了两个包中同名的类,那么在使用该类时,不允许省略包名,如引入了tom.jiafei包中的AA类和sun.com包中的AA类,那么程序在使用AA类时必须 ...

  3. 敏捷个人手机应用iOS和Android公开注册

    敏捷个人手机应用iOS出炉了,现在免费公开注册,截止时间到4月20日,注册时的邀请码是7个字符: 1.admin Android下载地址:http://agileme-download.qiniudn ...

  4. 如何为PHP贡献代码

    PHP在之前把源代码迁移到了git下管理, 同时也在github(https://github.com/php/php-src)上做了镜像, 这样一来, 就方便了更多的开发者为PHP来贡献代码. 今天 ...

  5. ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()

    ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()   今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先, ...

  6. Java的Log系统介绍和切换(转)

    Java的log系统比较繁杂.在这里梳理一下.本文只涉及log系统介绍和处理log系统之间的切换.不涉及如何配置和使用. 具体的log系统 Log4j:准确的说是log4j 1.x版.是之前使用最广泛 ...

  7. hdu_5680_zxa and set(想法题)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5680 题意: 问题描述 zxa有一个集合A=\{a_1,a_2,\cdots,a_n\}A={a​1​ ...

  8. 在程序加载过程中显示ProgressDialog 对话框

    private ProgressDialog mProgressDlg = null; @Override protected void onCreate(Bundle savedInstanceSt ...

  9. htop的安装和使用

    1.Ubuntu16.04中htop安装很简单 sudo apt-get install htop 2.htop的使用,直接以普通用户输入htop命令即可执行 关于其基本介绍和使用方式在见下 http ...

  10. nativefier(一行代码将任意网页转化为桌面应用)

    刚刚在看前端九部的手册的时候,发现一个之前没有用过的骚东西,看上去还挺好用,我这个好奇心瞬间就窜的老高了,赶紧试一试,看看这个东西有没有必要收入我的胯下 结果实验完了之后, 必须必须要强行安利给你们 ...