zoukankan      html  css  js  c++  java
  • Docker+RabbitMQ+HAProxy 集群镜像模式实现高可用

    一、RabbitMQ 基础知识

    RabbitMQ 吞吐量测试工具:http://www.javashuo.com/article/p-rwgevhno-ez.html

    RabbitMQ 集群配置:https://www.cnblogs.com/vipstone/p/9362388.html

    二、RabbitMQ 搭建

    1.创建一个桥接网络

    docker network create rabbtimanet

    2.查看网络

    docker network ls

     3.创建 RabbitMQ 容器

    docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -p 1883:1883 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --net=rabbtimanet rabbitmq:3.9.11-management
    docker run -d --hostname rabbit2 --name myrabbit2 -p 15673:15672 -p 5673:5672 -p 1884:1883 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --net=rabbtimanet rabbitmq:3.9.11-management
    docker run -d --hostname rabbit3 --name myrabbit3 -p 15674:15672 -p 5674:5672 -p 1885:1883 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --net=rabbtimanet rabbitmq:3.9.11-management

    端口 15672: RabbitMQ 的管理后台端口

    端口 5672:RabbitMQ 的端口

    端口 1883:RabbitMQ 的 MQTT 插件端口

    4.启用管理界面

    docker exec -it myrabbit1 rabbitmq-plugins enable rabbitmq_management
    docker exec -it myrabbit2 rabbitmq-plugins enable rabbitmq_management
    docker exec -it myrabbit3 rabbitmq-plugins enable rabbitmq_management

    5.启用 MQTT 插件

    docker exec -it myrabbit1 rabbitmq-plugins enable rabbitmq_mqtt
    docker exec -it myrabbit2 rabbitmq-plugins enable rabbitmq_mqtt
    docker exec -it myrabbit3 rabbitmq-plugins enable rabbitmq_mqtt

    6.配置集群

    #容器1
    docker exec -it myrabbit1 bash
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app
    exit
    
    #容器2
    docker exec -it myrabbit2 bash
    rabbitmqctl stop_app
    rabbitmqctl reset
    #容器2加入集群
    rabbitmqctl join_cluster --ram rabbit@rabbit1
    //(--ram:内存存储方式,默认磁盘存储)
    rabbitmqctl start_app
    exit
    
    #容器3
    docker exec -it myrabbit3 bash
    rabbitmqctl stop_app
    rabbitmqctl reset
    #容器3加入集群
    rabbitmqctl join_cluster --ram rabbit@rabbit1
    //(--ram:内存存储方式,默认磁盘存储)
    rabbitmqctl start_app
    exit

    三、HAProxy 搭建

    参考地址:https://www.freesion.com/article/1132374240/

    1.创建目录

    mkdir /data/docker/haproxy/8100
    mkdir /data/docker/haproxy/8101

    2.配置 haproxy.cfg

    global
        #工作目录
        #chroot /usr/local/etc/haproxy
        #日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
        log 127.0.0.1 local5 info
        #守护进程运行
        daemon
     
    defaults
        log    global
        mode    http
        #日志格式
        option    httplog
        #日志中不记录负载均衡的心跳检测记录
        option    dontlognull
        #连接超时(毫秒)
        timeout connect 5000
        #客户端超时(毫秒)
        timeout client  50000
        #服务器超时(毫秒)
        timeout server  50000
     
    #监控界面    
    listen  admin_stats
        #监控界面的访问的IP和端口
        bind  0.0.0.0:8100
        #访问协议
        mode        http
        #URI相对地址
        stats uri   /stats
        #统计报告格式
        stats realm     Global\ statistics
        #登陆帐户信息
        stats auth  admin:abc123456
    #mqtt 服务端负载均衡
    listen  rabbitmq_server
        #访问的IP和端口(前面ip=0代表任何ip都可访问)
        bind  0.0.0.0:1887 
        #网络协议
        mode  tcp
        #负载均衡算法(轮询算法)
        #轮询算法:roundrobin
        #权重算法:static-rr
        #最少连接算法:leastconn
        #请求源IP算法:source 
        balance  roundrobin
        #日志格式
        option  tcplog
        #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
        #option  mysql-check user haproxy
        server  myrabbit1 192.168.137.200:1883 check weight 1 maxconn 2000  
        server  myrabbit2 192.168.137.200:1884 check weight 1 maxconn 2000  
        server  myrabbit3 192.168.137.200:1885 check weight 1 maxconn 2000 
        #使用keepalive检测死链
        option  tcpka  
    #rabbitmq 服务端负载均衡
    listen  rabbitmq_server
        #访问的IP和端口(前面ip=0代表任何ip都可访问)
        bind  0.0.0.0:5677 
        #网络协议
        mode  tcp
        #负载均衡算法(轮询算法)
        #轮询算法:roundrobin
        #权重算法:static-rr
        #最少连接算法:leastconn
        #请求源IP算法:source 
        balance  roundrobin
        #日志格式
        option  tcplog
        #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
        #option  mysql-check user haproxy
        server  myrabbit1 192.168.137.200:5672 check weight 1 maxconn 2000  
        server  myrabbit2 192.168.137.200:5673 check weight 1 maxconn 2000  
        server  myrabbit3 192.168.137.200:5674 check weight 1 maxconn 2000 
        #使用keepalive检测死链
        option  tcpka  
    #rabbitmq 管理界面负载均衡
    listen  rabbitmq_admin
        #访问的IP和端口(前面ip=0代表任何ip都可访问)
        bind  0.0.0.0:8000  
        #网络协议
        mode  http
        #负载均衡算法(轮询算法)
        #轮询算法:roundrobin
        #权重算法:static-rr
        #最少连接算法:leastconn
        #请求源IP算法:source 
        balance  roundrobin
        #日志格式
        option  tcplog
        #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
        #option  mysql-check user haproxy
        server  myrabbit1 192.168.137.200:15672 check weight 1 maxconn 2000  
        server  myrabbit2 192.168.137.200:15673 check weight 1 maxconn 2000  
        server  myrabbit3 192.168.137.200:15674 check weight 1 maxconn 2000 
        #使用keepalive检测死链
        option  tcpka  

    3.创建容器

    docker run -it -d -p 5677:5677 -p 8100:8100 -p 8000:8000 -p 1887:1887 -v /data/docker/haproxy/8100:/usr/local/etc/haproxy --name haproxy01 --privileged --net=rabbtimanet haproxy

    端口 8100 :HAProxy 管理界面

    端口 8000:RabbitMQ 管理界面

    端口 5677:RabbitMQ 服务

    端口 1887:RabbitMQ 的 MQTT 插件服务

    到此,已经配置完毕。

    效果图如下:

     

     

     

     

    遇到的问题:

    1.目前 haproxy 是只是单机,需要考虑集群?

    2.Docker 安装 haproxy 时,提示 global 中配置了 chroot 等有地址路径的设置时,提示没法创建文件、目录

  • 相关阅读:
    c语言----- 冒泡排序 for while do-while 递归练习
    c语言----实战植物大战僵尸
    c语言-----劫持系统03
    c语言-----劫持自己02
    c语言-----劫持原理01
    win10神州网信政府版去掉屏保
    将WebApi发布到IIS上(IIS6.0)(转)
    关于Logstash中grok插件的正则表达式例子
    说说看板在项目中的应用
    解决Gradle报错找不到org.gradle.api.internal.project.ProjectInternal.getPluginManager()方法问题
  • 原文地址:https://www.cnblogs.com/hujunmin/p/15769757.html
Copyright © 2011-2022 走看看