RocketMQ集群部署

RocketMQ集群部署知识点

1、集群部署方式

(1)单Master模式

只有一个 Master。

优点:配置简单,方便部署。

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

(2)多Master模式

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

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

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

(3)多Master多Slave模式(异步复制)

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

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

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

(4)多Master多Slave模式(同步双写)–线上使用

每个 Master 配置一个 Slave,有多对Master-Slave, HA采用同步双写方式,主备都写成功,向应用返回成功。

优点:数据与服务都无单点, Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高。

缺点:性能比异步复制模式略低,大约低 10%左右,发送单个消息的 RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。

2、Rocketmq双主从异步复制集群部署

192.168.13.21

192.168.13.22

这是我主从机器的ip

下面的命令需要同时在两台机器执行:

(1)文件下载解压

mkdir -p /opt/install/rocketmq-4.2.0

unzip rocketmq-all-4.2.0-bin-release.zip
文件
(2)创建存储路径

mkdir -p /data/rocketmq/store/{rootdir-a-m,commitlog-a-m,rootdir-b-s,commitlog-b-s}
存储路径
(3)配置hosts和环境变量

hosts

vi /etc/hosts
hosts

环境变量

vi /etc/profile
profile
刷新

source /etc/profile

备份

cp -r conf/ conf.default/
备份

双主双从异步复制,默认的rocketmq已经为我们配置了相应配置目录

cd /opt/apps/rocketmq/conf/2m-2s-async
路径

配置文件说明

#所属集群名字

brokerClusterName=itwuyi-rocket-mq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=node001

#brokerId 0 表示 Master,>0 表示 Slave

brokerId=0

# Broker 对外服务的监听端口

listenPort=10911

#nameServer地址,分号分割

namesrvAddr=node001:9876;node002:9876

# 删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=72

#Broker role有3种:SYNC MASTER、ASYNC MASTER、SLAVE。关键词SYNC和ASYNC表示Master和Slave之间同步消息的机制,SYNC即同步更新,指当Slave和Master消息同步完成后,再返回发送成功的状态。ASYNC即异步更新,master与slave有短暂消息延迟,毫秒级。本文在此使用了异步复制集群模式,线上环境推荐使用同步双写模式,即SYNC_MASTER

brokerRole=ASYNC_MASTER

# 刷盘方式 ASYNC_FLUSH 异步刷盘

flushDiskType=ASYNC_FLUSH

#存储路径

storePathRootDir=/data/rocketmq/store/rootdir-a-m

storePathCommitLog=/data/rocketmq/store/commitlog-a-m

# 是否允许 Broker 自动创建Topic

autoCreateTopicEnable=true

# 是否允许 Broker 自动创建订阅组

autoCreateSubscriptionGroup=true

(4)修改配置文件

192.168.13.21 node001

角色:broker-a-master & broker-b-slave

broker-a-master 默认的配置文件:
默认
broker-a-master更改后:
a更改后

brokerClusterName=itwuyi-rocket-mq-cluster
brokerName=node001
brokerId=0
listenPort=10911
namesrvAddr=node001:9876;node002:9876
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
storePathRootDir=/data/rocketmq/store/rootdir-a-m
storePathCommitLog=/data/rocketmq/store/commitlog-a-m
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true

broker-b-slave默认的配置文件:
默认
broker-b-slave更改后:
b更改后

brokerClusterName=itwuyi-rocket-mq-cluster
brokerName=node002
listenPort=10921
namesrvAddr=node001:9876;node001:9876
brokerId=1
deleteWhen=04
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=/data/rocketmq/store/rootdir-b-s
storePathCommitLog=/data/rocketmq/store/commitlog-b-s
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

192.168.13.22 node002

角色:broker-b-master & broker-a-slave

vi broker-b.properties

broker-b-master 默认的配置文件:
b默认
broker-b-master更改后:
b更改后

brokerClusterName=itwuyi-rocket-mq-cluster
brokerName=node002
brokerIP1=192.168.13.22
brokerId=0
listenPort=10911
namesrvAddr=node001:9876;node002:9876
deleteWhen=04
fileReservedTime=72
brokerRole=ASYNC_MASTER
storePathRootDir=/data/rocketmq/store/rootdir-b-m
storePathCommitLog=/data/rocketmq/store/commitlog-b-m
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

broker-a-slave默认的配置文件:
a默认

broker-a-slave更改后:

a更改后

brokerClusterName=itwuyi-rocket-mq-cluster
brokerName=node001
listenPort=10921
namesrvAddr=node001:9876;node002:9876
brokerId=1
deleteWhen=04
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=/data/rocketmq/store/rootdir-a-s
storePathCommitLog=/data/rocketmq/store/commitlog-a-s
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

(5)修改日志配置文件(两台一样)

mkdir -p /opt/apps/rocketmq/logs

cd /opt/apps/rocketmq/conf

sed -i 's#${user.home}#/opt/apps/rocketmq#g' *.xml

(6)修改启动脚本参数

cd  /opt/apps/rocketmq/bin

cp runbroker.sh runbroker.sh.default

调一下JVM,包括nameserver 和 broker。限于自己机器的配置,参数调小一下。但Rocketmq最少的堆是1g,否则无法启动。两台机器执行相同的操作。
jvm

(7)服务启动

要先启动namerserver,再启broker,两台机器执行相同的操作。

mkdir -p /opt/scripts/rocketmq

cd /opt/scripts/rocketmq

vi start_rocketmq.sh

#!/bin/bash
source /etc/profile
nohup sh /opt/apps/rocketmq/bin/mqnamesrv > /data/rocketmq/store/mqnamesrv.log 2>&1 &

两台机都要执行这个start_rocketmq.sh文件

vi start_broker_a_master.sh

#!/bin/bash
nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-a.properties > /data/rocketmq/store/broker-a-m.log 2>&1 &

vi start_broker_b_slave.sh

#!/bin/bash
nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-b-s.properties > /data/rocketmq/store/broker-b-s.log 2>&1 &

192.168.13.22 node002

vi start_broker_b_master.sh

#!/bin/bash
nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-b.properties > /data/rocketmq/store/broker-b-m.log 2>&1 &

vi start_broker_a_slave.sh

#!/bin/bash
nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-a-s.properties > /data/rocketmq/store/broker-a-s.log 2>&1 &

node001:
脚本
node002:
脚本
给予这些文件足够的权限

先启动nameserver,再启动broker,两台机器的启动顺序:启动nameserver—启动broker master—启动broker slave。

(8)服务查看

启动完毕之后用jps查看:

jps

59856 BrokerStartup

135875 Jps

54896 NamesrvStartup

45871 rocketmq-console-ng-1.0.0.jar

132541 BrokerStartup

查看服务启动后的机器状态:

mqadmin clusterList --

(9)服务关闭

关闭nameserver:

/opt/apps/rocketmq/bin/mqshutdown namesrv

关闭broker:

/opt/apps/rocketmq/bin/mqshutdown broker
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值