文章目录
⚡⚡⚡docker-compose 部署
3master-noslave
架构
一、机器规划
准备三台机器,在每台机器上,计划安装一个 namesrv
和 broker
,其中一台机器再安装一个 dashboard
机器IP | MQ节点 | 节点端口 |
---|---|---|
192.168.9.60 | rocketmq-n/rocketmq-b/rocketmq-dashboard | 9876/10909、10911、10912/8080 |
192.168.9.61 | rocketmq-n/rocketmq-b | 9876/10909、10911、10912 |
192.168.9.62 | rocketmq-n/rocketmq-b | 9876/10909、10911、10912 |
二、创建 nfs
目录
在 nfs
服务的机器上创建挂载目录,可以通过脚本去创建
#!/bin/bash
# 创建挂载目录
mkdir /data/nfs/rocketmq/0/store -p
mkdir /data/nfs/rocketmq/0/config -p
mkdir /data/nfs/rocketmq/1/store -p
mkdir /data/nfs/rocketmq/1/config -p
mkdir /data/nfs/rocketmq/2/store -p
mkdir /data/nfs/rocketmq/2/config -p
chmod 777 /data/nfs -R
cat >>/etc/exports <<EOF
/data/nfs/rocketmq/0/store *(rw,sync,no_root_squash)
/data/nfs/rocketmq/0/config *(rw,sync,no_root_squash)
/data/nfs/rocketmq/1/store *(rw,sync,no_root_squash)
/data/nfs/rocketmq/1/config *(rw,sync,no_root_squash)
/data/nfs/rocketmq/2/store *(rw,sync,no_root_squash)
/data/nfs/rocketmq/2/config *(rw,sync,no_root_squash)
EOF
exportfs -r
三、创建 broker.conf
文件
在 nfs 服务的 /data/nfs/rocketmq/<*>/config
下创建 broker.conf
文件,内容如下:
其中 brokerName 对应三个需要名称不同,可以命名为broker-a/broker-b/broker-c
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 多网卡配置,不配置默认为内网,让mq只能内网访问,填写本机器的ip
brokerIP1 = 192.168.9.60
四、编辑 docker-compose.yml
文件
我这是使用的 nfs 存储的数据,配置里面的
nfs_host_ip
需要替换为你自己的nfs server
的ip
可参考博客:https://blog.51cto.com/u_16175450/7974774 进行配置
在三台机器上分别编写 docker-compose.yml
文件,三台机器不同的地方是 vloumes
挂载的目录,修改挂载目录即可
version: '3.5'
services:
rocketmq-nsr:
image: apache/rocketmq:5.1.1
container_name: rocketmq-nsr
restart: always
ports:
- "9876:9876"
environment:
- ROCKETMQ_HOME=/home/rocketmq/rocketmq-5.1.1
volumes:
- /etc/localtime:/etc/localtime
- /data/rocketmq/namesrv/logs:/home/rocketmq/logs
networks:
- rocketmq-net
deploy:
resources:
limits:
cpus: '4'
memory: 16G
reservations:
cpus: '2'
memory: 8G
command: sh mqnamesrv
rocketmq-broker:
image: apache/rocketmq:5.1.1
container_name: rocketmq-broker
restart: always
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
environment:
- ROCKETMQ_HOME=/home/rocketmq/rocketmq-5.1.1
- NAMESRV_ADDR=192.168.9.60:9876;192.168.9.61:9876;192.168.9.62:9876
volumes:
- /etc/localtime:/etc/localtime
- /data/rocketmq/broker/logs:/home/rocketmq/logs/rocketmqlogs
- volume-rocketmq-store:/home/rocketmq/store
- volume-rocketmq-config:/opt/rocketmq/conf
depends_on:
- rocketmq-nsr
networks:
- rocketmq-net
deploy:
resources:
limits:
cpus: '4'
memory: 16G
reservations:
cpus: '2'
memory: 8G
command: ["sh", "mqbroker", "-n", "192.168.9.60:9876;192.168.9.61:9876;192.168.9.62:9876", "-c", "/opt/rocketmq/conf/broker.conf", "--enable-proxy"]
networks:
rocketmq-net:
driver: bridge
volumes:
volume-rocketmq-store:
driver_opts:
type: nfs
o: addr=nfs_host_ip,nolock,soft,rw
device: ":/data/nfs/rocketmq/0/store"
volume-rocketmq-config:
driver_opts:
type: nfs
o: addr=nfs_host_ip,nolock,soft,rw
device: ":/data/nfs/redis/0/config"
分别在三台机器上执行启动命令
# 启动命令
docker-compose -f docker-compose.yml up -d
namesrv
启动成功如图
broker
启动成功如图
五、编辑控制面板的 docker-compose-dashboard.yml
文件
选择一台机器部署dashboard
,dashboard的配置内容如下
version: '3.5'
services:
rocket-dashboard:
image: apacherocketmq/rocketmq-dashboard:1.0.0
container_name: rocket-dashboard
ports:
- "8080:8080"
environment:
LANG: C.UTF-8
JAVA_HOME: "/usr/lib/jvm/java-8-openjdk-amd64"
JAVA_OPTS: "-Drocketmq.namesrv.addr=192.168.9.60:9876;192.168.9.61:9876;192.168.9.62:9876"
volumes:
- /etc/localtime:/etc/localtime
networks:
- rocketmq-net
deploy:
resources:
limits:
cpus: '0.5'
memory: 1G
reservations:
cpus: '0.25'
memory: 512M
networks:
rocketmq-net:
driver: bridge
启动 dashboard
# 启动 dashboard
docker-compose -f docker-compose-dashboard.yml up -d
如果看到控制台中显示了三个说明成功了
参考资料
https://rocketmq.apache.org/zh/docs/quickStart/03quickstartWithDockercompose/
https://ost.51cto.com/posts/24841