RocketMQ  双主双从  docker安装在两台虚拟机上

本文详细介绍了如何在两台虚拟机上使用Docker部署Apache RocketMQ的双主双从集群。首先确保Docker已安装,然后拉取镜像,接着编写配置文件,包括主备Broker的配置以及docker-compose.yml文件。通过docker-compose启动服务,创建必要的目录并挂载到容器中。最终,成功实现了RocketMQ的高可用部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考了官网([http://rocketmq.apache.org/docs/quick-start/](http://rocketmq.apache.org/docs/quick-start/)给的配置:在下载好的目录下:rocketmq-all-4.8.0-bin-release\conf\2m-2s-sync 有具体的配置。
好了下面讲讲我是怎么在docker上安装好双主双从在两台虚拟机上的,

1:默认条件docker已经安装好了

我的docker版本Docker version 18.09.0, build 4d60db4

2:利用dokcer拉去镜像 

docker pull foxiswho/rocketmq:4.8.0

3:编写配置文件:

虚拟机一配置文件 

  • broker-m-1.conf
#集群名称
brokerClusterName=DefaultCluster
#broker名称
brokerName=broker-1
#brokerId master用0 slave用其他
brokerId=0
#清理时机
deleteWhen=4
#文件保留时长 72小时
fileReservedTime=72
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SYNC_MASTER
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#主机ip
brokerIP1=192.168.101.21
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10909
#namesvr
namesrvAddr=192.168.101.21:19876;192.168.101.22:19876
#是否能够自动创建topic
autoCreateTopicEnable=true
  • broker-s-1.conf
#集群名称
brokerClusterName=DefaultCluster
#broker名称
brokerName=broker-1
#brokerId master用0 slave用其他
brokerId=1
#清理时机
deleteWhen=4
#文件保留时长 72小时
fileReservedTime=72
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#主机ip
brokerIP1=192.168.101.21
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10910
#namesrv
namesrvAddr=192.168.101.21:19876;192.168.101.22:19876
#是否能够自动创建topic
autoCreateTopicEnable=true
  • docker-compose.yml  
version: '3.5'
services:
  namesrv1:
    image: foxiswho/rocketmq:4.8.0
    container_name: namesrv1
    ports:
      - 19876:9876
    volumes:
      - /rocketMq/namesrv1/log:/opt/logs
      - /rocketMq/namesrv1/data:/opt/store
    command: sh mqnamesrv
    networks:
      rocketmq:
        aliases:
          - namesrv1
  broker-m-1:
    image: foxiswho/rocketmq:4.8.0
    container_name: broker-m-1
    links:
      - namesrv1:namesrv1
    ports:
      - 10909:10909
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "namesrv1:19876"
      JAVA_OPTS: "-Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    volumes:
      - /rocketMq/broker-m-1/log:/opt/logs
      - /rocketMq/broker-m-1/data:/opt/store
      - /rocketMq/broker-m-1/conf/broker-m-1.conf:/opt/rocketmq-4.8.0/conf/broker-m-1.conf
    command: sh mqbroker -c /opt/rocketmq-4.8.0/conf/broker-m-1.conf autoCreateTopicEnable=true &
    networks:
      rocketmq:
        aliases:
          - broker-m-1
  broker-s-1:
    image: foxiswho/rocketmq:4.8.0
    container_name: broker-s-1
    links:
      - namesrv1:namesrv1
    ports:
      - 11909:10909
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "namesrv1:19876"
      JAVA_OPTS: "-Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    volumes:
      - /rocketMq/broker-s-1/log:/opt/logs
      - /rocketMq/broker-s-1/data:/opt/store
      - /rocketMq/broker-s-1/conf/broker-s-1.conf:/opt/rocketmq-4.8.0/conf/broker-s-1.conf
    command: sh mqbroker -c /opt/rocketmq-4.8.0/conf/broker-s-1.conf autoCreateTopicEnable=true &
    networks:
      rocketmq:
        aliases:
          - broker-s-1
networks:
  rocketmq:
    name: rocketmq
    driver: bridge

虚拟机二配置文件

  •  broker-m-1.conf
#集群名称
brokerClusterName=DefaultCluster
#broker名称
brokerName=broker-2
#brokerId master用0 slave用其他
brokerId=0
#清理时机
deleteWhen=4
#文件保留时长 72小时
fileReservedTime=72
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SYNC_MASTER
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#主机ip
brokerIP1=192.168.101.22
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10909
#namesvr
namesrvAddr=192.168.101.21:19876;192.168.101.22:19876
#是否能够自动创建topic
autoCreateTopicEnable=true
  • broker-s-1.conf
#集群名称
brokerClusterName=DefaultCluster
#broker名称
brokerName=broker-2
#brokerId master用0 slave用其他
brokerId=1
#清理时机
deleteWhen=4
#文件保留时长 72小时
fileReservedTime=72
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#主机ip
brokerIP1=192.168.101.22
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10910
#namesrv
namesrvAddr=192.168.101.21:19876;192.168.101.22:19876
#是否能够自动创建topic
autoCreateTopicEnable=true
  • docker-compose.yml
version: '3.5'
services:
  namesrv1:
    image: foxiswho/rocketmq:4.8.0
    container_name: namesrv1
    ports:
      - 19876:9876
    volumes:
      - /rocketMq/namesrv1/log:/opt/logs
      - /rocketMq/namesrv1/data:/opt/store
    command: sh mqnamesrv
    networks:
      rocketmq:
        aliases:
          - namesrv1
  broker-m-1:
    image: foxiswho/rocketmq:4.8.0
    container_name: broker-m-1
    links:
      - namesrv1:namesrv1
    ports:
      - 10909:10909
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "namesrv1:19876"
      JAVA_OPTS: "-Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    volumes:
      - /rocketMq/broker-m-1/log:/opt/logs
      - /rocketMq/broker-m-1/data:/opt/store
      - /rocketMq/broker-m-1/conf/broker-m-1.conf:/opt/rocketmq-4.8.0/conf/broker-m-1.conf
    command: sh mqbroker -c /opt/rocketmq-4.8.0/conf/broker-m-1.conf autoCreateTopicEnable=true &
    networks:
      rocketmq:
        aliases:
          - broker-m-1
  broker-s-1:
    image: foxiswho/rocketmq:4.8.0
    container_name: broker-s-1
    links:
      - namesrv1:namesrv1
    ports:
      - 11909:10909
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "namesrv1:19876"
      JAVA_OPTS: "-Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    volumes:
      - /rocketMq/broker-s-1/log:/opt/logs
      - /rocketMq/broker-s-1/data:/opt/store
      - /rocketMq/broker-s-1/conf/broker-s-1.conf:/opt/rocketmq-4.8.0/conf/broker-s-1.conf
    command: sh mqbroker -c /opt/rocketmq-4.8.0/conf/broker-s-1.conf autoCreateTopicEnable=true &
    networks:
      rocketmq:
        aliases:
          - broker-s-1
networks:
  rocketmq:
    name: rocketmq
    driver: bridge

ps:因为nameserver 没有使用配置文件,所以docker容器里面的端口使用需要注意(19876:9876),前面的映射端口只要不重复就好,后面的使用默认9876端口。

执行命令建立目录

mkdir -p /rocketMq/namesrv1/log &&
mkdir -p /rocketMq/namesrv1/data &&
mkdir -p /rocketMq/broker-m-1/log &&
mkdir -p /rocketMq/broker-m-1/data &&
mkdir -p  /rocketMq/broker-m-1/conf &&
mkdir -p  /rocketMq/broker-s-1/log &&
mkdir -p /rocketMq/broker-s-1/data &&
mkdir -p  /rocketMq/broker-s-1/conf 

将配置文件放到对应的目录下面

前提安装好docker-compose(https://docs.docker.com/compose/install/

ps:安装docker-compose命令

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

执行命令:

docker-compose -f docker-compose.yml up -d

至此dokcer 安装rocketmq 结束

 

### 安装和配置 RocketMQ 双主双从集群 #### 准备工作 为了在 Docker安装并配置 RocketMQ双主双从集群,需先准备好必要的环境。确保已安装 DockerDocker Compose 工具。 #### 配置文件准备 创建一个目录用于保存所有的配置文件和服务定义: ```bash mkdir rocketmq-docker-cluster && cd $_ ``` 在此目录下创建 `docker-compose.yml` 文件来描述服务架构[^1]。 #### 编写 docker-compose.yml 编写如下所示的 `docker-compose.yml` 文件以启动四个 NameServer 实例以及两个 Master Broker 和两个 Slave Broker 实例组成的高可用集群: ```yaml version: '3' services: namesrv1: image: apache/rocketmq:latest container_name: rmq-namesrv1 environment: - JAVA_OPTS=-server -Xms512m -Xmx512m -XX:+UseG1GC command: sh mqnamesrv ports: - "9876:9876" namesrv2: image: apache/rocketmq:latest container_name: rmq-namesrv2 environment: - JAVA_OPTS=-server -Xms512m -Xmx512m -XX:+UseG1GC command: sh mqnamesrv ports: - "9877:9876" broker-a-master: image: apache/rocketmq:latest container_name: rmq-broker-a-master depends_on: - namesrv1 - namesrv2 environment: - JAVA_OPTS=-server -Xms512m -Xmx512m -XX:+UseG1GC - NAMESRV_ADDR=rmq-namesrv1:9876;rmq-namesrv2:9876 volumes: - ./broker-a-master:/home/rocketmq/store command: sh mqbroker -n rmq-namesrv1:9876;rmq-namesrv2:9876 -c /opt/software/apache-rocketmq/conf/broker-a.properties broker-a-slave: image: apache/rocketmq:latest container_name: rmq-broker-a-slave depends_on: - namesrv1 - namesrv2 - broker-a-master environment: - JAVA_OPTS=-server -Xms512m -Xmx512m -XX:+UseG1GC - NAMESRV_ADDR=rmq-namesrv1:9876;rmq-namesrv2:9876 volumes: - ./broker-a-slave:/home/rocketmq/store command: sh mqbroker -n rmq-namesrv1:9876;rmq-namesrv2:9876 -c /opt/software/apache-rocketmq/conf/broker-a-s properties broker-b-master: image: apache/rocketmq:latest container_name: rmq-broker-b-master depends_on: - namesrv1 - namesrv2 environment: - JAVA_OPTS=-server -Xms512m -Xmx512m -XX:+UseG1GC - NAMESRV_ADDR=rmq-namesrv1:9876;rmq-namesrv2:9876 volumes: - ./broker-b-master:/home/rocketmq/store command: sh mqbroker -n rmq-namesrv1:9876;rmq-namesrv2:9876 -c /opt/software/apache-rocketmq/conf/broker-b.properties broker-b-slave: image: apache/rocketmq:latest container_name: rmq-broker-b-slave depends_on: - namesrv1 - namesrv2 - broker-b-master environment: - JAVA_OPTS=-server -Xms512m -Xmx512m -XX:+UseG1GC - NAMESRV_ADDR=rmq-namesrv1:9876;rmq-namesrv2:9876 volumes: - ./broker-b-slave:/home/rocketmq/store command: sh mqbroker -n rmq-namesrv1:9876;rmq-namesrv2:9876 -c /opt/software/apache-rocketmq/conf/broker-b-s.properties ``` 注意上述命令中的 `-c` 参数指定了不同的配置文件路径,这些配置文件应预先放置于容器内的 `/opt/software/apache-rocketmq/conf/` 路径下,并设置好相应的参数以便区分各个节点的角色(Master 或者 Slave),同时指定同步模式和其他必要选项。 #### 启动集群 完成以上步骤之后,在包含 `docker-compose.yml` 文件的同一目录执行下面这条指令即可一键部署整个 RocketMQ HA 集群: ```bash docker-compose up -d ``` 这将会以后台守护进程的方式运行所有组件实例,并自动连接形成一个完整的消息队列网络结构。 #### 测试集群功能 通过向任意一台Broker发送测试消息验证集群是否正常运作;可以利用官方提供的工具如 `tools.sh org.apache.rocketmq.example.quickstart.Producer` 来实现这一点。同样地,也可以尝试消费端逻辑确认数据能够被正确接收处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值