Docker swarm结合Openresty部署rabbitmq集群

  Docker swarm结合Openresty部署rabbitmq集群

 

  大家好,年底了,年为越来越浓了.2019年的寒冬被定义为未来10年中最好的一年,对于这一说法悲观的人和乐观的人的理解是不一样的.但是不管是寒冬还是盛夏,我们都应该坚持不断的积累和主动的思考.拥抱变化,坚定信心.

  

        简单描述一下我们的需求,就是通过docker 来搭建一套rabbitmq的集群,用于接受业务传来的数据,然后把数据写到消息队列中,然后消费者消费消息,生成日志文件,接着大数据采集系统定时来采集数据.这样做的一个好处就是,我们的服务可以直接部署到业务系统所在的服务器集群中.     

 

  年末的时候,在忙完了各种活动项目之后,接到了一个新的项目,数据打点项目.需要在各指定机房搭建数据采集服务,然后有数据中心定时去拉取数据.为此我们采用的解决方案是 基于docker 搭建rabbitmq,利用Openresty 来进行数据的生产和nginx代理.来,让我们一起了解一些概念.

 

       以下内容是从官网搬来的:

  OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

  OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

  OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

       

  之所以选择OpenResty,是看中了其中nginx服务和对lua脚本的支持,nginx可以做服务代理,lua脚本我们可以用来编写消息生产者的脚本.好了,开始我们的部署之旅吧(再罗嗦一句,你需要提前了解docker,同时保证部署环境已经安装了docker,为了部署成功,请保证有俩台服务器,或者虚拟机也行,同时保持俩台服务器或者虚拟机的ip在统一网段)!

  

  一.搭建swarm集群

  swarm集群的角色包含有leader,node 在swarm集群搭建中,重要的是保证 token的一致

       1.swarm manager(初始化swarm leader): docker swarm init --advertise-addr 192.168.7.201             

         提示:这一步会产生token,token为swarm集群的唯一标识

    2.swarm group(成员加入集群)

    docker swarm join --token SWMTKN-1-35ucts3e9bg5onl1pyqwh03j1z1micdb88ziq78m4pfr1zulhf-70w2bdzpjyr8xqc1p77mue04r  192.168.7.201:2377

         token是在初始化swarm manager时返回的.

    注意:记得为集群成员追加label,便于rabbitmq绑定相应的节点,bi-tool-02是节点名称

    docker node update --label-add rabbitmq=master bi-tool-02

    docker node update --label-add rabbitmq=slave1 bi-tool-01

        这里的label是我们给swarm集群中各节点起的一个别名,以 docker node update --label-add rabbitmq=master bi-tool-02 为例,是给节点bi-tool-02增加标签,标签为: rabbitmq=master  ,我们可以通过 docker node inspect bi-tool-02 来查看节点配置内容.可以看到的内容如下:

   "Labels": {

      "rabbitmq": "master"

   },

  追加标签的目的是为了我们在搭建rabbitmq集群的时候,方便rabbitmq节点的绑定.

 

  二.启动network服务

  network 用于提供容器间通许

       命令:docker network create --driver overlay rabbitmq-network

 

  三.搭建rabbitmq集群

        1.创建镜像

   docker build -t stomp-rabbitmq:latest .  

        创建镜像所需要的dockerfile文件见附件 (博客园不能上传附件吗????等我咨询完了,我再补充这个附件)

                         

        2.创建rabbitmq master队列

   命令(master):sudo docker service create --name stomp-rabbitmq-master --hostname="stomp-rabbitmq-master" --network rabbitmq-network -p 5772:5672 -p 15772:15672 -p 12345:12345 --mount type=bind,target=http://www.likecs.com/var/lib/rabbitmq/,source=http://www.likecs.com/home/agent/rabmq/ --constraint node.labels.rabbitmq==master -e RABBITMQ_CLUSTER_NODES='rabbit@stomp-rabbitmq-slave1' -e "AUTOCLUSTER_CLEANUP=true" -e "CLEANUP_WARN_ONLY=false" -e "RABBITMQ_ERLANG_COOKIE=thisissecretkey"  stomp-rabbitmq:latest

  注意:要确保/home/agent/rabmq/ 路径的存在

  备注:

  --network 为设置网络环境,rabbitmq-network是创建好的docker network,类型为overlay。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygfzf.html