CentOS7.4上搭建rocketMQ集群
程序员文章站
2022-06-25 08:13:53
一、rocketMQ集群部署方案优缺点对比:多Master模式(2m-noslave) :一个集群无Slave,全是Master,例如2个Master或者3个Master优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID1 ......
一、rocketmq集群部署方案优缺点对比:
多master模式(2m-noslave) :
一个集群无slave,全是master,例如2个master或者3个master
优点:配置简单,单个master宕机或重启维护对应用无影响,在磁盘配置为raid10时,即使机器宕机不可恢复情况下,由于raid10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响。
多master多slave模式,异步复制(2m-2s-async) :
每个master配置一个slave,有多对master-slave,ha采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为master宕机后,消费者仍然可以从slave消费,此过程对应用透明。不需要人工干预。性能同多master模式几乎一样。
缺点:master宕机,磁盘损坏情况,会丢失少量消息。
多master多slave模式,同步双写(2m-2s-sync)
每个master配置一个slave,有多对master-slave,ha采用同步双写方式,主备都写成功,向应用返回成功。
优点:数据与服务都无单点,master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,大约低10%左右,发送单个消息的rt会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。
二、环境
1、版本
jdk:jdk1.8
rocketmq:4.3.2,rocketmq下载地址:wget http://mirror.bit.edu.cn/apache/rocketmq/4.3.2/rocketmq-all-4.3.2-bin-release.zip
rocketmq-console-ng版本:1.0.0
2、角色
rocketmq-console-ng(监控管理):
188.188.10.60:8080
nameserver节点:
188.188.10.60:9876
188.188.10.23:9876
broker:
188.188.10.60:10911 master broker-a
188.188.10.23:10911 slave broker-a
188.188.10.125:10911 master broker-b
188.188.10.209:10911 slave broker-b
3、host解析
vim /etc/hosts
188.188.10.60 broker-a
188.188.10.23 broker-b
三、部署
1、上传rocketmq包,并解压到/usr/local/rocketmq
2、编辑配置文件,默认的配置不能满足我们的需求,需要我们自己添加定制相关的参数,由于我们要部署的是多master多slave的异步方案,所以我们修改或者添加/chj/app/rocketmq/conf/2m-2s-async目录下的配置文件即可(建议在broker的一台节点上把所有的配置文件都撰写好,统一分发到所有节点,保持所有节点的配置文件一致,起服务的时候不同的节点使用不同的配置文件即可,方便后期维护)
a、4个文件的差异配置
vim broker-a.properties
brokername=broker-a
brokerid=0
brokerrole=async_master
vim broker-a-s.properties
brokername=broker-a
brokerid=1
brokerrole=slave
vim broker-b.properties
brokername=broker-b
brokerid=0
brokerrole=async_master
vim broker-b-s.properties
brokername=broker-b
brokerid=1
brokerrole=slave
b、除了上面的配置每个配置文件不一样,下面的配置都一样
#所属集群名字
brokerclustername=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样,
#brokername=broker-a
#0 表示 master,>0 表示 slave
#brokerid=0
#nameserver地址,分号分割
namesrvaddr=188.188.10.60:9876;188.188.10.23: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、修改日志文件路径
cd /usr/local/rocketmq/conf
sed 's#${user.home}#/usr/local/rocketmq#g' *.xml -i
4、启动
nameserver启动:(两个节点启动方式一样)
nohup sh /usr/local/rocketmq/bin/mqnamesrv >/dev/null 2>&1 &
broker启动:
master-a:
nohup sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &
slave-a:
nohup sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 &
master-b:
nohup sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties >/dev/null 2>&1 &
slave-b:
nohup sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties >/dev/null 2>&1 &
5、rocket-console-ng服务:
nohup java -jar rocketmq-console-ng-1.0.0.jar --server.port=8889 --rocketmq.config.namesrvaddr=188.188.10.60:9876;188.188.10.23:9876 &