Mac下使用docker搭建rocketmq两主两从集群

Mac下使用docker搭建rocketmq两主两从集群

  • Mac下使用docker搭建rocketmq两主两从集群
    • 1.安装docker
    • 2.创建所需文件夹
    • 3.docker创建网络
    • 4.创建配置文件
      • broker-a.conf
      • broker-b.conf
      • broker-a-s.conf
      • broker-b-s.conf
    • 5.编写 docker-compose.yml
    • 6.执行docker-compose命令创建项目
    • 7.容器查看ip
    • 8.mac宿主机ping通docke容器
      • 安装tunnelblick-for-mac
      • git拉取docker-mac-network
      • 生成o文件
    • 9.cosole查看
    • 补充

Mac下使用docker搭建rocketmq两主两从集群

本人是docker小白。因为公司产品使用了rockermq,但是真正部署上都是一台服务器单机的。所以自己想试下,部署个集群看应用端代码是否匹配,能不能正常使用。没得服务器,就想说用docker来弄。
记录下踩坑、学习经过
ps:简书是真的难用,搬到csdn来了

1.安装docker

可参照该网址安装
https://www.runoob.com/docker/macos-docker-install.html

2.创建所需文件夹

nameserver-a的log和store

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

broker-a、broker-b的log和store

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/

broker-a-s、broker-b-s的log和store

mkdir -p /opt/rocketmq/logs/broker-a-s
mkdir -p /opt/rocketmq/logs/broker-b-s
mkdir -p /opt/rocketmq/store/broker-a-s
mkdir -p /opt/rocketmq/store/broker-b-s
mkdir -p /home/rocketmq/broker-a-s
mkdir -p /home/rocketmq/broker-b-s

如果创建不了 。root用户都说没权限的话。

cd  /
sudo mount -uw /

再试试看下。

3.docker创建网络

应为后面考虑到配置文件要写死ip。这里先创建网络嘚

docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 mynet

解析:

–driver bridge 表示使用桥接模式

–subnet 172.18.0.0/16 表示子网ip 可以分配 172.18.0.2 到 172.18.255.255

–gateway 172.18.1.0 表示网关

mynet 表示网络名

Mac下使用docker搭建rocketmq两主两从集群_第1张图片

删除网络(补充)

Mac下使用docker搭建rocketmq两主两从集群_第2张图片

4.创建配置文件

17.18.0.2 namesvr-a
17.18.0.3 namesvr-b
17.18.0.4 broker-a
17.18.0.5 broker-b
17.18.0.6 broker-a-s
17.18.0.7 broker-b-s

broker-a.conf

brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
brokerIP1=172.18.0.4
brokerIP2=172.18.0.4
listenPort=10911
namesrvAddr=172.18.0.2:9876;172.18.0.3:9876
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH


broker-b.conf

brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
brokerIP1=172.18.0.6
brokerIP2=172.18.0.6
listenPort=10911
namesrvAddr=172.18.0.2:9876;172.18.0.3:9876
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH

broker-a-s.conf

brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
brokerIP1=172.18.0.6
listenPort=10911
namesrvAddr=172.18.0.2:9876;172.18.0.3:9876
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

broker-b-s.conf

brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
brokerIP1=172.18.0.7
listenPort=10911
namesrvAddr=172.18.0.2:9876;172.18.0.3:9876
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

5.编写 docker-compose.yml

docker-compose文件详解 可参考:
docker-compose.yml文件详解

