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
    

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

    whereis maven
    

    修改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>
    
  3. openjdk8

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

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

三、集群搭建

3.1 虚拟机规划

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

  1. UbuntuServer1

    名称 使用端口
    NameServer 9876
    broker-b(Master) 18001
    broker-a (Slave) 17003
    rocketmq-dashboard 19001
  2. UbuntuServer2

    名称 使用端口
    NameServer 9876
    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
    

    将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
    

    自此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
    

    将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
    

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

3.3 集群启动

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

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

    # 启动nameserver
    nohup sh bin/mqnamesrv &
    # 查看日志,如果出现boot success类似的字样,那么一般就是成功了
    tail -f ~/logs/rocketmqlogs/namesrv.log
    
  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
    

    UbuntuSever2启动Master

    # 启动名称为broker-a的Master
    nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties & 
    # 查看是否启动成功
    tail -f ~/logs/rocketmqlogs/broker.log
    
  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
    

    UbuntuServer2启动Slave

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

    确保在这之前已经正确编译了rocketmq-dashboard,编译完成之后,进入target目录,输入如下指令运行dashboard
    rocketmq集群搭建笔记_第1张图片

  5. 在宿主机上,输入http://安装了dashboard虚拟机的ip地址:19001访问控制面板
    rocketmq集群搭建笔记_第2张图片

  6. 如果看到了如下内容说明集群已经正常启动
    rocketmq集群搭建笔记_第3张图片

3.4 集群关闭

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

# 关闭nameserver
./mqshutdown namesrv
# 关闭broker
./mqshutdown broker
# 通过jps查看java进程是否终止
jps

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

  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
    

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

    # 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
    

你可能感兴趣的:(Java学习笔记--old,rocketmq,环境搭建,java,消息队列)