Centos下Docker部署RocketMQ集群

  • 关于RocketMQ

  RocketMQ是阿里开源的消息中间件, 支持分布式部署,具有高并发高可用的特性,总之很牛吧,对于他的详细介绍网上有很多,现在社区也算比较活跃了,就不多介绍(其实是了解也不深入,就不误人子弟了).

  这么厉害的中间件当然要去体验一番,学习学习, 而既然要学习使用,就先得部署了环境再说,所以就有了这篇安装步骤.

  • 环境

  16G内存云虚拟机,Centos7.2,16G内存,由于性能并不高,所以测试条件有限,可能会有所勘误,还请见谅.

  目前RocketMQ官方支持Centos和Alpine(很小巧的操作系统,用于制作docker镜像很适合)

  默认系统中已经安装有docker, 没有安装的同学请转到https://www.cnblogs.com/stulzq/p/7743073.html安装一下先,一般来说安装好后需要设置一下镜像加速,设置方法请查阅https://yq.aliyun.com/articles/29941

  • 开始
  1. 下载rocketmq-docker项目地址, 这个项目中包含了Centos和alpine系统创建镜像的脚本,只需要简单修改即可
  2. 进入image-build目录,可以看到里面有一个Docker-centos文件,如下图所示
  3. 打开Dockerfile,发现会去下载rocketmq的安装包,并且默认是从Apache的主站下载的,所以会非常的慢,这里改成清华镜像下载
    如下

    修改第50行左右为https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip,
    这里要注意,如果你是从镜像站拷贝的链接,很有可能拿到的URL协议名后面没有带":",比如这个清华的镜像开始是"http//",

  4. 保存文件,执行build-image.sh

    这里的Version指rocketmq的版本,BaseImage指基础镜像,这里可以选centos或alpine,这里选择了centos,rocketmq版本4.5.0.
    一顿输出之后,有如下提示则说明我们的rocketmq镜像安装成功

    通过

    docker images

    查看可以看到有一个rocketmq镜像

    至此我们的创建镜像就结束了 

  5. 在本地创建MQ配置文件
    配置文件主要就是broker的配置文件, 在这里创建了两个broker master以形成broker集群,所以配置了两个配置文件,分别为broker-a.conf和broker-b.conf
    下面贴出配置文件
    broker-a.conf

    brokerClusterName = rocketmq-cluster
    brokerName = broker-a
    brokerId = 0
    brokerIP1 = 你的服务器IP, 如果你要从外网发送接收消息,需要贴外网IP
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = ASYNC_MASTER
    flushDiskType = ASYNC_FLUSH
    namesrvAddr = ip1:9876;ip2:9877, 
    autoCreateTopicEnable = true
    listenPort = 10911

    broker-b.conf

    brokerClusterName = rocketmq-cluster
    brokerName = broker-b
    brokerId = 0
    brokerIP1 = ip
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = ASYNC_MASTER
    flushDiskType = ASYNC_FLUSH
    namesrvAddr = ip1:9876;ip2:9877
    autoCreateTopicEnable = true
    listenPort = 10921

    上面的namesrvAddr中,如果broker能用内网访问就贴内网IP, 而且一般broker访问nameserver都是通过内网.
    在broker-b中, 需要修改的主要是brokerName,其他都可以保持一致,但listenPort需要跟后面docker-compose.yml中的ports匹配, docker-compose.yml在下面也会贴出来   

  6. 通过docker-compose创建RocketMQ服务
    k8s, swarm什么的又不会,只能用docker-compose维持一下生活这样子.
    通过docker-compose,我们创建两个nameserver, 两个broker和监控台,两个broker都是master模式,以构成注册中心和数据服务的集群,高级应用filter以后再说
    docker-compose.yml
    version: '3.5'
    services:
     rmqnamesrv-a:
      image: rocketmqinc/rocketmq
      container_name: rmqnamesrv-a
      ports: 
       - 9876:9876
      volumes:
       - /opt/rocketmq/logs/nameserver-a:/opt/logs
       - /opt/rocketmq/store/nameserver-a:/opt/store
      command: sh mqnamesrv
      networks:
       rmq:
        aliases:
         - rmqnamesrv-a
     rmqnamesrv-b:
      image: rocketmqinc/rocketmq
      container_name: rmqnamesrv-b
      ports: 
       - 9877:9876
      volumes:
       - /opt/rocketmq/logs/nameserver-b:/opt/logs
       - /opt/rocketmq/store/nameserver-b:/opt/store
      command: sh mqnamesrv
      networks:
       rmq:
        aliases:
         - rmqnamesrv-b
     rmqbroker-a:
      image: rocketmqinc/rocketmq
      container_name: rmqbroker-a
      ports:
       - 10911:10911
       - 10912:10912
      volumes:
       - /opt/rocketmq/logs/broker-a:/opt/logs
       - /opt/rocketmq/store/broker-a:/opt/store
       - /etc/rocketmq/conf/broker-a.conf:/opt/rocketmq-4.5.0/conf/broker.conf
      environment:
       TZ: Asia/Shanghai
       NAMESRV_ADDR: "rmqnamesrv-a:9876"
       JAVA_OPTS: "-Duser.home=/opt"
       JAVA_OPT_EXT: "-Xms256m -Xmx256m"
      command: sh mqbroker -c /opt/rocketmq-4.5.0/conf/broker.conf autoCreateTopicEnable=true &
      links:
       - rmqnamesrv-a:rmqnamesrv-a
       - rmqnamesrv-b:rmqnamesrv-b
      networks:
       rmq:
        aliases:
         - rmqbroker-a
     rmqbroker-b:
      image: rocketmqinc/rocketmq
      container_name: rmqbroker-b
      ports:
       - 10921:10921
       - 10922:10922
      volumes:
       - /opt/rocketmq/logs/broker-b:/opt/logs
       - /opt/rocketmq/store/broker-b:/opt/store
       - /etc/rocketmq/conf/broker-b.conf:/opt/rocketmq-4.5.0/conf/broker.conf
      environment:
       TZ: Asia/Shanghai
       NAMESRV_ADDR: "rmqnamesrv-b:9876"
       JAVA_OPTS: "-Duser.home=/opt"
       JAVA_OPT_EXT: "-Xms256m -Xmx256m"
      command: sh mqbroker -c /opt/rocketmq-4.5.0/conf/broker.conf autoCreateTopicEnable=true &
      links: 
       - rmqnamesrv-a:rmqnamesrv-a
       - rmqnamesrv-b:rmqnamesrv-b
      networks:
       rmq:
        aliases:
         - rmqbroker-b
     rmqconsole:
      image: styletang/rocketmq-console-ng
      container_name: rmqconsole
      ports:
       - 9001:9001
      environment:
       JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Dserver.port=9001" 
      networks:
       rmq:
        aliases:
         - rmqconsole
      networks:
       rmq:
        aliases:
         - rmqbroker-b 
    networks:
     rmq:
      name: rmq
      driver: bridge

    NOTE: docker-compose.yml中的volumes对应的配置项中,本地目录应该先创建好,并配置好权限

  7. 启动服务
    docker-compose up

    在docker-compose.yml所在目录执行上述代码,就可以启动整个服务.
    在启动好以后,就可以通过浏览器进入控制台,访问地址为http://consoleIp:9001/.
    这里的端口我配了9001,可以通过docker-compose.yml中的rmqconsole服务修改

猜你喜欢

转载自www.cnblogs.com/jeff-winger/p/11415755.html