容器化部署RocketMQ5.3.1集群
背景: 生产环境单机的MQ不具有高可用,所以我们应该部署成集群模式,这里给大家部署一个双主双从异步复制的Broker集群
一、安装docker
yum install -y docker
systemctl enable docker --now
# 单机部署参考:
https://www.cnblogs.com/hsyw/p/17429834.html
二、集群部署
2.1、基础概念介绍
单节点 :
优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢
缺点:不可靠,如果宕机,会导致服务不可用
主从(异步、同步双写) :
优点:同步双写消息不丢失, 异步复制存在少量丢失 ,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入
缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行检测然后进行停止broker,
重启让从节点成为主节点
双主:
优点:配置简单, 可以靠配置RAID磁盘阵列保证消息可靠,异步刷盘丢失少量消息
缺点: master机器宕机期间,未被消费的消息在机器恢复之前不可消费,实时性会受到影响
双主双从,多主多从模式(异步复制)我们这里采用这种
优点:磁盘损坏,消息丢失的非常少,消息实时性不会受影响,Master 宕机后,消费者仍然可以从Slave消费
缺点:主备有短暂消息延迟,毫秒级,如果Master宕机,磁盘损坏情况,会丢失少量消息
双主双从,多主多从模式(同步双写)
优点:同步双写方式,主备都写成功,向应用才返回成功,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,主宕机后,备机不能自动切换为主机
概念
rocketmq分为Name Server和Broker Server
名字服务(Name Server)
名称服务充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的Broker IP列表。多个Namesrv实例组成集群,但相互独立,没有信息交换。
是Topic路由注册中心,端口默认为9876
代理服务器(Broker Server)
消息中转角色,负责存储消息、转发消息。代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。
端口有三个
listenPort:默认10911,接受客户端连接的监听端口,作为对producer和consumer使用服务的端口号,可以通过配置文件改
haListenPort:默认为listenPort + 1,高可用服务监听端口,主要用于slave同master同步
fastListenPort:默认为listenPort -2, 主要是fastRemotingServer服务使用,用于VIP通道
2.2、集群规划、部署
双主双从异步复制的Broker集群
集群角色划分如下
主机名 IP 功能 集群角色
node1 10.7.8.73 NameServer+Broker Master01+Slave02
node2 10.7.215.96 NameServer+Broker Master02+Slave01
2.2.1、部署rmqnamesrv
两台的rmqnamesrv节点都直接运行即可【10.7.8.73、10.7.215.96】
mkdir -p /rocketmq/r