1 问题背景
零基础,搭建RocketMQ玩玩
2 单机部署
下载镜像
docker pull rocketmqinc/rocketmq:4.4.0
准备RocketMQ的存储路径
mkdir -p /mydata/rocketmq
创建并启动namesrv容器
docker run --name rmqnamesrv -d \
-p 9876:9876 \
--privileged=true \
--restart=always \
-m 1g \
-v /mydata/rocketmq/data/namesrv/logs:/root/logs \
-v /mydata/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmqinc/rocketmq:4.4.0 sh mqnamesrv
创建并配置broker配置文件
mkdir -p /mydata/rocketmq/config
vim /mydata/rocketmq/config/broker.conf
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = {外网IP}
注意:外网ip指容器外的网络ip,即虚拟机使用的IP,可以通过
ip addr
命令查看
创建并启动broker容器
docker run --name rmqbroker -d \
-p 10909:10909 \
-p 10911:10911 \
--privileged=true \
--restart=always \
-m 1g \
-v /mydata/rocketmq/data/broker/logs:/root/logs \
-v /mydata/rocketmq/data/broker/store:/root/store \
-v /mydata/rocketmq/config/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
--link rmqnamesrv:namesrv \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq:4.4.0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
下载rocketmq控制台镜像
docker pull styletang/rocketmq-console-ng
创建并启动rocketmq控制台容器
docker run --name rmqconsole -p 10084:8080 -d \
--privileged=true \
--restart=always \
-m 512m \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.199.130:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false \
-Dserver.contextPath=/rmqconsole" \
styletang/rocketmq-console-ng
注意:访问rocketmq控制台时需要加上项目路径
/rmqconsole
3 集群部署
准备RocketMQ的存储路径:
mkdir -p /mydata/rocketmq
分别在两台主机上部署namesrv:
docker run --name rmqnamesrv -d \
-p 9876:9876 \
--privileged=true \
--restart=always \
-m 1g \
-v /mydata/rocketmq/data/namesrv/logs:/root/logs \
-v /mydata/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmqinc/rocketmq:4.4.0 sh mqnamesrv
分别在2台机器上配置broker:
#192.168.199.130主机
brokerClusterName = MyCluster
brokerName = broker-130
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1=192.168.199.130
#192.168.199.131主机
brokerClusterName = MyCluster
brokerName = broker-131
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1=192.168.199.131
分别在2台机器上创建broker容器的命令如下:
docker run --name rmqbroker -d \
-p 10909:10909 \
-p 10911:10911 \
--privileged=true \
--restart=always \
-m 1g \
-v /mydata/rocketmq/data/broker/logs:/root/logs \
-v /mydata/rocketmq/data/broker/store:/root/store \
-v /mydata/rocketmq/config/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
--link rmqnamesrv:namesrv \
-e "NAMESRV_ADDR=192.168.199.130:9876;192.168.199.131:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq:4.4.0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
注意:上面
-e "NAMESRV_ADDR=xxx:xx;xxx:xx"
需要填写自己namesrv的地址,有多个namesrv则用分号隔开
创建RocketMQ控制台容器:
docker run --name rmqconsole -p 10084:8080 -d \
--privileged=true \
--restart=always \
-m 512m \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.199.130:9876;192.168.199.131:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false \
-Dserver.contextPath=/rmqconsole" \
styletang/rocketmq-console-ng
注意:
- 上面
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=xxx:xx;xxx:xx"
需要填写自己namesrv的地址,有多个namesrv则用分号隔开- 访问该控制台时需要在端口号后加上
/rmqconsole
,例子:http://localhost:10084/rmqconsole