RabbitMQ+Docker+Haproxy 实现高可用

RabbitMQ+Docker+Haproxy 实现高可用

本机或者待安装服务器已经存在 docker 或者自行 Google docker 的安装方法,对 Dcoker >= 18,其实很简单的一个安装过程,主要是网络及如何自动挂载 IP 对应关系到容器内,就当记录下吧。

RabbitMQ

安装

多台服务器启动方式相同相同,要预先配置好 hosts 文件的对应例如:

cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.203 rabbitmq-slave2
192.168.1.153 rabbitmq-master
192.168.1.200 rabbitmq-slave2
    docker run -d --net host --restart=always --privileged=true \
    $(cat /etc/hosts | awk -F ' ' '{if(NR>2){print "--add-host "$2":"$1}}') \
    --hostname ${RABBITMQ_HOST} \
    --name ${RABBITMQ_CONTAINER_NAME} \
    -e RABBITMQ_DEFAULT_USER=${RABBITMQ_MANAGEMENT_USER} \
    -e RABBITMQ_DEFAULT_PASS=${RABBITMQ_MANAGEMENT_PASSWD} \
    -e RABBITMQ_DEFAULT_VHOST=${RABBITMQ_VHOST} \
    -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' \  # 此处配置无论几个节点都必须保持一致
    -e RABBITMQ_LOGS="/var/log/rabbitmq/rabbitmq.log" \
    ${RABBITMQ_IMAGE}:${RABBITMQ_IMAGE_VERSION} >> ${LOGS_PATH}/${my_role}.log 2>&1

各位有可用会有疑问,$(cat /etc/hosts | awk -F ' ' '{if(NR>2){print "--add-host "$2":"$1}}')这个参数我怎么没有见过?,此处我来说明下:在 RabbitMQ 制作集群的过程中添加主机到集群中时,不支持以 IP 的形式进行添加,要么有DNS 帮你自动解析,要就要映射宿主机中的/etc/hosts 文件到 docker,但是各位使用 Docker 的都了解,不能直接挂载/etc/hosts 到容器内,那么我得解决办法就是在启动过程中调用–add-host 参数来进行 host 文件添加,而且是自动读取/etc/hosts 文件并去除头 2 行没有用到的。

集群配置

操作其实就是将其中 2 个节点添加到另外一个节点中形成集群

  • Master 节点
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl stop_app
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl reset
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl start_app
  • Slave1 节点
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl stop_app
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl reset
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl join_cluster rabbit@rabbitmq-master # @主节点的主机名
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl start_app
  • Slave2 节点
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl stop_app
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl reset
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl join_cluster rabbit@rabbitmq-master # @主节点的主机名
$ docker exec ${RABBITMQ_CONTAINER_NAME} rabbitmqctl start_app

集群验证

Haproxy

LDAP 安装很简单,主要配置文件配好即可

安装

docker run \
    -p ${HAPROXY_RABBITMQ_TCP_PORT}:5678 -p ${HAPROXY_RABBITMQ_STATS_PORT}:8101 -p ${HAPROXY_RABBITMQ_ADMIN_PORT}:8001 \
    --name ${HAPROXY_CONTAINER_NAME} \
    -v ${PER_CONF}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \
    -d ${HAPROXY_IMAGE_NAME}:${HAPROXY_IMAGE_VERSION}

配置文件


docker run -d -p 5678 -p 8101 -p 8001 --name haproxy -v /root/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest

global
        log 127.0.0.1 local0 info
        maxconn 5120
        uid 99
        gid 99
        daemon
        quiet
        nbproc 20

defaults
        log global
        #使用4层代理模式,”mode http”为7层代理模式
        mode tcp
        #if you set mode to tcp,then you nust change tcplog into httplog
        option tcplog
        option dontlognull
        retries 3
        option redispatch
        maxconn 2000
        timeout connect 5s
        #客户端空闲超时时间为 60秒 则HA 发起重连机制
        timeout client 60s
        #服务器端链接超时时间为 15秒 则HA 发起重连机制
        timeout server 15s
        #front-end IP for consumers and producters

listen rabbitmq_cluster
        bind 0.0.0.0:5678
        #配置TCP模式
        mode tcp
        #balance url_param userid
        #balance url_param session_id check_post 64
        #balance hdr(User-Agent)
        #balance hdr(host)
        #balance hdr(Host) use_domain_only
        #balance rdp-cookie
        #balance leastconn
        #balance source //ip
        #简单的轮询
        balance roundrobin
        #rabbitmq集群节点配置 
        #inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
        server myrabbit1 192.168.1.153:5672 check inter 5000 rise 2 fall 2
        server myrabbit2 192.168.1.200:5672 check inter 5000 rise 2 fall 2
        server myrabbit3 192.168.1.203:5672 check inter 5000 rise 2 fall 2

listen stats
        bind 0.0.0.0:8101
        mode http
        option httplog
        stats enable
        #设置haproxy监控地址为http://localhost:8100/rabbitmq-stats
        stats uri /rabbitmq-stats
        stats refresh 5s
        stats auth admin:123456

listen rabbitmq_admin
        bind 0.0.0.0:8001
        server myrabbit1 192.168.1.153:15672 check inter 5000 rise 2 fall 2
        server myrabbit2 192.168.1.200:15672 check inter 5000 rise 2 fall 2
        server myrabbit3 192.168.1.203:15672 check inter 5000 rise 2 fall 2        

高可用验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值