RocketMQ集群部署
<h3>集群部署拓扑图</h3>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/fed079f4d9df0b3436720028340c96d4" alt="" />
<center>以下192.168.46.128简称128节点,192.168.46.129简称129节点</center></p>
<h4>安装docker,配置daemon.json文件</h4>
<pre><code class="language-shell">vim /etc/docker/daemon.json
{
&quot;data-root&quot;:&quot;/risen/soft/docker&quot;,
&quot;bip&quot;:&quot;192.168.88.1/24&quot;,
&quot;insecure-registries&quot;:[&quot;60.191.64.3:9963&quot;]
}</code></pre>
<h4>128节点拉取镜像并创建相关目录</h4>
<pre><code class="language-shell"># X86架构:
拉取rocketmq_namesrv
docker pull 60.191.64.3:9963/risen/rocketmq_namesrv_x86
拉取rocketmq_broker
docker pull 60.191.64.3:9963/risen/rocketmq_broker_x86
拉取rocketmq-console-ng
docker pull 60.191.64.3:9963/risen/rocketmq_console_ng_x86
# mips64架构:
拉取broker与namesrv,此镜像包含broker与namesrv,根据启动命令不同,启动不同的程序
docker pull 60.191.64.3:9963/risen/rocketmq_all_mips64
拉取控制台镜像
docker pull 60.191.64.3:9963/risen/rocketmq_console_mips64
# arm64架构:
拉取broker与namesrv,此镜像包含broker与namesrv,根据启动命令不同,启动不同的程序
docker pull 60.191.64.3:9963/risen/rocketmq_all_arm64
拉取控制台镜像
docker pull 60.191.64.3:9963/risen/rocketmq_console_arm64
# 创建目录
创建namesrv日志目录
mkdir -p /risen/soft/rocketmq/namesrv/logs
创建broker日志目录
mkdir -p /risen/soft/rocketmq/broker/logs
创建broker数据目录
mkdir -p /risen/soft/rocketmq/broker/store
给上述目录赋权
chmod 777 -R /risen/soft/rocketmq</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/7d02726c52d194599b9a0e10d316fa6f" alt="" /></p>
<h4>在129节点安装docker重复上一步操作</h4>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/64043e03041e901cc69d9fd7b1945e62" alt="" /></p>
<h4>运行rocketmq_namesrv容器</h4>
<pre><code class="language-shell"># X86架构
docker run -d -p 9876:9876 -v /risen/soft/rocketmq/namesrv/logs:/home/rocketmq/logs \
--name rmqnamesrv --restart=always -e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_namesrv_x86:latest sh mqnamesrv
# arm架构
docker run -d -p 9876:9876 \
-v /risen/soft/rocketmq/namesrv/logs:/root/logs \
--name rmqnamesrv \
--restart=always \
-e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_all_arm64:latest \
sh mqnamesrv</code></pre>
<h4>运行rocketmq_broker容器集群</h4>
<h5>运行192.168.46.128服务器的Broker(a)</h5>
<pre><code class="language-shell"># X86架构
docker run -d -p 10911:10911 -p 10909:10909 -p 10912:10912 --name rmqbroker-a --restart=always \
-v /risen/soft/rocketmq/broker/logs:/home/rocketmq/logs \
-v /risen/soft/rocketmq/broker/store:/home/rocketmq/store \
-e &quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.46.129:9876&quot; \
-e &quot;MAX_POSSIBLE_HEAP=200000000&quot; -e &quot;BROKER_ID=0&quot; -e &quot;BROKER_CLUSTER_NAME=Cluster&quot; \
-e &quot;BROKER_NAME=broker-a&quot; -e &quot;LISTEN_PORT=10911&quot; -e &quot;BROKERIP1=192.168.46.128&quot; \
-e other_conf=&quot;enablePropertyFilter=true,aclEnable=true,brokerRole=ASYNC_MASTER,slaveReadEnable=true&quot; \
-e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_broker_x86:latest sh ./brokerStart.sh
# arm架构
docker run -d -p 10911:10911 -p 10909:10909 -p 10912:10912 \
--name rmqbroker-a \
--restart=always \
-v /risen/soft/rocketmq/broker/logs:/root/logs -v /risen/soft/rocketmq/broker/store:/root/store \
-e &quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.5.29:9876&quot; \
-e &quot;MAX_POSSIBLE_HEAP=200000000&quot; \
-e &quot;BROKER_ID=0&quot; \
-e &quot;BROKER_CLUSTER_NAME=Cluster&quot; \
-e &quot;BROKER_NAME=broker-a&quot; \
-e &quot;LISTEN_PORT=10911&quot; \
-e &quot;BROKERIP1=192.168.46.128&quot; \
-e other_conf=&quot;enablePropertyFilter=true,aclEnable=true,brokerRole=ASYNC_MASTER,slaveReadEnable=true&quot; \
-e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_all_arm64:latest \
sh ./brokerStart.sh</code></pre>
<p><strong>参数解析:</strong>
-p 10911:10911 -p 10909:10909 -p 10912:10912 映射端口到宿主机修改宿主机端口,此处内外端口映射必须一致,否则namesrv连接不到broker,主端口为n时(例子中为:10911),其他两个端口为n+1(10912)和n-2(10909)
-v 映射目录到宿主机,该命令映射的是日志文件夹与数据文件夹
--name 给容器命名
-e "NAMESRV_ADDR=192.168.46.128:9876,192.168.46.129:9876" 此处配置namesrv的地址,ip(不可用127.0.0.1),多namesrv地址中间用逗号隔开
-e "BROKER_ID=0" 设置broker的id(0为主其他为从)
-e "BROKER_CLUSTER_NAME=Cluster" 设置所属集群名字
-e "BROKER_NAME=broker-a" 设置broker的name
-e "LISTEN_PORT=10911" 设置broker的主端口
-e "BROKERIP1=192.168.46.128" 设置broker的ip地址,即本机ip
-e other_conf="enablePropertyFilter=true" 设置其他配置,如有其他配置以逗号’,’相隔
例:-e other_conf="enablePropertyFilter=true,其他配置"
slaveReadEnable=true 设置堆积量已经超过物理内存 40%时,则建议从从服务器拉取消息,否则还是从主服务器拉取消息
brokerRole=ASYNC_MASTER 设置Broker 的角色: ASYNC_MASTER 异步复制Master ; SYNC_MASTER 同步双写Master; SLAVE
-e jvm_Xmx="2048M" 设置jvm的Xmx内存,如不设置该参数,默认为:服务器内存大于4G时,取四分之一;服务器内存小于4G时,取二分之一
-e jvm_Xms="2048M" 设置jvm的Xms内存,如不设置该参数,默认为:服务器内存大于4G时,取四分之一;服务器内存小于4G时,取二分之一
-e jvm_Xmn="1024M" 设置jvm的Xmn内存,默认为:(cpu核数*100)M与Xmx默认内存的四分之一作比较,谁小取谁
60.191.64.3:9963/risen/rocketmq_broker_x86:latest 使用的镜像
sh ./brokerStart.sh 运行此镜像使用的命令</p>
<h5>运行192.168.46.128服务器的slave(b)</h5>
<pre><code class="language-shell"># X86架构
docker run -d -p 20911:20911 -p 20909:20909 -p 20912:20912 --name rmqslave-b \
--restart=always -v /risen/soft/rocketmq/slave/logs:/home/rocketmq/logs \
-v /risen/soft/rocketmq/slave/store:/home/rocketmq/store \
-e &quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.46.129:9876&quot; \
-e &quot;MAX_POSSIBLE_HEAP=200000000&quot; -e &quot;BROKER_ID=1&quot; -e &quot;BROKER_CLUSTER_NAME=Cluster&quot; \
-e &quot;BROKER_NAME=broker-b&quot; -e &quot;LISTEN_PORT=20911&quot; -e &quot;BROKERIP1=192.168.46.128&quot; \
-e other_conf=&quot;enablePropertyFilter=true,aclEnable=true,autoCreateTopicEnable=true,brokerRole=SLAVE,slaveReadEnable=true&quot; \
-e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_broker_x86:latest sh ./brokerStart.sh
# arm架构
docker run -d -p 20911:20911 -p 20909:20909 -p 20912:20912 \
--name rmqslave-b \
--restart=always \
-v /risen/soft/rocketmq/slave/logs:/root/logs -v /risen/soft/rocketmq/slave/store:/root/store \
-e &quot;NAMESRV_ADDR=192.168.5.25:9876;192.168.5.29:9876&quot; \
-e &quot;MAX_POSSIBLE_HEAP=200000000&quot; \
-e &quot;BROKER_ID=1&quot; \
-e &quot;BROKER_CLUSTER_NAME=Cluster&quot; \
-e &quot;BROKER_NAME=broker-b&quot; \
-e &quot;LISTEN_PORT=20911&quot; \
-e &quot;BROKERIP1=192.168.5.25&quot; \
-e other_conf=&quot;enablePropertyFilter=true,aclEnable=true,autoCreateTopicEnable=true,brokerRole=SLAVE,slaveReadEnable=true&quot; \
-e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_all_arm64:latest \
sh ./brokerStart.sh</code></pre>
<p><strong>参数解析</strong>:同上的配置,这里主要写需要注意的配置
-e "BROKER_NAME=broker-a" \ 设置master的name,你这个slave是那个master的备就写那个master的name</p>
<h5>运行192.168.46.129服务器的Broker(b)</h5>
<pre><code class="language-shell"># X86架构
docker run -d -p 10911:10911 -p 10909:10909 -p 10912:10912 --name rmqbroker-b \
--restart=always -v /risen/soft/rocketmq/broker/logs:/home/rocketmq/logs \
-v /risen/soft/rocketmq/broker/store:/home/rocketmq/store \
-e &quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.46.129:9876&quot; \
-e &quot;MAX_POSSIBLE_HEAP=200000000&quot; -e &quot;BROKER_ID=0&quot; -e &quot;BROKER_CLUSTER_NAME=Cluster&quot; \
-e &quot;BROKER_NAME=broker-b&quot; -e &quot;LISTEN_PORT=10911&quot; -e &quot;BROKERIP1=192.168.46.129&quot; \
-e other_conf=&quot;enablePropertyFilter=true,aclEnable=true,brokerRole=ASYNC_MASTER,slaveReadEnable=true&quot; \
-e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_broker_x86:latest sh ./brokerStart.sh
# arm架构
docker run -d -p 10911:10911 -p 10909:10909 -p 10912:10912 \
--name rmqbroker-b \
--restart=always \
-v /risen/soft/rocketmq/broker/logs:/root/logs -v /risen/soft/rocketmq/broker/store:/root/store \
-e &quot;NAMESRV_ADDR=192.168.5.25:9876;192.168.5.29:9876&quot; \
-e &quot;MAX_POSSIBLE_HEAP=200000000&quot; \
-e &quot;BROKER_ID=0&quot; \
-e &quot;BROKER_CLUSTER_NAME=Cluster&quot; \
-e &quot;BROKER_NAME=broker-b&quot; \
-e &quot;LISTEN_PORT=10911&quot; \
-e &quot;BROKERIP1=192.168.5.29&quot; \
-e other_conf=&quot;enablePropertyFilter=true,aclEnable=true,brokerRole=ASYNC_MASTER,slaveReadEnable=true&quot; \
-e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_all_arm64:latest \
sh ./brokerStart.sh</code></pre>
<h5>运行192.168.46.129服务器的slave(a)</h5>
<pre><code class="language-shell"># X86架构
docker run -d -p 20911:20911 -p 20909:20909 -p 20912:20912 --name rmqslave-a \
--restart=always -v /risen/soft/rocketmq/slave/logs:/home/rocketmq/logs \
-v /risen/soft/rocketmq/slave/store:/home/rocketmq/store \
-e &quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.46.129:9876&quot; -e &quot;MAX_POSSIBLE_HEAP=200000000&quot; \
-e &quot;BROKER_ID=1&quot; -e &quot;BROKER_CLUSTER_NAME=Cluster&quot; -e &quot;BROKER_NAME=broker-a&quot; \
-e &quot;LISTEN_PORT=20911&quot; -e &quot;BROKERIP1=192.168.46.129&quot; \
-e other_conf=&quot;enablePropertyFilter=true,aclEnable=true,autoCreateTopicEnable=true,brokerRole=SLAVE,slaveReadEnable=true&quot; \
-e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_broker_x86:latest sh ./brokerStart.sh
# arm架构
docker run -d -p 20911:20911 -p 20909:20909 -p 20912:20912 \
--name rmqslave-a \
--restart=always \
-v /risen/soft/rocketmq/slave/logs:/root/logs -v /risen/soft/rocketmq/slave/store:/root/store \
-e &quot;NAMESRV_ADDR=192.168.5.25:9876;192.168.5.29:9876&quot; \
-e &quot;MAX_POSSIBLE_HEAP=200000000&quot; \
-e &quot;BROKER_ID=1&quot; \
-e &quot;BROKER_CLUSTER_NAME=Cluster&quot; \
-e &quot;BROKER_NAME=broker-a&quot; \
-e &quot;LISTEN_PORT=20911&quot; \
-e &quot;BROKERIP1=192.168.5.29&quot; \
-e other_conf=&quot;enablePropertyFilter=true,aclEnable=true,autoCreateTopicEnable=true,brokerRole=SLAVE,slaveReadEnable=true&quot; \
-e jvm_Xmx=&quot;2048M&quot; -e jvm_Xms=&quot;2048M&quot; -e jvm_Xmn=&quot;1024M&quot; \
60.191.64.3:9963/risen/rocketmq_all_arm64:latest \
sh ./brokerStart.sh</code></pre>
<h4>部署rocketmq控制台</h4>
<pre><code class="language-shell"># X86架构
docker run -dt -e &quot;JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.46.128:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false&quot; \
--name=rmqconsole --restart=always -p 8080:8080 60.191.64.3:9963/risen/rocketmq_console_ng_x86
# arm架构
docker run -dt -e &quot;JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.5.25:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false&quot; \
--name=rmqconsole \
--restart=always \
-p 8080:8080 \
60.191.64.3:9963/risen/rocketmq_console_arm64</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/c3ea103cc87a81d2594b904c16caeb5d" alt="" /></p>
<h4>配置acl白名单</h4>
<p><code>rmqslave-a、rmqbroker-b、rmqbroker-a、rmqslave-b四个节点都配置acl</code></p>
<pre><code class="language-shell">docker exec -it rmqbroker-a /bin/bash # 进入rmqbroker-a容器
vi /home/rocketmq/rocketmq-4.5.0/conf/plain_acl.yml # 编辑acl文件
docker cp rmqbroker-a /home/rocketmq/rocketmq-4.5.0/conf/plain_acl.yml /root/ # 将rmqbroker-a容器写好的acl文件拷贝出来
docker cp plain_acl.yml rmqslave-b:/home/rocketmq/rocketmq-4.5.0/conf/plain_acl.yml # 覆盖rmqslave-b容器内旧acl文件
docker exec -it rmqslave-b /bin/bash # 进入rmqslave-b容器
cat plain_acl.yml # 验证acl文件是否已经更改</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/e0ee60c71c408cf0ff02f80da2da6c33" alt="" />
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/63bc6d5e26113e34a16604d1e67accdc" alt="" /></p>
<h4>登录控制台后台</h4>
<p><a href="http://192.168.46.128:8080/">http://192.168.46.128:8080/</a>
账号密码:risen/risen*123
叉掉默认IP输入集群的IP:端口
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/31fa3a4a1a131ec6e663e1e0e0ec5305" alt="" />
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/e125e1f2021cf5c6aead2d05a2b09565" alt="" />
然后点集群看看是否成功
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/50af4be20f609e96865ddf0487801c5d" alt="" /></p>