docker搭建rabbitmq以及consul集群

目前docker容器化越来越火,在项目部署中也非常的简单,今天我们就平时使用到的消息中间件rabbitmq以及consul注册中心使用docker进行部署

rabbitmq集群的搭建

一、下载镜像:
docker pull  docker.***.com.cn/openstack-helm-official/rabbitmq:3.7-management

(隐去公司域名,此处即为镜像仓库地址)
二、创建文件  目录结构如下:

L--rabbitmq-ha-docker                    //主目录
    L--scripts                           //本地(Docker宿主)使用的一些脚本
        L--rmqha_set_policy.sh           //(可无) 设置各个数据库账号和开启主从复制
    L--volumes                           //各个容器的挂载数据卷
        L--rmqha_proxy
            L--haproxy.cfg               //HAProxy配置
        L--rmqha_slave
            L--cluster_entrypoint.sh     //(可无)入口文件
    L--parameters.env                    //账号密码等环境参数
    L--docker-compose.yml                //编排配置

三、编辑docker-compose.yml内容:

version: "3"
services:
  master:
    image: docker.***.com.cn/openstack-helm-official/rabbitmq:3.7-management
    container_name: rmqha_node0
    restart: always
    hostname: rmqha_node0
    ports:
      - "55672:15672"
      - "56720:5672"
    env_file:
      - ./parameters.env
    environment:
      - CONTAINER_NAME=rmqha_node0
      - RABBITMQ_HOSTNAME=rmqha_node0
      - RABBITMQ_NODENAME=rabbit
  slave1:
    image: docker.***.com.cn/openstack-helm-official/rabbitmq:3.7-management
    container_name: rmqha_node1
    restart: always
    depends_on:
      - master
    hostname: rmqha_node1
    ports:
      - "55673:15672"
      - "56721:5672"
    command: "rabbitmq-server"
    env_file:
      - ./parameters.env
    environment:
      - CONTAINER_NAME=rmqha_node1
      - RABBITMQ_HOSTNAME=rmqha_node1
      - RABBITMQ_NODENAME=rabbit
      - RMQHA_RAM_NODE=true
  slave2:
    image: docker.***.com.cn/openstack-helm-official/rabbitmq:3.7-management
    container_name: rmqha_node2
    restart: always
    depends_on:
      - master
    hostname: rmqha_node2
    ports:
      - "55674:15672"
      - "56722:5672"
    command: "rabbitmq-server"
    env_file:
      - ./parameters.env
    environment:
      - CONTAINER_NAME=rmqha_node2
      - RABBITMQ_HOSTNAME=rmqha_node2
      - RABBITMQ_NODENAME=rabbit
      - RMQHA_RAM_NODE=true
  haproxy:
    image: haproxy:latest
    container_name: rmqha_proxy
    restart: always
    depends_on:
      - master
      - slave1
      - slave2
    hostname: rmqha_proxy
    ports:
      - "56729:5672"
      - "51080:1080"
    volumes:
      - "./volumes/rmqha_proxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro"
      - "./volumes/rmqha_proxy:/root/rmqha_proxy"
    environment:
      - CONTAINER_NAME=rmqha_proxy

四、设置环境参数,编辑文件parameters.env

RMQHA_MASTER_NODE=rabbit
RMQHA_MASTER_HOST=rmqha_node0
RABBITMQ_DEFAULT_USER=guest
RABBITMQ_DEFAULT_PASS=guest
RABBITMQ_NODENAME=rabbit
RABBITMQ_ERLANG_COOKIE=myerlangcookie  //各MQ用相同的cookie

五、HAProxy配置,编辑haproxy.cfg

global
    log 127.0.0.1 local0
    maxconn 4096

defaults
    log     global
    mode    tcp
    option  tcplog
    retries 3
    option  redispatch
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn 2000
listen stats
    bind *:1080
    mode http
    stats enable
    stats hide-version
    stats realm Haproxy\ Statistics
    stats uri /
    stats auth admin:admin
listen rabbitmq
    bind *:5672
    mode tcp
    balance roundrobin
    timeout client 1h
    timeout server 1h
    option  clitcpka
    server  rmqha_node0 rmqha_node0:5672  check inter 5s rise 2 fall 3
    server  rmqha_node1 rmqha_node1:5672  check inter 5s rise 2 fall 3
    server  rmqha_node2 rmqha_node2:5672  check inter 5s rise 2 fall 3

