一、Docker方式部署(单节点)

创建namesrv服务

拉取镜像

docker pull rocketmqinc/rocketmq

创建namesrv数据持久化路径

mkdir -p  /docker/rocketmq/data/namesrv/logs   /docker/rocketmq/data/namesrv/store

构建namesrv容器

docker run -d \\
--restart=always \\
--name rmqnamesrv \\
-p 9876:9876 \\
-v /docker/rocketmq/data/namesrv/logs:/root/logs \\
-v /docker/rocketmq/data/namesrv/store:/root/store \\
-e "MAX_POSSIBLE_HEAP=100000000" \\
rocketmqinc/rocketmq \\
sh mqnamesrv

可以通过命令查看运行后的日志,没有报错的话容器就已经运行起来了

docker logs -f rmqnamesrv --tail 30

创建broker节点

创建broker数据存储路径

mkdir -p  /docker/rocketmq/data/broker/logs   /docker/rocketmq/data/broker/store /docker/rocketmq/conf

创建配置文件

vim /docker/rocketmq/conf/broker.conf
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址
brokerIP1 = 192.168.0.24
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95

##broker节点IP要写成服务器的IP,不要按照我的去写

构建broker容器

docker run -d  \\
--restart=always \\
--name rmqbroker \\
--link rmqnamesrv:namesrv \\
-p 10911:10911 \\
-p 10909:10909 \\
-v  /docker/rocketmq/data/broker/logs:/root/logs \\
-v  /docker/rocketmq/data/broker/store:/root/store \\
-v /docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \\
-e "NAMESRV_ADDR=namesrv:9876" \\
-e "MAX_POSSIBLE_HEAP=200000000" \\
rocketmqinc/rocketmq \\
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

可通过命令查看运行日志

docker logs -f rmqbroker --tail 30

无异常就表示已经运行起来了

创建rockermq-console服务

拉取镜像

docker pull pangliang/rocketmq-console-ng

构建rockermq-console容器

docker run -d \\
--restart=always \\
--name rmqadmin \\
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.24:9876 \\
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \\
-p 9999:8080 \\
pangliang/rocketmq-console-ng

##namesev地址要填写正确

如果无以外的情况下,访问IP:9999 就可以看到rocketmq的控制台界面了

如果访问不到可以看看是否开启了防火墙,如果开启的话要允许9876、10911、9999端口访问

#firewalld规则
firewall-cmd --permanent --zone=public --add-port=9876/tcp
firewall-cmd --permanent --zone=public --add-port=10911/tcp
firewall-cmd --permanent --zone=public --add-port=9999/tcp
#让规则生效
firewall-cmd --reload

开放后如果还无法访问可以查看云服务器安全组规则是否有添加开放端口

docker compose方式(集群)

IP1: 192.168.0.242 broker A集群

IP2: 192.168.0.206 broker B集群

这里部署到2台机器中启动6个容器,包括1个nameserver、4个broker和1个控制台,首先在A集群创建配置文件目录

#创建持久化目录
mkdir -p /opt/data/rocketmq && cd /opt/data/rocketmq/
#创建配置文件以及其他目录
mkdir -p broker-a-m/{conf,logs,store}
mkdir -p broker-a-s/{conf,logs,store}
#分别创建a集群的主节点文件和从节点文件
vim broker-a-m/conf/broker.conf
vim broker-a-s/conf/broker.conf

主节点配置文件内容

#集群名称
brokerClusterName=DefaultCluster
#broker名称
brokerName=broker-a
#brokerId master用0 slave用其他
brokerId=0
#清理时机
deleteWhen=4
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SYNC_MASTER
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#主机ip
brokerIP1=192.168.0.242
brokerIP2=192.168.0.242
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
#是否能够自动创建topic
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

从节点配置文件内容

#集群名称
brokerClusterName=DefaultCluster
#broker名称
brokerName=broker-a
#brokerId master用0 slave用其他
brokerId=1
#清理时机
deleteWhen=4
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#主机ip
brokerIP1=192.168.0.242
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=11911
#是否能够自动创建topic
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