# 指定 compose 文件的版本
version: '3.5'
# 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称
services:
  #自定义服务名称
  namesrv-a:
    # 指定 docker 镜像, 可以是远程仓库镜像、本地镜像
    image: rocketmqinc/rocketmq:4.3.0
    container_name: namesrv-a
    #建立宿主机和容器之间的端口映射关系, ports 支持两种语法格式
    ports:
      - 9876:9876     
    # 定义容器和宿主机的卷映射关系, 其和 networks 一样可以位于 services 键的二级键和 compose 顶级键, 如果需要跨服务间使用则在顶级键定义, 在 services 中引用
    volumes:
      - /opt/rocketmq/logs/nameserver-a:/opt/logs
      - /opt/rocketmq/store/nameserver-a:/opt/store
    # 覆盖容器启动后默认执行的命令
    command: sh mqnamesrv
    # 定义 networks 信息
    networks:
         # v3.5 以上版本, 为此网络设置名称  就是刚刚创建网络时的名字
         mynet:
            # IP V4 格式地址
            ipv4_address: 172.18.0.2

  namesrv-b:
    image: rocketmqinc/rocketmq:4.3.0
    container_name: namesrv-b
    ports:
      - 9877:9876
    volumes:
      - /opt/rocketmq/logs/nameserver-b:/opt/logs
      - /opt/rocketmq/store/nameserver-b:/opt/store
    command: sh mqnamesrv
    networks:
         mynet:
            ipv4_address: 172.18.0.3

  broker-a:
    image: rocketmqinc/rocketmq:4.3.0
    container_name: broker-a
    ports:
      - 11913:10911
      - 11914:10909
    volumes:
      - /opt/rocketmq/logs/broker-a:/opt/logs
      - /opt/rocketmq/store/broker-a:/opt/store
      - /home/rocketmq/broker-a.conf:/opt/rocketmq-4.3.0/conf/broker-a.conf 
    environment:
        # 指定堆内存大小    https://blog.csdn.net/qq_35529258/article/details/112544700
        MAX_POSSIBLE_HEAP: 268435456
        TZ: Asia/Shanghai
        NAMESRV_ADDR: "172.18.0.2:9876;172.18.0.3:9876"
        JAVA_OPTS: " -Duser.home=/opt"
        JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /opt/rocketmq-4.3.0/conf/broker-a.conf autoCreateTopicEnable=true &
    # 链接到其它服务中的容器, 该选项是 docker 历史遗留的选项, 目前已被用户自定义网络名称空间取代, 最终有可能被废弃 (在使用 swarm 部署时将忽略该选项)
    links:
      - namesrv-a
      - namesrv-b
    # 通过depends_on来标记依赖关系, 当namesrv-b服务启动完成后, 才会启动该服务;
    depends_on:
      - namesrv-a
    networks:
         mynet:
            ipv4_address: 172.18.0.4

  broker-a-s:
    image: rocketmqinc/rocketmq:4.3.0
    container_name: broker-a-s
    ports:
      - 11915:10911
      - 11916:10909
    volumes:
      - /opt/rocketmq/logs/broker-a-s:/opt/logs
      - /opt/rocketmq/store/broker-a-s:/opt/store
      - /home/rocketmq/broker-a-s.conf:/opt/rocketmq-4.3.0/conf/broker-a-s.conf 
    environment:
        # 指定堆内存大小    https://blog.csdn.net/qq_35529258/article/details/112544700
        MAX_POSSIBLE_HEAP: 268435456
        TZ: Asia/Shanghai
        NAMESRV_ADDR: "172.18.0.2:9876;172.18.0.3:9876"
        JAVA_OPTS: " -Duser.home=/opt"
        JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /opt/rocketmq-4.3.0/conf/broker-a-s.conf autoCreateTopicEnable=true &
    # 链接到其它服务中的容器, 该选项是 docker 历史遗留的选项, 目前已被用户自定义网络名称空间取代, 最终有可能被废弃 (在使用 swarm 部署时将忽略该选项)
    links:
      - namesrv-a
      - namesrv-b
    # 通过depends_on来标记依赖关系, 当namesrv-b服务启动完成后, 才会启动该服务;
    depends_on:
      - namesrv-a
    networks:
         mynet:
            ipv4_address: 172.18.0.5

  broker-b:
    image: rocketmqinc/rocketmq:4.3.0
    container_name: broker-b
    ports:
      - 11911:10911
      - 11909:10909
    volumes:
      - /opt/rocketmq/logs/broker-b:/opt/logs
      - /opt/rocketmq/store/broker-b:/opt/store
      - /home/rocketmq/broker-b.conf:/opt/rocketmq-4.3.0/conf/broker-b.conf 
    # 设置环境变量, environment 的值可以覆盖 env_file 的值 (等同于 docker run --env 的作用)
    environment:
      # 指定堆内存大小    https://blog.csdn.net/qq_35529258/article/details/112544700
        MAX_POSSIBLE_HEAP: 268435456
        TZ: Asia/Shanghai
        NAMESRV_ADDR: "172.18.0.2:9876;172.18.0.3:9876"
        JAVA_OPTS: " -Duser.home=/opt"
        JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /opt/rocketmq-4.3.0/conf/broker-b.conf autoCreateTopicEnable=true &
    # 链接到其它服务中的容器, 该选项是 docker 历史遗留的选项, 目前已被用户自定义网络名称空间取代, 最终有可能被废弃 (在使用 swarm 部署时将忽略该选项)
    links:
      - namesrv-a
      - namesrv-b
    # 通过depends_on来标记依赖关系, 当namesrv-b服务启动完成后, 才会启动该服务;
    depends_on:
      - namesrv-b
    networks:
         mynet:
            ipv4_address: 172.18.0.6

  broker-b-s:
    image: rocketmqinc/rocketmq:4.3.0
    container_name: broker-b-s
    ports:
      - 11912:10911
      - 11910:10909
    volumes:
      - /opt/rocketmq/logs/broker-b-s:/opt/logs
      - /opt/rocketmq/store/broker-b-s:/opt/store
      - /home/rocketmq/broker-b-s.conf:/opt/rocketmq-4.3.0/conf/broker-b-s.conf 
    environment:
      # 指定堆内存大小    https://blog.csdn.net/qq_35529258/article/details/112544700
        MAX_POSSIBLE_HEAP: 268435456
        TZ: Asia/Shanghai
        NAMESRV_ADDR: "172.18.0.2:9876;172.18.0.3:9876"
        JAVA_OPTS: " -Duser.home=/opt"
        JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /opt/rocketmq-4.3.0/conf/broker-b-s.conf autoCreateTopicEnable=true &
    # 链接到其它服务中的容器, 该选项是 docker 历史遗留的选项, 目前已被用户自定义网络名称空间取代, 最终有可能被废弃 (在使用 swarm 部署时将忽略该选项)
    links:
      - namesrv-a
      - namesrv-b
    # 通过depends_on来标记依赖关系, 当namesrv-b服务启动完成后, 才会启动该服务;
    depends_on:
      - namesrv-b
    networks:
         mynet:
            ipv4_address: 172.18.0.7

  rocketmq-console:
    image: styletang/rocketmq-console-ng
    container_name: rocketmq-console
    ports:
      - 8090:8090
    environment:
        JAVA_OPTS: -Drocketmq.namesrv.addr=172.18.0.2:9876;172.18.0.3:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
    networks:
         mynet:
            ipv4_address: 172.18.0.8

