知识库

标准化实施手册及常见错误


RocketMQ集群部署

<h3>集群部署拓扑图</h3> <p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/fed079f4d9df0b3436720028340c96d4" alt="" /> &lt;center&gt;以下192.168.46.128简称128节点,192.168.46.129简称129节点&lt;/center&gt;</p> <h4>安装docker,配置daemon.json文件</h4> <pre><code class="language-shell">vim /etc/docker/daemon.json { &amp;quot;data-root&amp;quot;:&amp;quot;/risen/soft/docker&amp;quot;, &amp;quot;bip&amp;quot;:&amp;quot;192.168.88.1/24&amp;quot;, &amp;quot;insecure-registries&amp;quot;:[&amp;quot;60.191.64.3:9963&amp;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=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;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=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;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 &amp;quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.46.129:9876&amp;quot; \ -e &amp;quot;MAX_POSSIBLE_HEAP=200000000&amp;quot; -e &amp;quot;BROKER_ID=0&amp;quot; -e &amp;quot;BROKER_CLUSTER_NAME=Cluster&amp;quot; \ -e &amp;quot;BROKER_NAME=broker-a&amp;quot; -e &amp;quot;LISTEN_PORT=10911&amp;quot; -e &amp;quot;BROKERIP1=192.168.46.128&amp;quot; \ -e other_conf=&amp;quot;enablePropertyFilter=true,aclEnable=true,brokerRole=ASYNC_MASTER,slaveReadEnable=true&amp;quot; \ -e jvm_Xmx=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;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 &amp;quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.5.29:9876&amp;quot; \ -e &amp;quot;MAX_POSSIBLE_HEAP=200000000&amp;quot; \ -e &amp;quot;BROKER_ID=0&amp;quot; \ -e &amp;quot;BROKER_CLUSTER_NAME=Cluster&amp;quot; \ -e &amp;quot;BROKER_NAME=broker-a&amp;quot; \ -e &amp;quot;LISTEN_PORT=10911&amp;quot; \ -e &amp;quot;BROKERIP1=192.168.46.128&amp;quot; \ -e other_conf=&amp;quot;enablePropertyFilter=true,aclEnable=true,brokerRole=ASYNC_MASTER,slaveReadEnable=true&amp;quot; \ -e jvm_Xmx=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;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 &quot;NAMESRV_ADDR=192.168.46.128:9876,192.168.46.129:9876&quot; 此处配置namesrv的地址,ip(不可用127.0.0.1),多namesrv地址中间用逗号隔开 -e &quot;BROKER_ID=0&quot; 设置broker的id(0为主其他为从) -e &quot;BROKER_CLUSTER_NAME=Cluster&quot; 设置所属集群名字 -e &quot;BROKER_NAME=broker-a&quot; 设置broker的name -e &quot;LISTEN_PORT=10911&quot; 设置broker的主端口 -e &quot;BROKERIP1=192.168.46.128&quot; 设置broker的ip地址,即本机ip -e other_conf=&quot;enablePropertyFilter=true&quot; 设置其他配置,如有其他配置以逗号’,’相隔 例:-e other_conf=&quot;enablePropertyFilter=true,其他配置&quot; slaveReadEnable=true 设置堆积量已经超过物理内存 40%时,则建议从从服务器拉取消息,否则还是从主服务器拉取消息 brokerRole=ASYNC_MASTER 设置Broker 的角色: ASYNC_MASTER 异步复制Master ; SYNC_MASTER 同步双写Master; SLAVE -e jvm_Xmx=&quot;2048M&quot; 设置jvm的Xmx内存,如不设置该参数,默认为:服务器内存大于4G时,取四分之一;服务器内存小于4G时,取二分之一 -e jvm_Xms=&quot;2048M&quot; 设置jvm的Xms内存,如不设置该参数,默认为:服务器内存大于4G时,取四分之一;服务器内存小于4G时,取二分之一 -e jvm_Xmn=&quot;1024M&quot; 设置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 &amp;quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.46.129:9876&amp;quot; \ -e &amp;quot;MAX_POSSIBLE_HEAP=200000000&amp;quot; -e &amp;quot;BROKER_ID=1&amp;quot; -e &amp;quot;BROKER_CLUSTER_NAME=Cluster&amp;quot; \ -e &amp;quot;BROKER_NAME=broker-b&amp;quot; -e &amp;quot;LISTEN_PORT=20911&amp;quot; -e &amp;quot;BROKERIP1=192.168.46.128&amp;quot; \ -e other_conf=&amp;quot;enablePropertyFilter=true,aclEnable=true,autoCreateTopicEnable=true,brokerRole=SLAVE,slaveReadEnable=true&amp;quot; \ -e jvm_Xmx=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;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 &amp;quot;NAMESRV_ADDR=192.168.5.25:9876;192.168.5.29:9876&amp;quot; \ -e &amp;quot;MAX_POSSIBLE_HEAP=200000000&amp;quot; \ -e &amp;quot;BROKER_ID=1&amp;quot; \ -e &amp;quot;BROKER_CLUSTER_NAME=Cluster&amp;quot; \ -e &amp;quot;BROKER_NAME=broker-b&amp;quot; \ -e &amp;quot;LISTEN_PORT=20911&amp;quot; \ -e &amp;quot;BROKERIP1=192.168.5.25&amp;quot; \ -e other_conf=&amp;quot;enablePropertyFilter=true,aclEnable=true,autoCreateTopicEnable=true,brokerRole=SLAVE,slaveReadEnable=true&amp;quot; \ -e jvm_Xmx=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;quot; \ 60.191.64.3:9963/risen/rocketmq_all_arm64:latest \ sh ./brokerStart.sh</code></pre> <p><strong>参数解析</strong>:同上的配置,这里主要写需要注意的配置 -e &quot;BROKER_NAME=broker-a&quot; \ 设置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 &amp;quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.46.129:9876&amp;quot; \ -e &amp;quot;MAX_POSSIBLE_HEAP=200000000&amp;quot; -e &amp;quot;BROKER_ID=0&amp;quot; -e &amp;quot;BROKER_CLUSTER_NAME=Cluster&amp;quot; \ -e &amp;quot;BROKER_NAME=broker-b&amp;quot; -e &amp;quot;LISTEN_PORT=10911&amp;quot; -e &amp;quot;BROKERIP1=192.168.46.129&amp;quot; \ -e other_conf=&amp;quot;enablePropertyFilter=true,aclEnable=true,brokerRole=ASYNC_MASTER,slaveReadEnable=true&amp;quot; \ -e jvm_Xmx=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;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 &amp;quot;NAMESRV_ADDR=192.168.5.25:9876;192.168.5.29:9876&amp;quot; \ -e &amp;quot;MAX_POSSIBLE_HEAP=200000000&amp;quot; \ -e &amp;quot;BROKER_ID=0&amp;quot; \ -e &amp;quot;BROKER_CLUSTER_NAME=Cluster&amp;quot; \ -e &amp;quot;BROKER_NAME=broker-b&amp;quot; \ -e &amp;quot;LISTEN_PORT=10911&amp;quot; \ -e &amp;quot;BROKERIP1=192.168.5.29&amp;quot; \ -e other_conf=&amp;quot;enablePropertyFilter=true,aclEnable=true,brokerRole=ASYNC_MASTER,slaveReadEnable=true&amp;quot; \ -e jvm_Xmx=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;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 &amp;quot;NAMESRV_ADDR=192.168.46.128:9876;192.168.46.129:9876&amp;quot; -e &amp;quot;MAX_POSSIBLE_HEAP=200000000&amp;quot; \ -e &amp;quot;BROKER_ID=1&amp;quot; -e &amp;quot;BROKER_CLUSTER_NAME=Cluster&amp;quot; -e &amp;quot;BROKER_NAME=broker-a&amp;quot; \ -e &amp;quot;LISTEN_PORT=20911&amp;quot; -e &amp;quot;BROKERIP1=192.168.46.129&amp;quot; \ -e other_conf=&amp;quot;enablePropertyFilter=true,aclEnable=true,autoCreateTopicEnable=true,brokerRole=SLAVE,slaveReadEnable=true&amp;quot; \ -e jvm_Xmx=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;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 &amp;quot;NAMESRV_ADDR=192.168.5.25:9876;192.168.5.29:9876&amp;quot; \ -e &amp;quot;MAX_POSSIBLE_HEAP=200000000&amp;quot; \ -e &amp;quot;BROKER_ID=1&amp;quot; \ -e &amp;quot;BROKER_CLUSTER_NAME=Cluster&amp;quot; \ -e &amp;quot;BROKER_NAME=broker-a&amp;quot; \ -e &amp;quot;LISTEN_PORT=20911&amp;quot; \ -e &amp;quot;BROKERIP1=192.168.5.29&amp;quot; \ -e other_conf=&amp;quot;enablePropertyFilter=true,aclEnable=true,autoCreateTopicEnable=true,brokerRole=SLAVE,slaveReadEnable=true&amp;quot; \ -e jvm_Xmx=&amp;quot;2048M&amp;quot; -e jvm_Xms=&amp;quot;2048M&amp;quot; -e jvm_Xmn=&amp;quot;1024M&amp;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 &amp;quot;JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.46.128:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false&amp;quot; \ --name=rmqconsole --restart=always -p 8080:8080 60.191.64.3:9963/risen/rocketmq_console_ng_x86 # arm架构 docker run -dt -e &amp;quot;JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.5.25:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false&amp;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>

页面列表

ITEM_HTML