RabbitMQ入门学习4 - 单机版Cluster搭建

1. 概述

本文介绍RabbitMQ集群的单机组建,也可以采用docker-compose部署到多机环境(需要把1个docker-compose.yml拆成n个,分别在不同机器上启动)。
Clone From https://github.com/pardahlman/docker-rabbitmq-cluster
参考:https://wiki.linuxchina.net/index.php/Rabbitmq_cluster_on_docker-compose

2. 组建集群

2.1. 创建目录

mkdir /data/rabbitmq/01 /data/rabbitmq/02 /data/rabbitmq/03

2.2. 启动集群,并join-node

docker-compose up -d

docker cp setup-node.sh rabbitmq2:/home/
docker exec -it rabbitmq2 bash /home/setup-node.sh

docker cp setup-node.sh rabbitmq3:/home/
docker exec -it rabbitmq3 bash /home/setup-node.sh

3. 集群启停

  • 启动
docker-compose up -d
  • 停止
docker-compose down

4. 测试

  • Haproxy States (admin/admin)
    http://10.211.28.93:1936/stats

  • Haproxy RabbitMQ Management (root/123123)
    http://10.211.28.93:15670

  • RabbitMQ1 Management (root/123123)
    http://10.211.28.93:15671

  • RabbitMQ2 Management (root/123123)
    http://10.211.28.93:15672

  • RabbitMQ3 Management (root/123123)
    http://10.211.28.93:15672

  • RabbitMQ Connect URI
    amqp://root:123123@10.211.28.93:5670

5. 注意

  • 如果要部署到3台机器,需要在所有节点配置和hostname一致的hosts,并开放下面4个port
    extra_hosts:
      - "rabbitmq1:10.176.154.39"
      - "rabbitmq2:10.176.154.40"
      - "rabbitmq3:10.176.154.41"
    ports:
      - 0.0.0.0:15672:15672
      - 0.0.0.0:5672:5672
      - 0.0.0.0:4369:4369
      - 0.0.0.0:25672:25672
      # - "15692:15692"  # prometheus

6. 参考

7. 附件

  • .env
RABBITMQ_ERLANG_COOKIE=12345ABCDEFG
RABBITMQ_DEFAULT_USER=root
RABBITMQ_DEFAULT_PASS=123123
RABBITMQ_DEFAULT_VHOST=/
RABBITMQ_DOCKER_IMAGE_TAG=3.8-management
RABBITMQ_DATA_DIR=/data/rabbitmq
  • docker-compose.yml
version: '3.9'

services:

  rabbitmq1:
    image: rabbitmq:${RABBITMQ_DOCKER_IMAGE_TAG}
    container_name: rabbitmq1
    restart: always
    hostname: rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE=${RABBITMQ_ERLANG_COOKIE}
      - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}
      - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}
      - RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST}
    volumes:
      - ${RABBITMQ_DATA_DIR}/01:/var/lib/rabbitmq
    ports:
      - 0.0.0.0:15671:15672
      - 0.0.0.0:5671:5672
      # - "15692:15692"  # prometheus

  rabbitmq2:
    image: rabbitmq:${RABBITMQ_DOCKER_IMAGE_TAG}
    container_name: rabbitmq2
    restart: always
    hostname: rabbitmq2
    depends_on:
      - rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE=${RABBITMQ_ERLANG_COOKIE}
    volumes:
      - ${RABBITMQ_DATA_DIR}/02:/var/lib/rabbitmq
    ports:
      - 0.0.0.0:15672:15672
      - 0.0.0.0:5672:5672
      # - "15692:15692"  # prometheus

  rabbitmq3:
    image: rabbitmq:${RABBITMQ_DOCKER_IMAGE_TAG}
    container_name: rabbitmq3
    restart: always
    hostname: rabbitmq3
    depends_on:
      - rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE=${RABBITMQ_ERLANG_COOKIE}
    volumes:
      - ${RABBITMQ_DATA_DIR}/03:/var/lib/rabbitmq
    ports:
      - 0.0.0.0:15673:15672
      - 0.0.0.0:5673:5672
      # - "15692:15692"  # prometheus

  haproxy:
    image: haproxy:2.3
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    depends_on:
      - rabbitmq1
      - rabbitmq2
      - rabbitmq3
    ports:
      - 0.0.0.0:15670:15672
      - 0.0.0.0:5670:5672
      - 0.0.0.0:1936:1936

  # debug:
  #   image: busybox
  #   entrypoint: ping rabbitmq1
  • haproxy.cfg
global
        log 127.0.0.1   local1
        maxconn 4096
 
defaults
        log     global
        mode    tcp
        option  tcplog
        retries 3
        option redispatch
        maxconn 2000
        timeout connect 5000
        timeout client 50000
        timeout server 50000
 
listen  stats
        bind *:1936
        mode http
        stats enable
        stats hide-version
        stats refresh 5s
        stats show-node
        stats auth admin:admin
        stats realm Haproxy\ Statistics
        stats uri /stats

listen rabbitmq
        bind 0.0.0.0:5672
        mode            tcp
        balance         roundrobin
        timeout client  3h
        timeout server  3h
        option          clitcpka
        server          rabbitmq1 rabbitmq1:5672  check inter 5s rise 2 fall 3
        server          rabbitmq2 rabbitmq2:5672  check inter 5s rise 2 fall 3
        server          rabbitmq3 rabbitmq3:5672  check inter 5s rise 2 fall 3

listen mgmt
        bind 0.0.0.0:15672
        mode            tcp
        balance         roundrobin
        timeout client  3h
        timeout server  3h
        option          clitcpka
        server          rabbitmq1 rabbitmq1:15672  check inter 5s rise 2 fall 3
        server          rabbitmq2 rabbitmq2:15672  check inter 5s rise 2 fall 3
        server          rabbitmq3 rabbitmq3:15672  check inter 5s rise 2 fall 3
  • setup-node.sh
#!/bin/bash

set -e

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

推荐阅读更多精彩内容