实践RocketMQ 双Master-Slave 集群架构搭建部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实践RocketMQ 双Master-Slave 集群架构搭建部署相关的知识,希望对你有一定的参考价值。

  • 准备材料:
    • Linux操作环境( 假设两台服务器ip为:192.168.74.130和192.168.74.131);
    • RocketMQ
    • JDK 1.8+
  • 分别修改两台服务RockerMQ的配置文件,路径为:rocketmq-4.6.1/conf/2m-2s-async(这里以异步为例)
    • broker-a.properties(broker a的Master配置文件) broker-a-s.properties(broker a的Slave配置文件)
    • broker-b.properties(broker b的Master配置文件) broker-b-s.properties(broker b的Slave配置文件)

      130服务器修改 a的master 与 b 的slave配置文件,131服务器修改 b的master 与 a 的slave配置文件;

      这里以130的配置文件为例:
      master文件:

                                          brokerClusterName=DefaultCluster
                                          #broker 名称
                                          brokerName=broker-a
                                          # broker id 0-Master 其他-Slave
                                          brokerId=0
                                          deleteWhen=04
                                          fileReservedTime=48
                                          brokerRole=ASYNC_MASTER
                                          flushDiskType=ASYNC_FLUSH
                                          #namesrv地址列表,多个用,或;分割                           
                                          namesrvAddr=192.168.74.130:9876;192.168.74.131:9876
                                          #监听端口,默认为10911,多个broker 端口不能相同
                                          listenPort=10911
                                          #日志 同一台服务器上多个broker的配置路径不能为相同,否则报错:服务已经启动
                                          storePathRootDir=/data/rocketmq/store/rootdir-a
                                          storePathCommitLog=/data/rocketmq/store/commitlog-a

      slave文件:

                                          brokerClusterName=DefaultCluste
                                          brokerName=broker-b
                                          brokerId=1
                                          deleteWhen=04
                                          fileReservedTime=48
                                          brokerRole=SLAVE
                                          flushDiskType=ASYNC_FLUS
                                          listenPort=10921
                                          namesrvAddr=192.168.74.130:9876,192.168.74.131:9876
                                          storePathRootDir=/data/rocketmq/store/rootdir-b-s
                                          storePathCommitLog=/data/rocketmq/store/commitlog-b-s
    1. 启动步骤

      • 分别启动两台服务器的NameSrv (默认端口号为9876)
        nohup sh bin/mqnamesrv &;
      • 分别启动两天服务器的master broker -c 参数指定启动时读取的配置文件的路径,不加读取默认的配置文件
        nohup sh bin/mqbroker -c ./conf/2m-2s-async/broker-a.properties & //130上执行启动a broker的master
        nohup sh bin/mqbroker -c ./conf/2m-2s-async/broker-b.properties & //131上执行启动b broker的master
      • 分别启动两台服务器的slave broker
        nohup sh bin/mqbroker -c ./conf/2m-2s-async/broker-b-s.properties & //130上执行启动b broker的slave
        nohup sh bin/mqbroker -c ./conf/2m-2s-async/broker-b.properties & //131上执行启动a broker的slave
    2. 使用 jps 命令进行查看服务是否启动
      [root@localhost bin]# jps
      5329 Jps
      3161 NamesrvStartup
      3401 BrokerStartup
      4509 BrokerStartup

      到这里就成功的启动起来了。

    3. 其他命令
      关闭broker : sh bin/mqshutdown broker
      关闭namesrv:sh bin/mqshutdown namesrv
    4. 问题总结:
      1.启动broker时报jvm内存不足
      原因:默认jvm 内存配置高于物理内存配置
      解决方法:修改bin目录下runbroker.sh、runserver.sh
      JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m"
      JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
      2.broker 无法注册另外一台namesrv
      原因:
      1. 网络不可达 (检查网络)
      2. 检查防火墙是否开启(关闭防火墙命令 systemctl stop firewalld)
        3.启动多个broker时报broker已启动
        原因:
        1.启动时没有指定配置文件或未修改配置文件监听端口,导致端口冲突;
        2.未指定日志文件路径或路径一致;

    以上是关于实践RocketMQ 双Master-Slave 集群架构搭建部署的主要内容,如果未能解决你的问题,请参考以下文章

    RocketMQ Flink Catalog 设计与实践

    面试官:RocketMQ 消息会丢失吗?如何解决消息丢失?

    MySQL主从复制(Master-Slave)实践

    凡尔赛之---MySQL主从复制(Master-Slave)实践

    RocketMQ的消息刷盘和消息双写

    rocketmq简单实践