RocketMQ docker集群搭建多Master多Slave模式

1、安装内容说明

每个Master配置一个Slave,有多对Master-Slave,HA(双机集群)采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:

  • 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;

  • 缺点:Master宕机,磁盘损坏情况下会丢失少量消息。

安装模块

  • NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现

    主要包括两个功能:

    • Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;

    • 路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer和Consumer仍然可以动态感知Broker的路由的信息。

  • BrokerServer:Broker主要负责消息的存储、投递和查询以及服务高可用保证

  • rocketmq-console 控制台(可选):通过UI界面监控和管理mq

  1. 下载镜像包

    docker pull apache/rocketmq:4.9.0

  2. 首先运行命令启动Name Server

    docker run -d \
    --restart=always \
    --name rmqnamesrv \
    -p 9876:9876 \
    -v /home/RocketMQ/nameServer/log:/root/logs \
    -v /home/RocketMQ/nameServer/store:/root/store \
    -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m"  \
    -e "JAVA_OPTS=-Duser.home=/opt" \
    apache/rocketmq:4.9.0 \
    sh mqnamesrv 
    

    sh mqnamesrv:执行启动启动namesrv服务
    JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m jvm信息可以进入容器中查看运行的sh文件
    在这里插入图片描述

  3. 配置broker主从节点
    如果nameServer是多节点则namesrvAddr=192.168.0.134:9876;192.168.0.135:9876以;分割配置多个节点
    创建四个broker的配置文件listenPort分别为10611、10711、10811、10911,一主一从一组。这里提供一主一从供参考,其余只需要修改brokerName和listenPort即可
    在这里插入图片描述

    master节点配置文件

    # 两个server的地址加端口号
    namesrvAddr=192.168.0.134:9876
    # 所属集群名称,如果节点较多可以配置多个
    brokerClusterName = DefaultCluster
    # broker名称,master和slave使用相同的名称,表明他们的主从关系
    brokerName = broker01
    # 0表示Master,大于0表示不同的slave
    brokerId = 0
    # 表示几点做消息删除动作,默认是凌晨4点
    deleteWhen = 04
    # 在磁盘上保留消息的时长,单位是小时
    fileReservedTime = 48
    # 有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
    brokerRole = ASYNC_MASTER
    # 刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
    flushDiskType = ASYNC_FLUSH
    # 设置broker节点所在服务器的ip地址
    brokerIP1 = 192.168.0.134
    brokerIP2 = 192.168.0.134
    # 监听端口
    listenPort=10611
    # 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
    diskMaxUsedSpaceRatio=95
    

    slave配置文件

    # 两个server的地址加端口号
    namesrvAddr=192.168.0.134:9876
    # 所属集群名称,如果节点较多可以配置多个
    brokerClusterName = DefaultCluster
    # broker名称,master和slave使用相同的名称,表明他们的主从关系
    brokerName = broker01
    # 0表示Master,大于0表示不同的slave
    brokerId = 1
    # 表示几点做消息删除动作,默认是凌晨4点
    deleteWhen = 04
    # 在磁盘上保留消息的时长,单位是小时
    fileReservedTime = 48
    # 有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
    brokerRole = ASYNC_MASTER
    # 刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
    flushDiskType = ASYNC_FLUSH
    # 设置broker节点所在服务器的ip地址
    brokerIP1 = 192.168.0.134
    brokerIP2 = 192.168.0.134
    # 监听端口
    listenPort=10711
    # 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
    diskMaxUsedSpaceRatio=95
    
    

    运行docker命令启动Broker集群

    
    docker run -d  \
    --restart=always \
    --name rmqbrokerMaster1 \
    -p 10611:10611 \
    -p 10901:10909 \
    -v  /home/liushiwei/tools/RocketMQ/brokerServer01/masterLogs:/root/logs \
    -v  /home/liushiwei/tools/RocketMQ/brokerServer01/masterStore:/root/store \
    -v /home/liushiwei/tools/RocketMQ/brokerServer01/conf/masterBroker.conf:/opt/rocketmq-4.9.0/conf/broker.conf \
    -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m"  \
    -e "JAVA_OPTS=-Duser.home=/opt" \
    apache/rocketmq:4.9.0 \
    sh mqbroker -c /opt/rocketmq-4.9.0/conf/broker.conf 
    
    docker run -d  \
    --restart=always \
    --name rmqbrokerSlave1 \
    -p 10711:10711 \
    -p 10902:10909 \
    -v  /home/RocketMQ/brokerServer01/slaveLogs:/root/logs \
    -v  /home/RocketMQ/brokerServer01/slaveStore:/root/store \
    -v /home/RocketMQ/brokerServer01/conf/slaveBroker.conf:/opt/rocketmq-4.9.0/conf/broker.conf \
    -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m"  \
    -e "JAVA_OPTS=-Duser.home=/opt" \
    apache/rocketmq:4.9.0 \
    sh mqbroker -c /opt/rocketmq-4.9.0/conf/broker.conf 
    
    docker run -d  \
    --restart=always \
    --name rmqbrokerMaster2 \
    -p 10811:10811 \
    -p 10903:10909 \
    -v  /home/RocketMQ/brokerServer02/masterLogs:/root/logs \
    -v  /home/RocketMQ/brokerServer02/masterStore:/root/store \
    -v /home/RocketMQ/brokerServer02/conf/masterBroker.conf:/opt/rocketmq-4.9.0/conf/broker.conf \
    -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m"  \
    -e "JAVA_OPTS=-Duser.home=/opt" \
    apache/rocketmq:4.9.0 \
    sh mqbroker -c /opt/rocketmq-4.9.0/conf/broker.conf 
    
    docker run -d  \
    --restart=always \
    --name rmqbrokerSlave2 \
    -p 10911:10911 \
    -p 10904:10909 \
    -v  /home/RocketMQ/brokerServer02/slaveLogs:/root/logs \
    -v  /home/RocketMQ/brokerServer02/slaveStore:/root/store \
    -v /home/RocketMQ/brokerServer02/conf/slaveBroker.conf:/opt/rocketmq-4.9.0/conf/broker.conf \
    -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m"  \
    -e "JAVA_OPTS=-Duser.home=/opt" \
    apache/rocketmq:4.9.0 \
    sh mqbroker -c /opt/rocketmq-4.9.0/conf/broker.conf 
    

    Broker与Slave配对是通过指定相同的BrokerName参数来配对,Master的BrokerId必须是0,Slave的BrokerId必须是大于0的数。另外一个Master下面可以挂载多个Slave,同一Master下的多个Slave通过指定不同的BrokerId来区分

  4. 安装rockermq-console容器

    docker run -d \
    --restart=always \
    --name rmqadmin \
    -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.134:9876 \
    -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
    -p 9999:8080 \
    pangliang/rocketmq-console-ng
    

    在这里插入图片描述

详细说明GitHub官方文档这里讲的非常非常非常详细

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值