修改目录权限,不然容器没有权限对目录进行写入

chmod 777 -R broker-a-*

接着编写集群A的docker-compose.yml文件

version: "3"
services:
  mqnamesrv:
    image: foxiswho/rocketmq:4.8.0
    container_name: mqnamesrv
    ports:
      - 9876:9876
    environment:
      JAVA_OPT: -server -Xms256m -Xmx256m
    command: sh mqnamesrv

  mqbroker-a-m:
    image: foxiswho/rocketmq:4.8.0
    container_name: mqbroker1-m-1
    ports:
      - 10911:10911
      - 10909:10909
      - 10912:10912
    volumes:
      - ./broker-a-m/conf/broker.conf:/etc/rocketmq/broker.conf
      - ./broker-a-m/logs:/home/rocketmq/logs
      - ./broker-a-m/store:/home/rocketmq/store
    environment:
      JAVA_OPT_EXT: -Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128m
      NAMESRV_ADDR: mqnamesrv:9876
    command: sh mqbroker -c /etc/rocketmq/broker.conf
    depends_on:
      - mqnamesrv
  mqbroker-a-s:
    image: foxiswho/rocketmq:4.8.0
    container_name: mqbroker1-s-1
    ports:
      - 11911:11911
      - 11909:11909
      - 11912:11912
    volumes:
      - ./broker-a-s/conf/broker.conf:/etc/rocketmq/broker.conf
      - ./broker-a-s/logs:/home/rocketmq/logs
      - ./broker-a-s/store:/home/rocketmq/store
    environment:
      JAVA_OPT_EXT: -Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128m
      NAMESRV_ADDR: mqnamesrv:9876
    command: sh mqbroker -c /etc/rocketmq/broker.conf
    depends_on:
      - mqnamesrv
  mqconsole:
    image: styletang/rocketmq-console-ng
    container_name: mqconsole
    ports:
      - 8880:8080
    environment:
      JAVA_OPTS: -Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=falses
    depends_on:
      - mqnamesrv

启动A集群

docker compose up -d

在B集群创建目录和文件

#创建目录
mkdir -p /opt/data/rocketmq && cd /opt/data/rocketmq/
mkdir -p broker-b-m/{conf,logs,store}
mkdir -p broker-b-s/{conf,logs,store}
#创建主节点和从节点配置文件
vim broker-b-m/conf/broker.conf
vim broker-b-s/conf/broker.conf

主节点配置文件

#集群名称
brokerClusterName=DefaultCluster
#broker名称
brokerName=broker-b
#brokerId master用0 slave用其他
brokerId=0
#清理时机
deleteWhen=4
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SYNC_MASTER
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#主机ip
brokerIP1=192.168.0.206
brokerIP2=192.168.0.206
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
#是否能够自动创建topic
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

从节点文件

#集群名称
brokerClusterName=DefaultCluster
#broker名称
brokerName=broker-b
#brokerId master用0 slave用其他
brokerId=1
#清理时机
deleteWhen=4
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#主机ip
brokerIP1=192.168.0.206
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=11911
#是否能够自动创建topic
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

创建docker-compose.yml文件

version: "3"
services:
  mqbroker-a-m:
    image: foxiswho/rocketmq:4.8.0
    container_name: mqbroker1-m-1
    ports:
      - 10911:10911
      - 10909:10909
      - 10912:10912
    volumes:
      - ./broker-b-m/conf/broker.conf:/etc/rocketmq/broker.conf
      - ./broker-b-m/logs:/home/rocketmq/logs
      - ./broker-b-m/store:/home/rocketmq/store
    environment:
      JAVA_OPT_EXT: -Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128m
      NAMESRV_ADDR: 192.168.0.242:9876 #填写nameserver地址
    command: sh mqbroker -c /etc/rocketmq/broker.conf
    depends_on:
      - mqnamesrv
  mqbroker-a-s:
    image: foxiswho/rocketmq:4.8.0
    container_name: mqbroker1-s-1
    ports:
      - 11911:11911
      - 11909:11909
      - 11912:11912
    volumes:
      - ./broker-b-s/conf/broker.conf:/etc/rocketmq/broker.conf
      - ./broker-b-s/logs:/home/rocketmq/logs
      - ./broker-b-s/store:/home/rocketmq/store
    environment:
      JAVA_OPT_EXT: -Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128m
      NAMESRV_ADDR: 192.168.0.242:9876 #填写nameserver地址
    command: sh mqbroker -c /etc/rocketmq/broker.conf