networks:
  mynet:
    # 外部网络, 如果设置为 true 则 docker-compose up 不会尝试创建它, 如果它不存在则引发错误
    external: true



6.执行docker-compose命令创建项目

docker-compose -f docker-compose.yml -p rocketmq up -d

-f 指定文件

-p 给创建的项目命名,不写的话好像是当前目录的名字

Mac下使用docker搭建rocketmq两主两从集群_第3张图片

界面上展示效果
Mac下使用docker搭建rocketmq两主两从集群_第4张图片
中间有碰见过个问题,broker启动一个另一个就容器自动停掉了。各种百度,最后发现是自己docker资源配置内存就只有2G…改成8G后就没毛病了。

7.容器查看ip

docker ps 

找到容器的CONTAINER ID

docker  exec -it -u root id bash

以root进入容器

docker exec -it -u root  xxxx bash

在这里插入图片描述

yum search ifconfig 
yum install net-tools.x86_64
ifconfig

Mac下使用docker搭建rocketmq两主两从集群_第5张图片

如图,namesrv-a 这个服务ip是172.18.0.2

8.mac宿主机ping通docke容器

安装tunnelblick-for-mac

网上是说brew 下载。我这下载太慢了。就官网下载了个。
官网下载地址

git拉取docker-mac-network

找个目录git拉取

git clone https://github.com/wojas/docker-mac-network.git

拉取完之后,在docker-mac-network目录下

vi helpers/run.sh 

Mac下使用docker搭建rocketmq两主两从集群_第6张图片

这图片这里 172.18.0.0 255.255.0.0
是网段和子网掩码。 我自己是给容器网段是172.18.0.0,所以配置为这个。

生成o文件

 docker-compose -f docker-compose.yml    up -d

Mac下使用docker搭建rocketmq两主两从集群_第7张图片
界面上是
Mac下使用docker搭建rocketmq两主两从集群_第8张图片
这个为啥一直启动不了,俺也不晓得了。看了下启动日志,也看不懂。

前往 /docker-mac-network/ 文件夹,发现多出一个 docker-for-mac. 文件,如下图 ps:注意下,这个生成这个文件。感觉挺久了。可以多等下
Mac下使用docker搭建rocketmq两主两从集群_第9张图片
在docker-for-mac.o文件中添加一行

comp-lzo yes


然后 打开docker-for-mac.o 。它会用tunnelblick打开。然后配置进去
Mac下使用docker搭建rocketmq两主两从集群_第10张图片
连接

然后就可以ping通了

个人比较奇怪的就是。配置完一遍之后,就一直能链接了。不是很懂…

9.cosole查看

浏览器登录:http://172.18.0.8:8080/

Mac下使用docker搭建rocketmq两主两从集群_第11张图片

补充

上面安装的mq是 4.3。但是代码层面上使用的client是4.1。就会下面链接的问题。
https://blog.csdn.net/whhwkm/article/details/81783322

你可能感兴趣的:(docker,docker,mac,中间件)