六、在主目录下执行docker-compose up -d构建并运行整个Docker服务

七、构建rabbitmq集群

分别进入rmqha_node1 和rmqha_node2容器(docker exec -it 容器id /bin/bash),执行以下:

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rmqha_node0
rabbitmqctl start_app

    
八、开启镜像队列模式

$ docker exec -it rmqha_node0 rabbitmqctl set_policy ha-all '^' '{"ha-mode":"all"}'

 

consul集群的搭建
一、下载镜像
docker pull  docker.***.com.cn/testdev/consul:1.4.0


二、创建consul集群

第一种方式:
$ docker run -d -p 8500:8500 -v /data/consul-h:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_1 docker.***.com.cn/testdev/consul:1.4.0 agent -server -bootstrap -ui -node=node1 -client='0.0.0.0'

$ docker exec consul_server_1 consul members

1     172.17.0.3:8301  alive   server  1.0.1  2         dc1  <all>

加入到集群, 命名为 -node=2 、-node=3。
上面通过命令获取到引导 Consul 的 Ip 地址 172.17.0.3 ,

// -node=2
$ docker run -d -p -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_2 docker.***.com.cn/testdev/consul:1.4.0 agent -server -node=node2 -join='172.17.0.8'

// -node=3
$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_3 docker.***.com.cn/testdev/consul:1.4.0 agent -server -ui -node=node3 -join='172.17.0.8'


$ docker exec consul_server_1 consul operator raft list-peers//查看leader情况

第二种方式:
编辑docker-compose.yml

version: "3.0"

services:
    # consul server,对外暴露的ui接口为8500,只有在2台consul服务器的情况下集群才起作用
    consul_server:
        image: docker.***.com.cn/testdev/consul:1.4.0
        hostname: consulserver
        container_name: consulserver
        restart: always
        ports:
            - "8500:8500"
        command: -server -ui-dir /ui -data-dir /tmp/consul --bootstrap-expect=2

    consul_server1:
        image: docker.***.com.cn/testdev/consul:1.4.0
        hostname: consulserver1
        container_name: consulserver1
        depends_on:
            - "consul_server"
        command: -server -data-dir /tmp/consul -join consul_server


    consul_server2:
        image: docker.***.com.cn/testdev/consul:1.4.0
        hostname: consulserver2
        container_name: consulserver2
        depends_on:
            - "consul_server"
        command: -server -data-dir /tmp/consul -join consul_server


三、编辑haproxy.cfg

#----------------
# Global settings
#----------------
global
    log         127.0.0.1 local2
    maxconn     4000
    daemon
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 500
#-------------
#Stats monitor
#-------------
frontend stats_monitor
        bind    *:30001
        stats   enable
        stats   uri     /stats
        stats   auth    admin:admin
        stats   admin   if      TRUE
        stats   refresh 5s
        stats   realm   baison-test-Haproxy
#       stats   hide-version
#--------------------
#Application frontend
#--------------------
frontend        GEOGLOBE
bind    *:8500
#ACL#
acl map_acl path_reg -i /map/
#USE_BACKEND#
use_backend map_backend if map_acl
#map_begin#    
backend map_backend
balance roundrobin
mode http
server consul_server_1 172.17.0.9:8301 check weight 1
server consul_server_1 172.17.0.8:8301 check weight 1
server consul_server_1 172.17.0.10:8301 check weight 1
#map_end#


//新改
listen stats
    bind *:30001
    mode http
    stats enable
    stats hide-version
    stats realm Haproxy\ Statistics
    stats uri /
    stats auth admin:admin
listen consul
    bind *:8500
    mode tcp
    balance roundrobin
    timeout client 10s
    timeout server 10s
    option  clitcpka
    server  consul_server_1 consul_server_1:8500  check inter 5s rise 2 fall 3
    server  consul_server_2 consul_server_1:8500  check inter 5s rise 2 fall 3
    server  consul_server_3 consul_server_1:8500  check inter 5s rise 2 fall 3


四、启动HAproxy
docker run -d -p 32791:8500 -p 32790:30001 -p 56788:5672 --name haproxyH -v /data/haproxy:/usr/local/etc/haproxy:ro haproxy:latest

netstat -antp | grep consul

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值