启动B集群

docker compose up -d

访问192.168.0.242:8880就可以看到集群状态了

二、源码方式部署

下载并解压源码文件

#我这里下载的是4.9.3版本的包,可以根据需求更改版本
wget <https://dlcdn.apache.org/rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip>
#解压源码包,提示没有unzip命令的话可以先 yum -y install unzip 进行安装
unzip rocketmq-all-4.9.3-bin-release.zip
#将目录放到/usr/local下(个人习惯,可以不放在这里)
mv rocketmq-4.9.3/ /usr/local/rocketmq

修改配置文件并启动

#进入程序配置文件目录
cd /usr/local/rocketmq/bin
#修改NameServer启动参数
vim runserver.sh

默认启动内存大小为4G,我这里修改为512m

#修改Broker的默认启动参数
vim runbroker.sh

Broker默认的启动内存大小为8G,我这里修改为256m

启动RocketMQ

先启动NameServer

#先进入rocketmq的bin目录
cd /usr/local/rocketmq/bin
#启动****NameServer****
nohup sh mqnamesrv &
#启动完成后查看输出信息,是否启动成功
tail -f nohup.out

看到boot success表示启动成功,然后我们启动Broker

#启动Broker
nohup sh mqbroker -n localhost:9876 &
#查看启动信息
tail -f ~/logs/rocketmqlogs/broker.log

看到broker boot success表示启动成功,到此rocketMQ就已经启动完成了,使用jps就可以看到2个服务都已经启动

但是现在我们管理起来不是很方便,所以我们接下来安装rocketMQ的管理控制台

安装RocketMQ控制台

下载构建文件

#网上搜到的教程好多都叫rocketmq-console,但是我去官网发现改名了
wget <https://github.com/apache/rocketmq-dashboard/archive/refs/tags/rocketmq-dashboard-1.0.0.zip>
#解压文件
unzip rocketmq-dashboard-1.0.0.zip
#解压后的文件名太长,重命名一下(可以不做)
mv rocketmq-dashboard-rocketmq-dashboard-1.0.0 rocketmqds
#修改配置文件
cd rocketmqds/src/main/resources/
vim application.properties

主要修改2个位置

修改完成以后回到安装目录进行maven构建(需要提前安装好maven和java,并且配置好阿里云加速,不然有些慢)

#因为我是下载到opt目录下了,所以回到opt,根据你到下载目录进行切换	
cd /opt/rocketmqds
#构建
mvn clean package -Dmaven.test.skip=true
#构建完成后复制jar包出来到opt
mv target/rocketmq-dashboard-1.0.0.jar /opt/
#回到opt目录启动管理控制台程序
nohup java -jar rocketmq-dashboard-1.0.0.jar &
#查看输出信息
tail -f nohup.out

到此RocketMQ就已经安装完成了

其他

因为上面提到了构建管理控制台程序时候需要maven和java环境,再备注一下配置java和maven环境的方法,我的源码包都是已经下载好的,这里就直接配置了,源码包可以去搜一下,很多的

#解压java源码包
tar zxvf jdk1.8.0_321.tar.gz -C /opt/
#解压maven源码包
tar zxvf maven.tar.gz -C /usr/local/
#修改系统配置文件
vim /etc/profile
#增加以下内容
export MAVEN_HOME=/usr/local/maven
export JAVA_HOME=/opt/jdk1.8.0_321
export CLASSPATH=.:/opt/jdk1.8.0_321/lib.tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
#接着重载一下
source /etc/profile
#尝试查看maven和java版本

没有输出异常的话环境就已经配置完成了