• 生产环境部署RocketMQ集群模式


    一、环境准备

    1.主机信息

    主机名 主机IP地址 备注
    broker-k8s-1 192.168.144.131 master &namesrv
    broker-k8s-2 192.168.144.132 master &namesrv
    broker-k8s-3 192.168.144.133 master &namesrv

    二、生产环境配置要求(因为mq对内存消耗比较大,所以生产环境建议内存给大些)

    硬件:  12G+内存(broker默认分配8G,namesrv默认分配4G,可自行调整)

    软件:

    1. 64bit OS, Linux/Unix/Mac is recommended;
    2. 64bit JDK 1.8+;
    3. Maven 3.2.x(非必要)
    4. Git(非必须)

    正式搭建:目录只是为了规范配置文件的存放路径,名称对实际配置无用

    目录介绍

    • 2m-noslave: 多Master模式
    • 2m-2s-sync: 多Master多Slave模式,同步双写
    • 2m-2s-async:多Master多Slave模式,异步复制

    下载对应安装包请在下面官网中下载你需要的版本安装包

    http://rocketmq.apache.org/docs/quick-start/

    本文是以 rocketmq-all-4.5.2版本进行集群部署:

    [root@k8s-1 rocketmq-all-4.5.2-bin-release]# pwd
    /usr/local/src/rocketmq-all-4.5.2-bin-release
    [root@k8s-1 rocketmq-all-4.5.2-bin-release]# ls conf/2m-noslave/ -lh
    total 12K
    -rw-r--r-- 1 root root 1.5K Oct 8 18:22 broker-a.properties
    -rw-r--r-- 1 root root 1.5K Oct 8 18:00 broker-b.properties
    -rw-r--r-- 1 root root 937 Jul 31 21:09 broker-trace.properties
    [root@k8s-1 rocketmq-all-4.5.2-bin-release]#

    broker-k8s-1:配置文件:

    重点注意以下参数:

    brokerClusterName : 集群的名称,同一个集群名称要一样的
    brokerName : broker的名称,同集群中,此名称要不同
    namesrvAddr : 集群所有节点的合集
    brokerIP1 : 监听在此IP的,通常默认是本机IP地址,但是不排除有桥接等导致监听IP地址不正常的问题。
    ot@k8s-1 rocketmq-all-4.5.2-bin-release]# cat conf/2m-noslave/broker-a.properties
    # 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/
     
    # 所属集群名字
    brokerClusterName=rocketmq-cluster
     
    # broker名字,注意此处不同的配置文件填写的不一样
    brokerName=broker-k8s-1
     
    # 0 表示 Master,>0 表示 Slave
    brokerId=0
     
    # 删除文件时间点,默认凌晨4点。24小时制,单位小时
    deleteWhen=04
     
    # 文件保留时间,默认 72 小时。根据业务情况调整
    fileReservedTime=168
     
    # Broker 对外服务的监听端口
    listenPort=10911
     
    # nameServer地址,分号分割
    namesrvAddr=192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876
     
    # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface
    # 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。
    brokerIP1=192.168.144.131
     
    # commitLog 存储路径
    storePathCommitLog=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/commitlog
     
    #发送消息的最大线程数
    sendMessageThreadPoolNums: 64
    #large thread numbers
    #发送消息是否使用可重入锁
    useReentrantLockWhenPutMessage: true
     
    # 消费队列存储路径存储路径
    storePathConsumerQueue=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/consumequeue
     
    # commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
     
    # Broker 的角色
    # - ASYNC_MASTER 异步复制Master
    # - SYNC_MASTER 同步双写Master
    # - SLAVE
    brokerRole=ASYNC_MASTER
     
    # 刷盘方式
    # - ASYNC_FLUSH 异步刷盘
    # - SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH

    broker-k8s-2:配置文件

    重点注意以下参数:

    brokerClusterName : 集群的名称,同一个集群名称要一样的
    brokerName : broker的名称,同集群中,此名称要不同
    namesrvAddr : 集群所有节点的合集
    brokerIP1 : 监听在此IP的,通常默认是本机IP地址,但是不排除有桥接等导致监听IP地址不正常的问题。
    
    
    [root@k8s-2 rocketmq-all-4.5.2-bin-release]# cat conf/2m-noslave/broker-a.properties
    # 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/
     
    # 所属集群名字
    brokerClusterName=rocketmq-cluster
     
    # broker名字,注意此处不同的配置文件填写的不一样
    brokerName=broker-k8s-2
     
    # 0 表示 Master,>0 表示 Slave
    brokerId=0
     
    # 删除文件时间点,默认凌晨4点。24小时制,单位小时
    deleteWhen=04
     
    # 文件保留时间,默认 72 小时。根据业务情况调整
    fileReservedTime=168
     
    # Broker 对外服务的监听端口
    listenPort=10911
     
    # nameServer地址,分号分割
    namesrvAddr=192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876
     
    # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface
    # 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。
    brokerIP1=192.168.144.132
     
    # commitLog 存储路径
    storePathCommitLog=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/commitlog
     
    #发送消息的最大线程数
    sendMessageThreadPoolNums: 64
    #large thread numbers
    #发送消息是否使用可重入锁
    useReentrantLockWhenPutMessage: true
     
    # 消费队列存储路径存储路径
    storePathConsumerQueue=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/consumequeue
     
    # commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
     
    # Broker 的角色
    # - ASYNC_MASTER 异步复制Master
    # - SYNC_MASTER 同步双写Master
    # - SLAVE
    brokerRole=ASYNC_MASTER
     
    # 刷盘方式
    # - ASYNC_FLUSH 异步刷盘
    # - SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH

    broker-k8s-3:配置文件

    重点注意以下参数:

    brokerClusterName : 集群的名称,同一个集群名称要一样的
    brokerName : broker的名称,同集群中,此名称要不同
    namesrvAddr : 集群所有节点的合集
    brokerIP1 : 监听在此IP的,通常默认是本机IP地址,但是不排除有桥接等导致监听IP地址不正常的问题。
    
    
    [root@k8s-3 rocketmq-all-4.5.2-bin-release]# cat conf/2m-noslave/broker-a.properties
    # 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/
     
    # 所属集群名字
    brokerClusterName=rocketmq-cluster
     
    # broker名字,注意此处不同的配置文件填写的不一样
    brokerName=broker-k8s-3
     
    # 0 表示 Master,>0 表示 Slave
    brokerId=0
     
    # 删除文件时间点,默认凌晨4点。24小时制,单位小时
    deleteWhen=04
     
    # 文件保留时间,默认 72 小时。根据业务情况调整
    fileReservedTime=168
     
    # Broker 对外服务的监听端口
    listenPort=10911
     
    # nameServer地址,分号分割
    namesrvAddr=192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876
     
    # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface
    # 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。
    brokerIP1=192.168.144.133
     
    # commitLog 存储路径
    storePathCommitLog=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/commitlog
     
    #发送消息的最大线程数
    sendMessageThreadPoolNums: 64
    #large thread numbers
    #发送消息是否使用可重入锁
    useReentrantLockWhenPutMessage: true
     
    # 消费队列存储路径存储路径
    storePathConsumerQueue=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/consumequeue
     
    # commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
     
    # Broker 的角色
    # - ASYNC_MASTER 异步复制Master
    # - SYNC_MASTER 同步双写Master
    # - SLAVE
    brokerRole=ASYNC_MASTER
     
    # 刷盘方式
    # - ASYNC_FLUSH 异步刷盘
    # - SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH
    启动集群:
    在  broker-k8s-1  broker-k8s-2  broker-k8s-3 启动 broker 服务
     cd  /usr/local/src/rocketmq-all-4.5.2-bin-release/
     nohup sh bin/mqnamesrv &
    在  broker-k8s-1  broker-k8s-2  broker-k8s-3 启动 broker 服务
    # 机器下执行broker-a.properties文件启动
    nohup sh bin/mqbroker -c conf/2m-noslave/broker-a.properties -n "192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876" &

    验证集群情况:

    mq启动脚本:

    #!/bin/sh
     
    source /etc/profile
     
    CODE_DIR="/opt/app/rocketmq-all-4.5.2-bin-release"
     
    start() {
      cd ${CODE_DIR}
      nohup sh bin/mqnamesrv &> mqnamesrv.log &
      nohup sh bin/mqbroker -c conf/2m-noslave/broker-a.properties -n "172.18.178.191:9876;172.18.178.192:9876;172.18.178.193:9876" &> nohup.out &
    }
     
    stop() {
        cd ${CODE_DIR}
        sh bin/mqshutdown broker
        sh bin/mqshutdown namesrv
    }
     
    status() {
      pid1=`ps ax | grep -i 'org.apache.rocketmq.namesrv.NamesrvStartup' |grep java | grep -v grep | awk '{print $1}'`
      if [ -z "$pid1" ] ; then
          echo "No mqnamesrv running."
      else
          echo "The mqnamesrv(${pid1}) is running..."
      fi
      pid2=`ps ax | grep -i 'org.apache.rocketmq.broker.BrokerStartup' |grep java | grep -v grep | awk '{print $1}'`
      if [ -z "$pid2" ] ; then
          echo "No mqbroker running."
          return 1;
      else
          echo "The mqbroker(${pid2}) is running..."
          return 0
      fi
       
    }
    case "$1" in
      'start')
        start
        ;;
     
      'stop')
        stop
        ;;
       
      'restart')
        stop
        start
        ;;
      'status')
        status
        ;;
      *)
        echo "Usage: $0 { start | stop | status |  restart }"
        exit 1
        ;;
    esac
     
    exit 0
    

    mq-web启动脚本:

    #!/bin/bash
     
    source /etc/profile
     
    CODE_DIR="/opt/app/rocketmq-console-ng"
    Process_name="rocketmq-console-ng-1.0.1.jar"
     
     
    status() {
    PID=$(ps -ef | grep ${Process_name} | grep -v grep | awk '{print $2}')
     
    if [ ! -n "$PID" ]; then
      echo "NO RUNNING"
    else
      echo "RUNNING"
      echo "PID IS : $PID"
    fi
    }
    start() {
    PID=$(ps -ef | grep ${Process_name} | grep -v grep | awk '{print $2}')
    if [ ! -n "$PID" ]; then
      cd ${CODE_DIR}
       nohup java -Xms128m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=128m -jar /opt/app/rocketmq-console-ng/rocketmq-console-ng-1.0.1.jar &> nohup.out &
    else
      echo "Ready RUNNING"
      echo "PID IS : $PID"
    fi
    }
    stop() {
    PID=$(ps -ef | grep ${Process_name} | grep -v grep | awk '{print $2}')
    if [ ! -n "$PID" ]; then
      echo "NOT RUNNING"
    else
      echo "PID IS : $PID"
      kill -9 $PID
    fi
    }
    case "$1" in
      'start')
        start
        ;;
      'stop')
        stop
        ;;
      'restart')
        stop
        sleep 8
        start
        ;;
      'status')
        status
        ;;
      *)
        echo "Usage: $0 { start | stop | restart | status  }"
        exit 1
        ;;
    esac
     
    exit 0
  • 相关阅读:
    基于lua语言实现面向对象编程
    一.Linux常用命令
    获取线程名称、设置线程名称、获取当前所有线程
    关系型数据库和非关系数据库区别
    Java基础类型之间的转换
    初始化 List 的几种方法
    谷歌浏览器打不开网页,但Opera可以打开网页
    遍历List和Map的几种方法
    java对数组进行排序
    MySQL实现事务隔离的原理:MVCC
  • 原文地址:https://www.cnblogs.com/abner123/p/13150173.html
Copyright © 2020-2023  润新知