=前言=
javascript
一、由于本身只买了一台阿里云服务器,因此RocketMQ集群都部署在单台服务器上只是端口不一样,若是实际开发,能够分别部署在多台服务器上。 二、这里有关 Broker 和 NameServer 分别都作了了集群部署(各部署两个),且BroKer是按两主进行部署。
之因此选用Docker部署主要仍是考虑 :经过Docker部署RocketMQ集群更快速,并且对系统的资源利用更好!
html
以前有写过Liunx如何部署Docker的博客:【Docker】(3)---linux部署Docker、Docker经常使用命令java
以前有关RocketMQ概念作了介绍的博客:RocketMQ(1)-架构原理linux
下面先写好所需配置文件,在运行配置文件,最终看运行结果!
git
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/
broker.conf是Broker的配置文件
,由于此时RocketMQ镜像尚未拉取,因此尚未默认的broker.conf。因此这里直接写好,到时候经过命令替换默认的broker.conf。github
由于是双主模式部署,因此会有两个broker.conf,这里暂且命名 broker-a.conf 和 broker-b.confsql
1) broker-a.confdocker
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
这里配置的主要信息有:apache
一、当前Broker对外暴露的端口号
二、注册到NameServer的地址,看到这里有两个地址,说明NameServer也是集群部署。
三、当前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对外暴露的端口不同。
咱们能够简单把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
从配置文件能够大体看出几点:
一、经过Docker总共拉取了5条镜像记录。rmqnamesrv-a
、rmqnamesrv-b
、rmqbroker-a
、rmqbroker-b
、rmqconsole
。
二、rmqconsole是一个可视化的工具
,能够经过页面来查看RocketMQ相关信息。
三、能够看出对于broker的配置文件broker.conf已经被broker-a/b.conf替换。
上面仅仅是把配置文件写好,但启动RocketMQ还有不少前提条件
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
有关的介绍能够看官方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
前面全部的操做,都是为这一步的铺垫,经过docker-compose执行docker-compose.yml
配置文件
docker-compose -f docker-compose.yml up -d
若是你看到,那说明你大功告成!
查看可视化界面
完美!
注意
这里面涉及相关端口记获得阿里云后台开启!
说明
由于我这边是单机部署集群,我发现集群部署NameServer没有问题,集群部署Broker的会由于端口的问题只能使用一台。
三、docker部署RocketMQ集群(很是感谢)
只要本身变优秀了,其余的事情才会跟着好起来(中将9)