RocketMQ最佳实践 4.0版本/集群

2020-12-30  本文已影响0人  Zal哥哥

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

1、上述“2”只是说作为一个集群的最低配置数量,可以根据实际情况扩展。

2、所有的刷盘(Dish Flush)操作全部默认为:ASYNC_FLUSH(异步刷盘)。

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 
image

注意:如果日志中输出的启动的broker的ip不正确,是因为机器多网卡的原因,造成了自动获取了另外网卡的Ip地址,这种情况下,就需要手动指定ip:

sudo vi $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties
image

如果不手动指定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
image

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 &

如果报如下错误:

image

需要在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配置详解

参数名 默认值 说明
listenPort 10911 Broker对外服务的监听端口
namesrvAddr Null NameServer地址
brokerIP1 本机IP 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置
brokerName 本机主机名
brokerClusterName DefaultCluster Broker所属那个集群
brokerId 0 BrokerId,必须是大于等于0的整数,0表示Master, 大于0表示Slave, 一个Master可以挂多个Slave,Master和Slave通过BrokerName来配对
storePathCommitLog $HOME/store/commitlog commitLog存储路径
storePathConsumerQueue $HOME/store/consumequeue 消费队列存储路径
storePathIndex $HOME/store/index 消息索引存储队列
deleteWhen 4 删除时间点,默认凌晨4点
fileReserverdTime 48 文件保留时间,默认48小时
maxTransferBytesOnMessageInMemory 262144 单次pull消息(内存)传输的最大字节数
maxTransferCountOnMessageInMemory 32 单次pull消息(内存)传输的最大条数
maxTransferBytesOnMessageInDisk 65535 单次Pull消息(磁盘)传输的最大字节数
maxTransferCountOnMessageInDisk 8 单次pull消息(磁盘)传输的最大条数
messageIndexEnable TRUE 是否开启消息索引功能
messageIndexSafe FALSE 是否提供安全的消息索引机制,索引保证不丢
brokerRole ASYNC_MASTER Broker的角色:ASYNC_MASTER异步复制Master; SYNC_MASTER同步双写MASTER; SLAVE
flushDiskType ASYNC_FLUSH 刷盘方式: ASYNC_FLUSH异步刷盘;SYNC_FLUSH同步刷盘clientFileForciblyEnable
上一篇 下一篇

猜你喜欢

热点阅读