RabbitMQ部署在DockerSwarm集群

在现在的docker swarm 环境上搭建RabbitMQ(文中简称mq),

IP 角色
172.16.10.172 master
172.16.10.173 node1
172.16.10.174 node2

使用docker-compose编排构建集群

参考 oprearocks/RabbitMQ-Docker-cluster进行forked后修改为适合自己的,看源码的文件列表

按作者的源码,需要将 definitions.jsonrabbitmq.config 放到所有需要mq的机器上,看源码的docker-compose.yml 其中需要将两个配置文件映射到容器中

volumes:
      - "./rabbitmq.config:/etc/rabbitmq/rabbitmq.config"
      - "./definitions.json:/etc/rabbitmq/definitions.json"

并且还需要事先创建network

docker network create rabbitmq-cluster

以下是我修改后的版本 修改后的源码

修改后的docker-compose.yml,不需要在每台mq的机器上放置两个配置文件,而是使用了docker-compose编排3.3版本的docker config

version: "3.3"
services:
  rabbit1:
    image: rabbitmq:3-management
    hostname: rabbit1
    environment:
      RABBITMQ_ERLANG_COOKIE: "secret string"
      RABBITMQ_NODENAME: rabbit1
    depends_on:
      - rabbit3
    ports:
      - "4369:4369"
      - "5671:5671"
      - "5672:5672"
      - "15671:15671"
      - "15672:15672"
      - "25672:25672"

    configs:
      - source: rabbitmq_config
        target: /etc/rabbitmq/rabbitmq.config
      - source: definitons_json
        target: /etc/rabbitmq/definitions.json

    networks:
      - rabbitmq-cluster

  rabbit2:
    image: rabbitmq:3-management
    hostname: rabbit2

    environment:
      RABBITMQ_ERLANG_COOKIE: "secret string"
      RABBITMQ_NODENAME: rabbit2
    depends_on:
      - rabbit3
    configs:
      - source: rabbitmq_config
        target: /etc/rabbitmq/rabbitmq.config
      - source: definitons_json
        target: /etc/rabbitmq/definitions.json

    networks:
      - rabbitmq-cluster
    
  rabbit3:
    image: rabbitmq:3-management
    hostname: rabbit3
    environment:
      RABBITMQ_ERLANG_COOKIE: "secret string"
      RABBITMQ_NODENAME: rabbit3

    configs:
      - source: rabbitmq_config
        target: /etc/rabbitmq/rabbitmq.config
      - source: definitons_json
        target: /etc/rabbitmq/definitions.json

    networks:
      - rabbitmq-cluster

configs:
  rabbitmq_config:
    file: ./rabbitmq.config
  definitons_json:
    file: ./definitions.json

networks:
  rabbitmq-cluster:
    driver: overlay

只需要在 dockerswarm的manager角色的节点上下载代码

git clone https://github.com/liangxiaobo/RabbitMQ-Docker-cluster.git

进入目录执行部署

[root@master RabbitMQ-Docker-cluster]# docker stack deploy -c docker-compose.yml rabbit
Creating network rabbit_rabbitmq-cluster
Creating config rabbit_rabbitmq_config
Creating config rabbit_definitons_json
Creating service rabbit_rabbit3
Creating service rabbit_rabbit1
Creating service rabbit_rabbit2

查看服务

root@master RabbitMQ-Docker-cluster]# docker stack services rabbit 
ID                  NAME                MODE                REPLICAS            IMAGE                   PORTS
2e59unar85ko        rabbit_rabbit3      replicated          1/1                 rabbitmq:3-management   
lec34upa7hs2        rabbit_rabbit2      replicated          1/1                 rabbitmq:3-management   
otizbi69uixu        rabbit_rabbit1      replicated          1/1                 rabbitmq:3-management   *:4369->4369/tcp, *:5671-5672->5671-5672/tcp, *:15671-15672->15671-15672/tcp, *:25672->25672/tcp

成功后访问 http://172.16.10.172:15672 默认用户名和密码都是guest


能看到集群的三个mq节点

看 rabbitmq.config

[
    { rabbit, [
        {cluster_nodes, {[ 'rabbit3@rabbit3' ], disc}},
    {tcp_listen_options, [binary, {backlog, 1024}, {nodelay, true}, {keepalive, true} ]},
    {vm_memory_high_watermark, 0.6},
        { loopback_users, [ ] },
        { tcp_listeners, [ 5672 ] },
        { ssl_listeners, [ ] },
        { default_pass, <<"password">> },
        { default_user, <<"admin">> },
        { hipe_compile, false }
    ] },

    { rabbitmq_management, [ { listener, [
        { port, 15672 },
        { ssl, false }
    ] },
        {load_definitions, "/etc/rabbitmq/definitions.json"}
    ] }
].

注意看 cluster_nodes

{cluster_nodes, {[ 'rabbit3@rabbit3' ], disc}},

cluster_nodes
当节点第一次启动的时候,设置此选项会导致集群动作自动发生. 元组的第一个元素是其它节点想与其建立集群的节点. 第二个元素是节点的类型,要么是disc,要么是ram

有可能你创建的集群只能看到两个节点,那可能是因为docker swarm创建服务的顺序问题造成的,如果哪个节点没有加入集成,可以手动加入到集群中


WX20181126-180635@2x.png

进入容器后执行

rabbit@master:~$ docker container exec -it [容器ID] /bin/bash
root@rabbit3:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit3@rabbit3 ...
root@rabbit3:/# rabbitmqctl join_cluster rabbit1@rabbit1
Clustering node rabbit3@rabbit3 with rabbit1@rabbit1
root@rabbit3:/# rabbitmqctl start_app
Starting node rabbit3@rabbit3 ...
 completed with 3 plugins.

修改后的源码
rabbitmq.config详细配置参数
Clustering Guide

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352