RocketMQ(2)---Docker部署RocketMQ集群
<h1 id="rocketmq2docker集群部署rocketmq-"><center>RocketMQ(2)—Docker集群部署RocketMQ </center></h1><p><code>=前言=</code></p>
<pre><code class="language-sql">1、因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服务器上。
2、这里有关 Broker 和 NameServer 分别都做了了集群部署(各部署两个),且BroKer是按两主进行部署。
</code></pre>
<p>之所以选用Docker部署主要还是考虑 :<code>通过Docker部署RocketMQ集群更快速,而且对系统的资源利用更好!</code></p>
<p>之前有写过Liunx如何部署Docker的博客:【Docker】(3)---linux部署Docker、Docker常用命令</p>
<p>之前有关RocketMQ概念做了介绍的博客:RocketMQ(1)-架构原理</p>
<p>下面先写好所需配置文件,在运行配置文件,最终看运行结果!<br>
<br></p>
<h2 id="一写配置文件-"><font color="#FFD700">一、写配置文件 </font></h2>
<h4 id="1创建所需文件夹">1、创建所需文件夹</h4>
<pre><code>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/
</code></pre>
<h4 id="2创建brokerconf">2、创建broker.conf</h4>
<p><code>broker.conf是Broker的配置文件</code>,因为此时RocketMQ镜像还没有拉取,所以还没有默认的broker.conf。所以这里直接写好,到时候通过命令替换默认的broker.conf。</p>
<p>因为是双主模式部署,所以会有两个broker.conf,这里暂且命名<strong>broker-a.conf</strong>和 <strong>broker-b.conf</strong></p>
<p><strong>1) broker-a.conf</strong></p>
<pre><code class="language-php">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
</code></pre>
<p>这里配置的主要信息有:</p>
<p><strong>1、当前Broker对外暴露的端口号</strong><br>
<strong>2、注册到NameServer的地址,看到这里有两个地址,说明NameServer也是集群部署。</strong><br>
<strong>3、当前Broker的角色,是主还是从,这里表示是主。</strong></p>
<p><strong>2)broker-b.conf</strong></p>
<pre><code class="language-php">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
</code></pre>
<p>这个上面并无差别,只是当前Brocker对外暴露的端口不一样。</p>
<h4 id="3编写-docker-composeyml">3、编写 docker-compose.yml</h4>
<p>我们可以简单把docker-compose.yml理解成一个类似Shell的脚本,这个脚本定义了运行多容器应用程序的信息。</p>
<pre><code class="language-php">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
</code></pre>
<p>从配置文件可以大致看出几点:</p>
<p><strong>1、通过Docker总共拉取了5条镜像记录。<code>rmqnamesrv-a</code>、<code>rmqnamesrv-b</code>、<code>rmqbroker-a</code>、<code>rmqbroker-b</code>、<code>rmqconsole</code>。</strong><br>
<strong>2、<code>rmqconsole是一个可视化的工具</code>,可以通过页面来查看RocketMQ相关信息。</strong><br>
<strong>3、可以看出对于broker的配置文件broker.conf已经被broker-a/b.conf替换。</strong></p>
<br>
<h2 id="-二环境部署"><font color="#FFD700"> 二、环境部署</font></h2>
<p>上面仅仅是把配置文件写好,但启动RocketMQ还有很多前提条件</p>
<h4 id="1所需环境">1、所需环境</h4>
<pre><code>1. 建议使用64位操作系统,Linux / Unix / Mac;
2. 64位JDK 1.8+;
3. Maven 3.2.x;
4. Git的;
5. 4g +免费磁盘用于Broker服务器
</code></pre>
<p>同时需要运行docker-compose.yml还需要安装docker-compose</p>
<h4 id="2安装docker-compose">2、安装docker-compose</h4>
<p>有关的介绍可以看官方GitHub : https://github.com/docker/compose</p>
<p><strong>安装docker-compose</strong></p>
<pre><code class="language-javascript">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
</code></pre>
<p><strong>查看是否安装成功</strong></p>
<pre><code># docker-compose --version
docker-compose version 1.24.1, build 4667896b
</code></pre>
<h4 id="3关键一步">3、关键一步</h4>
<p>前面所有的操作,都是为这一步的铺垫,通过<code>docker-compose执行docker-compose.yml</code>配置文件</p>
<pre><code class="language-javascript">docker-compose -f docker-compose.yml up -d
</code></pre>
<p>如果你看到,那说明你大功告成!</p>
<p><img src="https://img2018.cnblogs.com/blog/1090617/201906/1090617-20190628101743236-1603071189.png" alt="" loading="lazy"></p>
<p><strong>查看可视化界面</strong></p>
<p><img src="https://img2018.cnblogs.com/blog/1090617/201906/1090617-20190627141208024-73962321.png" alt="" loading="lazy"></p>
<p>完美!</p>
<p><code>注意</code> 这里面涉及相关端口记得到阿里云后台开启!<br>
<code>说明</code> 因为我这边是单机部署集群,我发现集群部署NameServer没有问题,集群部署Broker的会因为端口的问题只能使用一台。</p>
<br>
<h3 id="-参考"><font color="#FFD700"> 参考</font></h3>
<p>1、Apache RocketMQ</p>
<p>2、docker-compose</p>
<p>3、docker部署RocketMQ集群(非常感谢)</p>
<p><img src="https://img2020.cnblogs.com/blog/1090617/202111/1090617-20211117135827845-311914362.gif" alt="" loading="lazy"></p>
<br>
<pre><code>只要自己变优秀了,其他的事情才会跟着好起来(中将9)
</code></pre><br><br>
来源:https://www.cnblogs.com/qdhxhz/p/11096682.html
頁:
[1]