• rocketmq集群搭建笔记


    rocketmq集群搭建笔记

    本次搭建的是双Master+双Slave集群模式

    笔记最后记录了本次安装出现的一些问题,以及解决方法

    一、依赖下载

    1. rocketmq二进制,版本是4.9.0
    2. rocketmq-dashboard,版本1.0.0

    二、环境准备

    1. 操作系统

      采用虚拟机安装,所使用的虚拟机是UbuntuServer 20.04TLS Arm

    2. maven

      从源码构建rocketmq-dashboard需要使用maven,采用的版本为3.6.3,ubuntu系统可使用下列命令安装

      sudo apt-get install maven
      
      • 1

      安装后,可使用下列命令找到maven的安装位置,我的虚拟机显示maven的安装位置为/usr/share/maven

      whereis maven
      
      • 1

      修改maven的镜像源为阿里源,进入maven的安装目录,进入conf目录,然后使用vim在settings.xml文件的标签内添加如下内容:

      <mirror>
      	<id>alimavenid>
        <name>aliyun mavenname>
        <url>http://maven.aliyun.com/nexus/content/groups/public/url>
        <mirrorOf>centralmirrorOf>
      mirror>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    3. openjdk8

      rocketmq使用java开发,所以需要安装java环境,这里也是直接从ubuntu下载,输入如下命令即可

      sudo apt-get install openjdk-8-jdk
      
      • 1
    4. 将上述依赖中的两个文件下载,并上传到虚拟机中(windows下面可以使用xftp,mac下面可以使用royal tsx),至此准备环境完毕

    三、集群搭建

    3.1 虚拟机规划

    本次集群安装使用了两个独立的虚拟机,UbuntuServer1和UbuntuServer2,两个虚拟机安装的内容如下:

    1. UbuntuServer1

      名称使用端口
      NameServer9876
      broker-b(Master)18001
      broker-a (Slave)17003
      rocketmq-dashboard19001
    2. UbuntuServer2

      名称使用端口
      NameServer9876
      broker-a(Master)17001
      broker-b(Slave)18003

    3.2 安装步骤

    1. 上传文件以及解压

      在UbuntuServer1虚拟机中上传rocketmq以及rocketmq-dashborad压缩包,并解压

    2. 在UbuntuServer1中从源码编译rocketmq-dashboard

      只要修改了maven的镜像源为阿里源,那么参考官方的源码编译步骤,应该没什么问题

      官方教程链接

    3. 进入rocketmq-all(这个目录是我解压rocketmq官方二进制压缩包后自己修改的名称)文件夹下的/conf/2m-2s-async目录

      这个目录下面是官方为我们提供的双主双从集群模式的配置文件模版

      broker-b.properties文件的内容替换如下

      brokerClusterName=DefaultCluster
      brokerName=broker-b
      brokerId=0
      deleteWhen=04
      fileReservedTime=48
      brokerRole=ASYNC_MASTER
      flushDiskType=ASYNC_FLUSH
      namesrvAddr=10.211.55.67:9876;10.211.55.68:9876
      # 设置MasterB的监听端口
      listenPort=18001
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      将broker-a-s.properties文件的内容替换如下

      brokerClusterName=DefaultCluster
      brokerName=broker-a
      brokerId=1
      deleteWhen=04
      fileReservedTime=48
      brokerRole=SLAVE
      flushDiskType=ASYNC_FLUSH
      namesrvAddr=10.211.55.67:9876;10.211.55.68:9876
      # 设置SlaveA的监听端口
      listenPort=17003
      # 这里的路径替换为自己的
      storePathRootDir=/home/xcfyl/store-s
      storePathCommitLog=/home/xcfyl/store-s/commitlog
      storePathConsumeQueue=/home/xcfyl/store-s/consumequeue
      storePathIndex=/home/xcfyl/store-s/index
      storeCheckpoint=/home/xcfyl/store-s/checkpoint
      abortFile=/home/xcfyl/store-s/abort
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17

      自此UbuntuServer1虚拟机中的配置环境已经准备好了

    4. 按照同样的方式,修改UbuntuServer2中的rocketmq-all文件夹下面的配置文件,具体如下

      broker-a.properties文件的内容替换如下

      brokerClusterName=DefaultCluster
      brokerName=broker-a
      brokerId=0
      deleteWhen=04
      fileReservedTime=48
      brokerRole=ASYNC_MASTER
      flushDiskType=ASYNC_FLUSH
      namesrvAddr=10.211.55.67:9876;10.211.55.68:9876
      # 设置MasterA的监听端口
      listenPort=17001
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      将broker-b-s.properties文件的内容替换如下

      brokerClusterName=DefaultCluster
      brokerName=broker-b
      brokerId=1
      deleteWhen=04
      fileReservedTime=48
      brokerRole=SLAVE
      flushDiskType=ASYNC_FLUSH
      namesrvAddr=10.211.55.67:9876;10.211.55.68:9876
      # 设置SlaveB的监听端口
      listenPort=18003
      storePathRootDir=/home/xcfyl/store-s
      storePathCommitLog=/home/xcfyl/store-s/commitlog
      storePathConsumeQueue=/home/xcfyl/store-s/consumequeue
      storePathIndex=/home/xcfyl/store-s/index
      storeCheckpoint=/home/xcfyl/store-s/checkpoint
      abortFile=/home/xcfyl/store-s/abort
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

      自此UbuntuServer2虚拟机中的配置环境已经准备好了,这里要非常小心,不要改错了文件,不然后面会导致启动出现问题

    3.3 集群启动

    启动集群的时候,请严格按照下述步骤

    1. 分别在UbuntuServer1和UbuntuServer2中启动NameServer,使用命令如下,运行该指令,需要进入rocketmq-all目录下

      # 启动nameserver
      nohup sh bin/mqnamesrv &
      # 查看日志,如果出现boot success类似的字样,那么一般就是成功了
      tail -f ~/logs/rocketmqlogs/namesrv.log
      
      • 1
      • 2
      • 3
      • 4
    2. 启动UbuntuServer1和UbuntuServer2中的Master,使用命令如下

      UbuntuServer1启动Master,使用的配置文件是broker-b.properties,因为要在UbuntuServer1中部署名称为broker-b的Master节点,参见之前的虚拟机规划

      # 启动名称为broker-b的Master
      nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties & tail -f ~/logs/rocketmqlogs/broker.log
      # 查看是否启动成功
      tail -f ~/logs/rocketmqlogs/broker.log
      
      • 1
      • 2
      • 3
      • 4

      UbuntuSever2启动Master

      # 启动名称为broker-a的Master
      nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties & 
      # 查看是否启动成功
      tail -f ~/logs/rocketmqlogs/broker.log
      
      • 1
      • 2
      • 3
      • 4
    3. 启动UbuntuServer1和UbuntuServer2中的Slave,使用命令如下

      UbuntuServer1启动Slave,使用的配置文件是broker-a-s.properties,因为要在UbuntuServer1中部署名称为broker-a-s的Slave节点,参见之前的虚拟机规划

      # 启动名称为broker-a-s的Slave
      nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties & 
      tail -f ~/logs/rocketmqlogs/broker.log
      
      • 1
      • 2
      • 3

      UbuntuServer2启动Slave

      nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties & 
      tail -f ~/logs/rocketmqlogs/broker.log 12
      
      • 1
      • 2
    4. 运行rocketmq-dashboard

      确保在这之前已经正确编译了rocketmq-dashboard,编译完成之后,进入target目录,输入如下指令运行dashboard
      在这里插入图片描述

    5. 在宿主机上,输入http://安装了dashboard虚拟机的ip地址:19001访问控制面板
      在这里插入图片描述

    6. 如果看到了如下内容说明集群已经正常启动
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7yKTvZG-1663248170319)(assets/image-20220915210802666.png)]

    3.4 集群关闭

    进入rocketmq-all目录下面的bin目录,先后执行如下指令,即可关闭一台机器上的NameServer和Master以及Slave

    # 关闭nameserver
    ./mqshutdown namesrv
    # 关闭broker
    ./mqshutdown broker
    # 通过jps查看java进程是否终止
    jps
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    四、可能的问题以及解决方案

    1. 在使用nohup命令启动后台服务的时候,可能出现控制台阻塞的情况,输出一句话,但是半天不往下面走,这是正常现象,Ctrl+C即可,如果使用Ctrl+C出现了Exit的字样,那么就说明不正常了,此时可以进入rocketmq-all目录下面,查看nohup.out的内容进行排查,cat nohup.out查看即可

    2. 直接从别人的文件中拷贝broker的配置文件,结果内容完全一样,自己死活运行不起来,可能的原因是,properties文件中,某些配置项的末尾多了一些看不见的空格,这个时候,可以进入vim的命令模式(esc即可进入),然后把光标移动每一行的末尾,就可以看见多余的空格,光标移动到空格处,命令模式下按下x即可删除。

    3. 端口问题,同一台机器的两个broker的端口好像不能太近,我之前使用的全是broker的默认端口,结果就是启动不了,然后改为了较大的端口,并且两个端口差别也比较大的时候,就ok了。

    4. maven一定要修改镜像源,不然可能导致编译dashboard的过程中,报各种依赖下载错误。

    5. 关于虚拟机的问题,如果两个虚拟机是从别的虚拟机复制来的,那么要记得更改虚拟机的ip地址,可以直接将虚拟机的ip地址改为静态ip,ubuntu server的更改方法为:

      vim /etc/netplan/xx-installer-config.yaml
      
      • 1

      将该文件修改为如下内容即可

      # This is the network config written by 'subiquity'
      network:
        ethernets:
          enp0s5:
            dhcp4: false
            # 你的静态ip地址
            addresses: ['10.211.55.68/24']
            # 网关地址
            gateway4: 10.211.55.1
            # dns地址
            nameservers:
              addresses: ['10.211.55.1']
        version: 2
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
  • 相关阅读:
    微信小程序提示确认框
    Pisa-Proxy 之 SQL 解析实践
    11. Vue3组件的更新渲染逻辑
    VGGNet架构解析
    软件工程专业如何论文选题?
    基于minist数据集用VAE训练生成图片(VAE基础入门学习)
    python使用request包爬取网页数据、使用BeautifulSoup解析爬取的数据获取文字和链接地址列表
    Python数据分析与机器学习在金融风控中的应用
    软件设计模式之访问者模式(Visitor Pattern)
    everything常用搜索命令
  • 原文地址:https://blog.csdn.net/xichengfengyulou/article/details/126880010