RocketMQ(3) Rocket 集群

RocketMQ 集群模式分为四种:单 master多 master多 master 多 slave 异步复制多 master 多 slave 同步双写

四种集群模式

单 master

风险较大,一旦 broker 宕机或者重启,将导致整个服务部可用。不建议线上环境使用

多 master

一个集群全部都是 master,没有 slave

  • 优点
    配置简单,单个 master 宕机,或者重启未付,对应用没有影响,在磁盘配置为 RAID10 时,即是机器宕机不可恢复的情况,消息也不会丢失(异步刷盘会丢失少量消息,同步刷盘不会丢失消息),性能最高

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

多 master 多 slave 异步复制

每个 master 配置一个 slave,有多对 master slave,HA 采用的是异步复制方式,主备有短暂的消息延迟(毫秒级),master 收到消息后立即向应用返回成功标志,同时向 slave 写入消息。

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

  • 缺点
    master 宕机,磁盘损坏下,会丢失少量消息

多 master 多 slave 同步双写

每个 master 配置一个 slave,有多对 master slave,HA 采用同步双写模式,主备都成功才会返回成功

  • 优点
    数据与服务都无单点,master 宕机情况下,消息无延迟,服务可用性与数据可用性最高

  • 缺点
    性能比异步复制低 10% 左右,发送单个 master 的 RT 会略高,主机宕机后,slave 不能自动切换为主机(后续版本会支持)


一主一从

修改 master 配置

进入 conf/2m-2s-async,修改文件:broker-a-s.properties:

1
2
rm -rf broker-a-s.properties 
cp broker-a.properties broker-a-s.properties

然后打开 broker-a-s.properties,修改:

1
2
brokerId=1
brokerRole=SLAVE

修改两个配置文件的 nameserver 为两个服务器对应的 nameserver 地址,多个地址用英文分号分割

修改 slave 配置

将 master 的 broker-a.propertiesbroker-a-s.properties 同步过来,在 master 上执行

1
2
scp broker-a.properties 192.168.52.201:/usr/local/include/mq/rocketmq/conf/2m-2s-async/
scp broker-a-s.properties 192.168.52.201:/usr/local/include/mq/rocketmq/conf/2m-2s-async/

启动集群

依次启动 master、slave 的 nameserver

1
nohup ./bin/mqnamesrv &

在 master 上使用 broker-a.properties 启动 broker

1
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-async/broker-a.properties > /dev/null 2>&1 &

在 slave 上使用 broker-a-s.properties 启动 broker

1
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-async/broker-a-s.properties > /dev/null 2>&1 &

验证集群

在 rocketmq-console 中,修改 nameserver 配置:

1
rocketmq.config.namesrvAddr=192.168.52.200:9876;192.168.52.201:9876

启动 console,并查看集群属性
一主一从

缺陷

当主节点挂掉后,消息将无法写入


双主双从

双主双从,异步刷盘,同步复制(生产环境建议采用此方式)

集群搭建

准备4份 RocketMQ 环境,修改配置文件 conf/2m-2s-sync/broker-a.properties,将 brokerRole 改为:SYNC_MASTER,flushDiskType 改为 ASYNC_FLUSH,nameserver 为四台服务器的 nameserver 地址其他与之前 async 的配置一样

修改 conf/2m-2s-sync/broker-a-s.0propertiesbrokerId 为大于 0 的值,brokerRoleSLAVE,nameserver 为四台服务器的 nameserver 地址。

修改 conf/2m-2s-sync/broker-b.0propertiesconf/2m-2s-sync/broker-b-2.0properties,与 a 的区别在与 brokerName 都为 broker-b

启动集群

每台机器都启动 nameserveer
nohup ./bin/mqnamesrv &

在第一台机器上启动 broker-a

1
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-a.properties > /dev/null 2>&1 &

在第二台机器上启动 broker-b

1
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-b.properties > /dev/null 2>&1 &

在第三台机器上启动 broker-a-s

1
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-a-s.properties > /dev/null 2>&1 &

在第四台机器上启动 broker-b-s

1
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-b-s.properties > /dev/null 2>&1 &

验证集群

修改 rocket-console 的配置:rocketmq.config.namesrvAddr=192.168.52.200:9876;192.168.52.201:9876;192.168.52.202:9876;192.168.52.203:9876,启动 console,打开 集群选项卡
双主双从-同步双写-异步刷盘


-------------本文结束 感谢您的阅读-------------
0%