单节点master
主备
多主
多主多从(异步复制,同步双写)
单节点
优点:部署与配置简单,方便管理,适合开发阶段使用
缺点:风险较大,一旦重启或者宕机时,会导致整个服务不可用,不建议线上环境使用
主备
优点:单台机器宕机不影响消息消费,保证消息能及时处理。
缺点:主节点宕机之后消息不能写入,只能消费。
多主
优点:配置简单,单个 master 宕机或重启维护对消息写入无影响,新消息将被写入到其他master。
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,不能消费,消息实时性会受到影响。
多主多从(异步复制,同步双写)
优点:某个master 宕机后,消费者仍然可以从 slave被消费,此过程对应用透明。不需要人工干预
缺点:部署与维护相对于其他方式复杂一点。
异步复制与同步双写的区别在于消息的延迟与性能高低,异步复制方式,主备有短暂消息延迟,毫秒级,新能高。同步双写方式主备消息无延迟,只有主备都写成功,才向应用返回成功,但是这样性能相比于异步复制略低,大约在10%左右。
以上master与slave配对是通过指定相同的brokerName参数来配对,master的BrokerId必须是0,slave 的BrokerId必须是大与0的数。另外一个master下面可以挂载多个slave,同一master下的多个slave通过指定不同的BrokerId来区分。
==注意==:RocketMQ有一个非常?弱智?高级的点,就是两个Broker监听端口listenPort的值相差必须大于等于2,这tm是人类能想到的设计吗?这个设计非常人性化,打发了我一下午的无聊时光。默认监听端口为10911,所以再起一个Broker的话,端口必须大于等于10913。==泰裤辣!!!==
下载对应版本的RocketMQ
解压安装目录
unzip rocketmq-all-4.9.3-bin-release.zip
修改配置文件
#配置文件目录
cd /opt/rocketmq/conf/
#编辑配置文件
vim broker.conf
配置文件内容
#Broker对外服务的监听端口
listenPort=10911
#Broker的IP
brokerIP1 = 127.0.0.1
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,主从需要名字一致
brokerName=broker-a
#0表示Master,大于0表示slave
brokerId=0
#nameServer地址","分号分割
namesrvAddr=127.0.0.1:9876
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#是否开启自动创建topic
autoCreateTopicEnable=true
#是否开启自动创建订阅组
autoCreateSubscriptionGroup=true
#自动创建topic时,默认的队列数
defaultTopicQueueNums=4
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48
fileReservedTime=48
#commitLog每个文件的大小默认1G,1024 * 1024 * 1024
mapedFileSizeCommitLog=1073741824
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#log存储路径
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
#是否开启acl
aclEnable = true
开启ACL
#复制acl目录下的配置文件到conf目录下
cp /opt/rocketmq/conf/acl/plain_acl.yml /opt/rocketmq/conf
修改ACL配置
# 全局允许访问的IP地址
globalWhiteRemoteAddresses:
# IP地址范围1:允许所有以"10.10.103"开头的IP地址访问系统
- 10.10.103.*
# IP地址范围2:允许所有以"192.168.0"开头的IP地址访问系统
- 192.168.0.*
# 账户的访问权限和设置
accounts:
# 访问密钥
- accessKey: myaccesskey
# 秘密密钥
secretKey: mysecretKey
# 允许访问的IP地址范围
whiteRemoteAddress:
# 是否是管理员账户(false表示不是管理员)
admin: false
# 默认主题权限
defaultTopicPerm: PUB|SUB
# 默认群组权限
defaultGroupPerm: PUB|SUB
# 主题权限列表
topicPerms:
# 允许发布和订阅主题
- topic=PUB|SUB
# 群组权限列表
groupPerms:
# 允许发布和订阅群组主题
- topic=PUB|SUB
- accessKey: myaccesskey
secretKey: mysecretKey
whiteRemoteAddress:
# 是否是管理员账户(true表示是管理员),如果是管理员账户,则可以访问所有资源
admin: true
启动nameServer
nohup sh mqnamesrv &
启动Broker
nohup sh mqbroker -c /opt/rocketmq/conf/broker.conf &
==注意==:可以在runbroker.sh、runserver.sh中修改broker与nameServer的启动参数,部署多个主从关系,只需修改brokerName、brokerId与brokerRole即可。nameServer连接同一个集群或者单点。