docker-compose部署rocketmq集群

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker-compose部署rocketmq集群相关的知识,希望对你有一定的参考价值。

参考技术A 测试环境需要一个2m2s的rockermq进行业务测试,此方式推荐使用在测试环境中使用,不推荐生产。

///////////////////////////////////如果没起来再看看下面的能不能帮到你/////////////////////////////////

如果你的微服务没有放入docker或者rocketmq容器中,不能用IP直接访问。 请修改broker-a.conf、broker-b.conf、broker-a-s.conf、broker-b-s.conf
的brokerIP为宿主机IP,并去掉#。

否则会报如下错误: com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <172.0.0.120:10909> failed

https://www.cnblogs.com/stcweb/articles/15116551.html
docker-compose命令请在docker-compose.yml文件同目录下

集群启动后,集群各节点不能互相通信,需要设置linux内核转发
https://blog.csdn.net/qq_16605855/article/details/79476615
默认情况下,从容器发送到默认网桥的流量,并不会被转发到外部。要开启转发,需要改变两个设置。这些不是 Docker 命令,并且它们会影响 Docker 主机的内核。

这些设置在重新启动时失效,因此可能需要将它们添加到启动脚本中。

节点 宿主机端口:容器内端口
rmqnamesrv-a 9876:9876
rmqnamesrv-b 9877:9876
rmqbroker-a 10911:10911
rmqbroker-a-s 10912:10911
rmqbroker-b 10913:10911
rmqbroker-b-s 10914:10911
rmqconsole 6080:8080

rmqconsole: http://宿主机IP:6080

docker-compose安装RocketMQ集群

docker-compose安装RocketMQ集群

知识索引

  • RocketMQ集群说明
  • 基于docker-compose安装namesrv、rocketmq-console、broker
  • rocketmq-console演示

1 集群说明

我们安装RocketMQ集群,这里为了演示效果,就安装2Master结构,为了不受单机影响,先停掉单机版,再安装集群版。

停止单机版命令:

docker stop rmqadmin rmqbroker rmqnamesrv

安装集群版,需要为每个broker创建存储配置文件、日志、数据的目录,我们创建目录如下:

mkdir -p \\
/usr/local/server/rocketmq_cluster/data_namesrv/namesrv/logs \\
/usr/local/server/rocketmq_cluster/data_namesrv/namesrv/store \\
/usr/local/server/rocketmq_cluster/data1/broker/logs \\
/usr/local/server/rocketmq_cluster/data1/broker/store \\
/usr/local/server/rocketmq_cluster/conf1 \\
/usr/local/server/rocketmq_cluster/data2/broker/logs \\
/usr/local/server/rocketmq_cluster/data2/broker/store \\
/usr/local/server/rocketmq_cluster/conf2

2 集群配置

集群结构为2Master,需要为每个节点配置一个broker.conf配置文件。

/usr/local/server/rocketmq_cluster/conf1创建broker.conf配置文件:

# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = ItmentuCluster
#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

/usr/local/server/rocketmq_cluster/conf2创建broker.conf配置文件:

# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = ItmentuCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-b
#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

3 RocketMQ集群搭建

集群安装我们采用docker-compose方式安装,所以首先要确认你的系统已经安装了docker-compose

关于docker-compose的安装,大家可以参考http://edu.secby.cn/node/view/1472115371169964034#a6124af3b6bcd5072900214f860651c0,这里不做演示了。

使用docker-compose就可以避免一个一个组件单独安装,可以一次性把namesrvbrokerrocketmq-console一次完成安装,只不过需要写docker-compose脚本。

创建rocketmq.yml,配置文件如下:

version: '3.8'
services:
  #Service for nameserver
  namesrv:
    image: rocketmqinc/rocketmq:4.4.0
    container_name: cluster_rmqnamesrv
    ports:
      - 9876:9876
    volumes:
      - /usr/local/server/rocketmq_cluster/data_namesrv/namesrv/logs:/root/logs
      - /usr/local/server/rocketmq/data_namesrv/namesrv/store:/root/store
    command: sh mqnamesrv

  #Service for another broker -- broker1
  broker1:
    image: rocketmqinc/rocketmq:4.4.0
    container_name: cluster_rmqbroker1
    links:
      - namesrv
    ports:
      - 10909:10909
      - 10911:10911
      - 10912:10912
    environment:
      - NAMESRV_ADDR=namesrv:9876
    volumes:
      - /usr/local/server/rocketmq_cluster/data1/broker/logs:/root/logs
      - /usr/local/server/rocketmq_cluster/data1/broker/store:/root/store
      - /usr/local/server/rocketmq_cluster/conf1/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
    command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
  #Service for another broker -- broker2
  broker2:
    image: rocketmqinc/rocketmq:4.4.0
    container_name: cluster_rmqbroker2
    links:
      - namesrv
    ports:
      - 10929:10909
      - 10931:10911
      - 10932:10912
    environment:
      - NAMESRV_ADDR=namesrv:9876
    volumes:
      - /usr/local/server/rocketmq_cluster/data2/broker/logs:/root/logs
      - /usr/local/server/rocketmq_cluster/data2/broker/store:/root/store
      - /usr/local/server/rocketmq_cluster/conf2/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
    command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

  rmqconsole:
    image: pangliang/rocketmq-console-ng
    container_name: rmqconsole
    ports:
      - 7001:7001
    environment:
      JAVA_OPTS: "-Drocketmq.namesrv.addr=192.168.211.130:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Dserver.port=7001"

然后执行docker-compose -f rocketmq.yml up -d就可以安装RocketMQ集群了,安装效果如下:

4 控制台安装

rocketmq-console安装其实在上面我们已经完成了,安装配置如下:

因为在安装broker集群已经安装了rocketmq-console,所有我们这里不需要再安装了,直接访问http://192.168.211.130:7001即可,效果如下:

我们可以看到已经实现了2台服务集群。

以上是关于docker-compose部署rocketmq集群的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose安装RocketMQ集群

Docker环境下使用docker-compose一键式搭建RocketMQ(4.5.0版本)集群及其管理工具(外网版)

Docker环境下使用docker-compose一键式搭建RocketMQ(4.5.0版本)集群及其管理工具

RocketMQ问题集

rocketmq总结以及自动化部署策略

安装部署RocketMQ集群(双主双从)