RocketMQ最佳实践(二)4.0版本/集群

上一篇文章“RocketMQ最佳实践(一)4.0版本/概念介绍/安装调试/客户端demo”讲了单节点的部署,这篇文件将进行集群部署的相关实践。

1、还是先理解一些重要概念及说明

  • Disk Flush(磁盘刷新/同步操作):就是将内存的数据落地,存储在磁盘中。RocketMQ提供了以下两种模式:
    • SYNC_FLUSH(同步刷盘):生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。
    • ASYNC_FLUSH(异步刷盘):生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功。随后再异步的将缓存数据保存到磁盘,有两种情况:1是定期将缓存中更新的数据进行刷盘,2是当缓存中更新的数据条数达到某一设定值后进行刷盘。这种方式会存在消息丢失(在还未来得及同步到磁盘的时候宕机),但是性能很好。默认是这种模式。
  • Broker Replication(Broker间数据同步/复制):集群环境下需要部署多个Broker,Broker分为两种角色:一种是master,即可以写也可以读,其brokerId=0,只能有一个;另外一种是slave,只允许读,其brokerId为非0。一个master与多个slave通过指定相同的brokerName被归为一个broker set(broker集)。通常生产环境中,我们至少需要2个broker set。Broker Replication只的就是slave获取或者是复制master的数据。
    • Sync Broker:生产者发送的每一条消息都至少同步复制到一个slave后才返回告诉生产者成功,即“同步双写”。
    • Async Broker:生产者发送的每一条消息只要写入master就返回告诉生产者成功。然后再“异步复制”到slave。
  • 推荐的几种Broker集群方式:(官网提供了下面几种集群方式的配置文件供参考,在$ROCKETMQ_HOME/target/apache-rocketmq-all/conf目录下)
    • 2m-2s-sync:两主两从同步双写(两个master,两个slave,数据同步双写到master和slave)
    • 2m-2s-async:两主两从异步复制(两个master,两个slave,master数据通过异步复制到slave)
    • 2m-noslave:两主(只有两个master,没有slave)
             注意:
1、上述“2”只是说作为一个集群的最低配置数量,可以根据实际情况扩展。
2、所有的刷盘(Dish Flush)操作全部默认为:ASYNC_FLUSH(异步刷盘)。
  • Name Server集群:Name Server集群比较简单,只要部署多个实例就行了,多个实例间不需要进行数据共享,只要保证一个实例存活就可以正常运转。

2、三种Broker集群方式优缺点

上面三种集群方式的优缺点(主要区别在于主从复制方式):

多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-noslave)

每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,主备都写成功,向应用返回成功。
优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,大约低10%左右,发送单个消息的RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。

3、开始部署

这里使用我觉得最好的方式:多Master多Slave模式,异步复制(2m-2s-async)来进行部署。
注意:上面说到了官方提供了2m-2s-async的参考配置文件,在conf目录下,所以我们这里部署的时候就使用这些配置文件进行部署。

环境准备

  • 准备四台机器(10.89.0.124、10.89.0.63、10.89.0.64、10.89.0.65),用来每台部署一个broker
  • 上一篇博文中编译好的rocketmq拷贝到其他三台机器上(可以通过rz、sz命令进行上传下载,若不支持请自行百度安装此命令),解压并设置ROCKETMQ_HOME环境变量。我的ROCKETMQ_HOME=/usr/local/rocketmq/incubator-rocketmq/target/apache-rocketmq-all

启动Name server

这里我们分别在10.89.0.64、10.89.0.65两台机器上启动Name server,启动过程参考 这里

启动Broker

1、在10.89.0.65这台机器上,启动第一个Master
nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
tail -f ~/logs/rocketmqlogs/broker.log 
注意:如果日志中输出的启动的broker的ip不正确,是因为机器多网卡的原因,造成了自动获取了另外网卡的Ip地址,这种情况下,就需要手动指定ip:
sudo vi $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties

如果不手动指定IP的话,后面slave获取到此master的地址就是默认地址,导致连接不上master。

2、同上面一样在10.89.0.64这台机器上,启动第二个Master
nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &
tail -f ~/logs/rocketmqlogs/broker.log
3、在10.89.0.63这台机器上,启动第一个Slave
nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
如果报如下错误:

需要在10.89.0.64机器上开放10909端口。
4、在10.89.0.124这台机器上,启动第二个Slave
nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties &

Broker配置详解

参数名默认值说明
listenPort10911Broker对外服务的监听端口
namesrvAddrNullNameServer地址
brokerIP1本机IP本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置
brokerName 本机主机名
brokerClusterNameDefaultClusterBroker所属那个集群
brokerId0BrokerId,必须是大于等于0的整数,0表示Master, 大于0表示Slave, 一个Master可以挂多个Slave,Master和Slave通过BrokerName来配对
storePathCommitLog$HOME/store/commitlogcommitLog存储路径
storePathConsumerQueue$HOME/store/consumequeue消费队列存储路径
storePathIndex$HOME/store/index消息索引存储队列
deleteWhen4删除时间点,默认凌晨4点
fileReserverdTime48文件保留时间,默认48小时
maxTransferBytesOnMessageInMemory262144单次pull消息(内存)传输的最大字节数
maxTransferCountOnMessageInMemory32单次pull消息(内存)传输的最大条数
maxTransferBytesOnMessageInDisk65535单次Pull消息(磁盘)传输的最大字节数
maxTransferCountOnMessageInDisk8单次pull消息(磁盘)传输的最大条数
messageIndexEnableTRUE是否开启消息索引功能
messageIndexSafeFALSE是否提供安全的消息索引机制,索引保证不丢
brokerRoleASYNC_MASTERBroker的角色:ASYNC_MASTER异步复制Master; SYNC_MASTER同步双写MASTER; SLAVE
flushDiskTypeASYNC_FLUSH刷盘方式: ASYNC_FLUSH异步刷盘;SYNC_FLUSH同步刷盘clientFileForciblyEnable

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值