安装部署RocketMQ集群(双主双从)

前面,我们介绍了如果快速安装单个RocketMQ。快速安装意味着这只是在测试环境下的小打小闹,我们在单机安装的基础上,尝试安装RocketMQ集群。本次安装为了方便,使用的是已经编译好的二进制包进行安装部署。


1. RocketMQ的集群介绍

RocketMQ集群解决了单机版RocketMQ所存在的单点故障问题,并且还可以对RocketMQ性能进行横向的拓展。
下图是官网上的架构图,可以看到RocketMQ分为四个部分:

  1. 生产者集群 (只能往broker的master节点写入消息)
  2. 消费者集群 (能消费broker中的master和slave节点的消息)
  3. NameServer集群 (没有主备之分)
  4. Broker集群 (区分master和slave)
RocketMQ架构

其中,根据RocketMQ Broker的集群方式的不同,大概可以分为三种:

  • 多Master
  • 多Master多Slave异步复制
  • 多Master多Slave同步复制

在配置文件所在目录 conf 中,我们可以看到有三个文件夹:2m-noslave、2m-2s-async、2m-2s-sync。这三个目录刚好对应上面提到的三种集群方式,里面包含了官方给的配置示例,我们待会会在这个基础上修改。

同步复制和异步复制的解析:
异步复制和同步复制的区别在于,同步复制只有在master和slave都确认之后才向应用返回成功,而异步复制只需要master确认即可。所以,同步复制的效率比异步复制会低,据说低10%左右。当然,异步复制带来高性能的同时也会有数据丢失的风险。

2. 环境准备

下面我们将要部署双master双slave同步复制的RocketMQ集群,这里需要准备两个虚拟机。

主机 IP地址 角色 模式
rockermq01 192.168.113.11 nameserver、broker-a-master、broker-b-slave 主备
rockermq02 192.168.113.12 nameserver、broker-a-slave、broker-b-master 主备

3. 启动多个Nameserv和Broker

3.1 下载安装RocketMQ

#下载二进制包
wget  http://mirror.bit.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-release.zip

#解压到 /usr/local目录下,并创建软连接
unzip rocketmq-all-4.4.0-bin-release.zip
mv rocketmq-all-4.4.0-bin-release /usr/local/
ln -s /usr/local/rocketmq-all-4.4.0-bin-release  /usr/local/rocketmq

就这样,rockermq就安装好了,接下来我们要修改配置文件。

3.2 修改Broker配置文件

由于默认的数据和日志存储的位置是当前用户的家目录,我们还需要修改到 /data/rocketmq目录下:

#新建相关目录
mkdir -p /data/rocketmq/{store-a,store-b}

日志目录的配置文件在 conf的几个xml文件里面:

cd /usr/local/rocketmq/conf
sed -i "s/\${user.home}/\/data\/rocketmq/g"  logback_broker.xml
sed -i "s/\${user.home}/\/data\/rocketmq/g"  logback_namesrv.xml
sed -i "s/\${user.home}/\/data\/rocketmq/g"  logback_tools.xml

最后,我们进入到 2m-2s-sync 目录下,修改里面的broker配置文件:

cd /usr/local/rocketmq/conf/2m-2s-sync/
  1. 192.168.113.11 机器上Master-Broker的配置文件 broker-a.properties
namesrvAddr=192.168.113.11:9876;192.168.113.12:9876
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerid=O
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10911
#修改存储路径
storePathRootDir=/data/rocketmq/store-a
storePathCommitLog=/data/rocketmq/store-a
storePathConsumeQueue=/data/rocketmq/store-a
storePathIndex=/data/rocketmq/store-a
storeCheckpoint=/data/rocketmq/store-a
abortFile=/data/rocketmq/store-a
  1. 192.168.113.11 机器上Slave-Broker的配置文件 broker-b-s.properties
