• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96

    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  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.4 java中连接测试

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

    rocketmq:
      name-server: 192.168.0.221:9876;192.168.0.221:9877
    
    • 1
    • 2

    2.5 控制台

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

    3.总结

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

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

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

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

  • 相关阅读:
    vue_mixin混入
    linux驱动之mmap地址映射
    Prometheus和grafana安装配置手册
    92、Redis ------- 使用 Lettuce 操作 Redis 的方法和步骤----(文字讲解无代码)
    运动场地预约管理系统,羽毛球场地预定系统,场地预约系统毕业设计
    聊聊分布式集群的基本概念
    又被夺命连环问了!从一道关于定时任务的面试题说起。
    【CTF】Crypto Writeup【思路已经告诉你了】
    PMI新人才三角如何构建自己的影响力?【洞见1】
    数据库主键设计中自增ID和Guid的比较
  • 原文地址:https://blog.csdn.net/qq_35551875/article/details/125428871