RocketMQ第三话 -- RocketMQ高可用集群搭建

本文主要记录RocketMQ两主两从的集群搭建

1.环境准备

liunx centos7,docker-compose,镜像apache/rocketmq:4.9.3

2.集群搭建

2.1 broker配置文件

##master节点broker配置文件
#集群名一致就好
brokerClusterName=DefaultCluster
#容器化部署 这里需要填写 宿主机IP
brokerIP1=192.168.0.221
#每个集群master和slave包保持一致
brokerName=broker-a
#master=0 slave=1
brokerId=0
deleteWhen=04
fileReservedTime=48
#Broker角色 ASYNC_MASTER/异步复制Master SYNC_MASTER/同步双写Master SLAVE
brokerRole=ASYNC_MASTER
##刷盘方式 ASYNC_FLUSH/异步刷盘 SYNC_FLUSH/同步刷盘
flushDiskType=ASYNC_FLUSH
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
#监听端口 间隔差3 如需连接控制台 需要对外
listenPort=10911
#本地测试要写宿主机IP,参数传 -n
namesrvAddr=192.168.0.221:9876;192.168.0.221:9877

##第一份slave broker文件
brokerClusterName=DefaultCluster
brokerIP1=192.168.0.221
#每组master和slave要相对应
brokerName=broker-a
#master=0 slave=1
brokerId=1
deleteWhen=04
fileReservedTime=48
#Broker角色 ASYNC_MASTER/异步复制Master SYNC_MASTER/同步双写Master SLAVE
brokerRole=SLAVE
##刷盘方式 ASYNC_FLUSH/异步刷盘 SYNC_FLUSH/同步刷盘
flushDiskType=ASYNC_FLUSH
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
#监听端口
listenPort=10931
#本地测试要写宿主机IP,参数传 -n
namesrvAddr=192.168.0.221:9876;192.168.0.221:9877

master2和salve2复制上面内容,需要主要的是:brokerName、brokerId、brokerRole、listenPort这几个参数的不同

2.2 docker-compose.yaml文件

version: '3.7'
services:
  namesrv1:
    image: apache/rocketmq:4.9.3
    container_name: namesrv1
    ports:
    - "9876:9876"
    networks:
    - my-net
    command: sh mqnamesrv
  namesrv2:
    image: apache/rocketmq:4.9.3
    container_name: namesrv2
    ports:
    - "9877:9876"
    networks:
    - my-net
    command: sh mqnamesrv
  broker-m1:
    image: apache/rocketmq:4.9.3
    container_name: broker-m1
    #端口映射和配置监听的端口一致
    ports:
      - 10911:10911
    volumes:
    - /root/local/rocketmq-cluster/broker-m1.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
    environment:
      #这是无奈之下试出来的 默认启动大小要占用4G 内存也不会报错 巨坑! 
      JAVA_OPT_EXT: -server -Xms128m -Xmx128m -Xmn128
    networks:
    - my-net
    command: sh mqbroker -n namesrv1:9876;namesrv2:9876 -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf
    depends_on:
      - namesrv1
      - namesrv2
  broker-m2:
    image: apache/rocketmq:4.9.3
    container_name: broker-m2
    ports:
      - 10921:10921
    volumes:
    - /root/local/rocketmq-cluster/broker-m2.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
    environment:
      JAVA_OPT_EXT: -server -Xms128m -Xmx128m -Xmn128
    networks:
    - my-net
    command: sh mqbroker -n namesrv1:9876;namesrv2:9876 -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf
    depends_on:
      - namesrv1
      - namesrv2

  broker-s1:
    image: apache/rocketmq:4.9.3
    container_name: broker-s1
    ports:
      - 10931:10931
    volumes:
    - /root/local/rocketmq-cluster/broker-s1.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
    environment:
      JAVA_OPT_EXT: -server -Xms128m -Xmx128m -Xmn128
    networks:
    - my-net
    command: sh mqbroker -n namesrv1:9876;namesrv2:9876 -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf
    depends_on:
      - namesrv1
      - namesrv2
  broker-s2:
    image: apache/rocketmq:4.9.3
    container_name: broker-s2
    ports:
      - 10941:10941
    volumes:
    - /root/local/rocketmq-cluster/broker-s2.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
    environment:
      JAVA_OPT_EXT: -server -Xms128m -Xmx128m -Xmn128
    networks:
    - my-net
    command: sh mqbroker -n namesrv1:9876;namesrv2:9876 -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf
    depends_on:
      - namesrv1
      - namesrv2
  #可视化控制台
  rocket-console:
    image: styletang/rocketmq-console-ng
    container_name: rocket-console
    ports:
    - "8100:8080"
    environment:
      JAVA_OPTS: -Drocketmq.config.namesrvAddr=namesrv1:9876;namesrv2:9876 -Drocketmq.config.isVIPChannel=false
    networks:
    - my-net
    depends_on:
      - namesrv1
networks:
  my-net:
    external: true

2.3 启动

[root@m rocketmq-cluster]# docker-compose ps -a
     Name                   Command               State                                  Ports                               
-----------------------------------------------------------------------------------------------------------------------------
broker-m1        sh mqbroker -n namesrv1:98 ...   Up      10909/tcp, 0.0.0.0:10911->10911/tcp, 10912/tcp, 9876/tcp           
broker-m2        sh mqbroker -n namesrv1:98 ...   Up      10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:10921->10921/tcp, 9876/tcp
broker-s1        sh mqbroker -n namesrv1:98 ...   Up      10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:10931->10931/tcp, 9876/tcp
broker-s2        sh mqbroker -n namesrv1:98 ...   Up      10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:10941->10941/tcp, 9876/tcp
namesrv1         sh mqnamesrv                     Up      10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:9876->9876/tcp            
namesrv2         sh mqnamesrv                     Up      10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:9877->9876/tcp            
rocket-console   sh -c java $JAVA_OPTS -jar ...   Up      0.0.0.0:8100->8080/tcp  

2.4 java中连接测试

只有配置不一样,其他无需修改

rocketmq:
  name-server: 192.168.0.221:9876;192.168.0.221:9877

2.5 控制台

节点都启动的情况下,消费了一些消息,是分布消费的
在这里插入图片描述

3.总结

1.特别注意配置文件的不同和相同处
2.内存大小控制,虚拟机测试时巨坑
3.从节点停掉后,观察很久没有转为主节点(如果是这样,那从节点还有啥意义?这个问题没解决)

以上就是本章的全部内容了。

上一篇:RocketMQ第二话 – RocketMQ事务消息、延时消息实现
下一篇:MQTT第一话 – Docker安装emqx以及Springboot集成emqx

书山有路勤为径,学海无涯苦作舟

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值