RocketMQ(2)---Docker部署RocketMQ集群
RocketMQ(2)—Docker集群部署RocketMQ
=前言=
1、因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服务器上。 2、这里有关 Broker 和 NameServer 分别都做了了集群部署(各部署两个),且BroKer是按两主进行部署。
之所以选用Docker部署主要还是考虑 :通过Docker部署RocketMQ集群更快速,而且对系统的资源利用更好!
之前有写过Liunx如何部署Docker的博客:【Docker】(3)---linux部署Docker、Docker常用命令
之前有关RocketMQ概念做了介绍的博客:RocketMQ(1)-架构原理
下面先写好所需配置文件,在运行配置文件,最终看运行结果!
一、写配置文件
1、创建所需文件夹
mkdir -p /opt/rocketmq/logs/nameserver-a mkdir -p /opt/rocketmq/logs/nameserver-b mkdir -p /opt/rocketmq/store/nameserver-a mkdir -p /opt/rocketmq/store/nameserver-b mkdir -p /opt/rocketmq/logs/broker-a mkdir -p /opt/rocketmq/logs/broker-b mkdir -p /opt/rocketmq/store/broker-a mkdir -p /opt/rocketmq/store/broker-b mkdir -p /home/rocketmq/broker-a/ mkdir -p /home/rocketmq/broker-b/
2、创建broker.conf
broker.conf是Broker的配置文件
,因为此时RocketMQ镜像还没有拉取,所以还没有默认的broker.conf。所以这里直接写好,到时候通过命令替换默认的broker.conf。
因为是双主模式部署,所以会有两个broker.conf,这里暂且命名 broker-a.conf 和 broker-b.conf
1) broker-a.conf
brokerClusterName = rocketmq-cluster brokerName = broker-a brokerId = 0 #这个很有讲究 如果是正式环境 这里一定要填写内网地址(安全) #如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网。 brokerIP1 = xxxxx deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH # 内网的(阿里云有内网IP和外网IP) namesrvAddr=172.18.0.5:9876;172.18.0.5:9877 autoCreateTopicEnable=true #Broker 对外服务的监听端口, listenPort = 10911 #Broker角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole=ASYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH
这里配置的主要信息有:
1、当前Broker对外暴露的端口号
2、注册到NameServer的地址,看到这里有两个地址,说明NameServer也是集群部署。
3、当前Broker的角色,是主还是从,这里表示是主。
2)broker-b.conf
brokerClusterName = rocketmq-cluster brokerName = broker-b brokerId = 0 brokerIP1 = xxxxx deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH # 内网的(阿里云有内网IP和外网IP) namesrvAddr=172.18.0.5:9876;172.18.0.5:9877 autoCreateTopicEnable=true #Broker 对外服务的监听端口, listenPort = 10909 #Broker角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole=ASYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH
这个上面并无差别,只是当前Brocker对外暴露的端口不一样。
3、编写 docker-compose.yml
我们可以简单把docker-compose.yml理解成一个类似Shell的脚本,这个脚本定义了运行多容器应用程序的信息。
version: '3.5' services: rmqnamesrv-a: image: rocketmqinc/rocketmq:4.3.0 container_name: rmqnamesrv-a ports: - 9876:9876 volumes: - /opt/rocketmq/logs/nameserver-a:/opt/logs - /opt/rocketmq/store/nameserver-a:/opt/store command: sh mqnamesrv networks: rmq: aliases: - rmqnamesrv-a rmqnamesrv-b: image: rocketmqinc/rocketmq:4.3.0 container_name: rmqnamesrv-b ports: - 9877:9877 volumes: - /opt/rocketmq/logs/nameserver-b:/opt/logs - /opt/rocketmq/store/nameserver-b:/opt/store command: sh mqnamesrv networks: rmq: aliases: - rmqnamesrv-b rmqbroker-a: image: rocketmqinc/rocketmq:4.3.0 container_name: rmqbroker-a ports: - 10911:10911 volumes: - /opt/rocketmq/logs/broker-a:/opt/logs - /opt/rocketmq/store/broker-a:/opt/store - /home/rocketmq/broker-a/broker-a.conf:/opt/rocketmq-4.3.0/conf/broker.conf environment: TZ: Asia/Shanghai NAMESRV_ADDR: "rmqnamesrv-a:9876" JAVA_OPTS: " -Duser.home=/opt" JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m" command: sh mqbroker -c /opt/rocketmq-4.3.0/conf/broker.conf autoCreateTopicEnable=true & links: - rmqnamesrv-a:rmqnamesrv-a - rmqnamesrv-b:rmqnamesrv-b networks: rmq: aliases: - rmqbroker-a rmqbroker-b: image: rocketmqinc/rocketmq:4.3.0 container_name: rmqbroker-b ports: - 10909:10909 volumes: - /opt/rocketmq/logs/broker-b:/opt/logs - /opt/rocketmq/store/broker-b:/opt/store - /home/rocketmq/broker-b/broker-b.conf:/opt/rocketmq-4.3.0/conf/broker.conf environment: TZ: Asia/Shanghai NAMESRV_ADDR: "rmqnamesrv-b:9876" JAVA_OPTS: " -Duser.home=/opt" JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m" command: sh mqbroker -c /opt/rocketmq-4.3.0/conf/broker.conf autoCreateTopicEnable=true & links: - rmqnamesrv-a:rmqnamesrv-a - rmqnamesrv-b:rmqnamesrv-b networks: rmq: aliases: - rmqbroker-b rmqconsole: image: styletang/rocketmq-console-ng container_name: rmqconsole ports: - 9001:9001 environment: JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false networks: rmq: aliases: - rmqconsole networks: rmq: name: rmq driver: bridge
从配置文件可以大致看出几点:
1、通过Docker总共拉取了5条镜像记录。rmqnamesrv-a
、rmqnamesrv-b
、rmqbroker-a
、rmqbroker-b
、rmqconsole
。
2、rmqconsole是一个可视化的工具
,可以通过页面来查看RocketMQ相关信息。
3、可以看出对于broker的配置文件broker.conf已经被broker-a/b.conf替换。
二、环境部署
上面仅仅是把配置文件写好,但启动RocketMQ还有很多前提条件
1、所需环境
1. 建议使用64位操作系统,Linux / Unix / Mac; 2. 64位JDK 1.8+; 3. Maven 3.2.x; 4. Git的; 5. 4g +免费磁盘用于Broker服务器
同时需要运行docker-compose.yml还需要安装docker-compose
2、安装docker-compose
有关的介绍可以看官方GitHub : https://github.com/docker/compose
安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
查看是否安装成功
[root@izbp13196wp34obmnd4avdz ~]# docker-compose --version docker-compose version 1.24.1, build 4667896b
3、关键一步
前面所有的操作,都是为这一步的铺垫,通过docker-compose执行docker-compose.yml
配置文件
docker-compose -f docker-compose.yml up -d
如果你看到,那说明你大功告成!
查看可视化界面
完美!
注意
这里面涉及相关端口记得到阿里云后台开启!
说明
因为我这边是单机部署集群,我发现集群部署NameServer没有问题,集群部署Broker的会因为端口的问题只能使用一台。
参考
3、docker部署RocketMQ集群(非常感谢)
只要自己变优秀了,其他的事情才会跟着好起来(中将9)
- RocketMQ(2)---Docker部署RocketMQ集群
- 【部署】【四】RocketMQ 双节点主从(n2m2s2) Docker 部署
- (三)RocketMQ集群部署实践
- 基于Docker构建RocketMQ4.4.0集群,以及RocketMQ的一些基本使用
- rocketmq集群安装部署过程(4.0.0版本)、安装中的常见问题举例
- MyRocketMQ集群部署实战-双master-双slave-同步双写-异步刷盘(7台机器)
- rocketmq集群部署(多master多slave异步)
- rocketmq集群部署实战-双master-双slave-同步双写-异步刷盘(7台机器)
- 【部署】【二】制作 RocketMQ Console 控制台 Docker 镜像
- (三)RocketMQ集群部署实践
- docker-compose 部署hadoop集群
- 使用Docker部署MySQL 5.7&8.0主从集群的方法步骤
- 如何使用Docker Machine部署Swarm集群
- 7条命令在docker中部署Mesos集群
- 使用Docker构建持续集成与自动部署的Docker集群
- Docker(十三):OpenStack部署Docker集群
- 自己学Docker:15.Docker使用实战--zookeeper集群部署
- RocketMQ集群配置 / localtransactionexecuter
- Linux Centos7 环境搭建Docker部署Zookeeper分布式集群服务实战
- 多台宿主机使用docker部署redis集群