namesrvAddr=192.168.113.11:9876;192.168.113.12:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=11011
#修改存储路径
storePathRootDir=/data/rocketmq/store-b
storePathCommitLog=/data/rocketmq/store-b
storePathConsumeQueue=/data/rocketmq/store-b
storePathIndex=/data/rocketmq/store-b
storeCheckpoint=/data/rocketmq/store-b
abortFile=/data/rocketmq/store-b
  1. 192.168.113.12 机器上Slave-Broker的配置文件 broker-a-s.properties
namesrvAddr=192.168.113.11:9876;192.168.113.12:9876
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=11011
#修改存储路径
storePathRootDir=/data/rocketmq/store-a
storePathCommitLog=/data/rocketmq/store-a
storePathConsumeQueue=/data/rocketmq/store-a
storePathIndex=/data/rocketmq/store-a
storeCheckpoint=/data/rocketmq/store-a
abortFile=/data/rocketmq/store-a
  1. 192.168.113.12 机器上Master-Broker的配置文件 broker-b.properties
namesrvAddr=192.168.113.11:9876;192.168.113.12:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10911
#修改存储路径
storePathRootDir=/data/rocketmq/store-b
storePathCommitLog=/data/rocketmq/store-b
storePathConsumeQueue=/data/rocketmq/store-b
storePathIndex=/data/rocketmq/store-b
storeCheckpoint=/data/rocketmq/store-b
abortFile=/data/rocketmq/store-b

3.3 启动Nameserver和Broker

先启动两台机器的Nameserver

nohup sh bin/mqnamesrv &

然后分别启动4个Broker进程:

#在192.168.113.11上
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties &
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties &
#在192.168.113.12上
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties &
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties &

就这样,RocketMQ双主双从的集群就已经搭建好了,通过rocketmq-console的监控页面,可以看到如下的集群情况:

集群的情况

4. 部分配置参数说明

  1. namesrvAddr=192.168.113.11:9876;192.168.113.12:9876
    NamerServer 的地址,可以是多个。

  2. brokerClusterName=DefaultCluster
    Cluster 的地址,如果集群机器数比较多,可以分成多个Cluster ,每个Cluster 供一个业务群使用。

  3. brokerName=broker-a
    Broker 的名称, Master 和Slave 通过使用相同的Broker 名称来表明相互关系,以说明某个Slave 是哪个Master 的Slave 。

  4. brokerId=0
    一个Master Barker 可以有多个Slave, 0 表示Master ,大于0 表示不同Slave 的ID 。

  5. deleteWhen=04
    与fi leReservedTim巳参数呼应,表明在几点做消息删除动作,默认值04 表示凌晨4 点。

  6. fileReservedTime=48
    在磁盘上保存消息的时长,单位是小时,自动删除超时的消息。

  7. brokerRole=SYNC_MASTER
    broker Role 有3 种: SYNC_MASTER 、ASYNC_MASTER 、SLAVE 。关键词SYNC 和ASYNC 表示Master 和Slave 之间同步消息的机制, SYNC 的意思是当Slave 和Master 消息同步完成后,再返回发送成功的状态。

  8. flushDiskType=ASYNC_FLUSH
    flushDiskType 表示刷盘策略,分为SYNC_FLUSH 和ASYNC_FLUSH 两种,分别代表同步刷盘和异步刷盘。同步刷盘情况下,消息真正写人磁盘后再返回成功状态;异步刷盘情况下,消息写人page_cache 后就返回成功状态。

  9. listenPort=11011
    Broker 监听的端口号,如果一台机器上启动了多个Broker , 则要设置不同的端口号,避免冲突。

这些配置参数,在Broker 启动的时候生效,如果启动后有更改,要重启Broker 。现在使用云服务或多网卡的机器比较普遍, Broker 自动探测获得的ip地址可能不符合要求,通过brokerIP1 =47 .98.41.234 这样的配置参数,可以设置Broker 机器对外暴露的ip 地址。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容