zoukankan      html  css  js  c++  java
  • Haproxy负载均衡

    Haproxy负载均衡

    所需软件参见docker仓库: https://hub.docker.com/_/haproxy

    方案:

    1.先自己打包一个

    Dockerfile:

    FROM haproxy:1.7
    
    MAINTAINER silly <http://github.com/hunterhug>
    
    COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
    
    docker build -t dhaproxy  -f Dockerfile .
    

    2.跑起haproxy

    docker run -it --rm --name my-haproxy dhaproxy -f /usr/local/etc/haproxy/haproxy.cfg
    

    haproxy.cfg如下:

    #---------------------------------------------------------------------
    # Global settings
    #---------------------------------------------------------------------
    global
        log    127.0.0.1 local2          ###[err warning info debug]
        #chroot  /usr/local/haproxy-1.7.3
        pidfile  /var/run/haproxy.pid   ###haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
        maxconn  4000                   ###最大连接数,默认4000
        daemon                          ###创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"
    
    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
        #mode   tcp            ###默认的模式,tcp是4层,http是7层,health只会返回OK 若是混合模式则 mode 不需要设置
        log    global           ###采用全局定义的日志
        option  dontlognull     ###不记录健康检查的日志信息
        option  httpclose       ###每次请求完毕后主动关闭http通道
        option  httplog         ###日志类别http日志格式 混合模式 此处还需要加上 tcplog
        #option  forwardfor      ###如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
        option  redispatch      ###serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        timeout connect 10s   #default 10 second timeout if a backend is not found
        timeout client 10s   ###客户端连接超时
        timeout server 10s   ###服务器连接超时
        maxconn     60000       ###最大连接数
        retries     3           ###3次连接失败就认为服务不可用,也可以通过后面设置
    
    ########统计页面配置########
    listen admin_stats
        # 监听端口
        bind 0.0.0.0:8089
        # 启用状态监控
        stats enable
        mode http
        log global
        # 统计页面URL
        stats uri /stats
        # 统计页面密码框上提示文本
        stats realm Haproxy Statistics
        # 统计页面用户名和密码设置
        stats auth admin:admin
        # 隐藏统计页面上HAProxy的版本信息
        #stats hide-version
        #当通过认证才可管理
        stats admin if TRUE
        #统计页面自动刷新时间
        stats refresh 30s
    
    ########GRPC配置#################
    listen lb
    bind 0.0.0.0:40882
    mode tcp
    option tcplog
    log global
    maxconn 3000
    balance leastconn
    server l-40883 0.0.0.0:40883  weight 1 rise 2 fall 3
    server l-40884 0.0.0.0:40884  weight 1 rise 2 fall 3
    server l-40885 0.0.0.0:40885  weight 1 rise 2 fall 3
    

    3.启动端口为40883-40885一模一样的服务,然后请求使用Haproxy的监听40882端口,会自动负载均衡.

    4.如果要重启gRPC服务,只需一个个替换,因为我们的服务都是docker启动的,所以重启较简单.这样又实现了灰度发布.

    打开http://127.0.0.1:8089/stats,帐号密码:admin,我们可以看到服务情况:

    感谢朋友们,因为查了很多资料,都要实现代码, 查看Nginx了文档后,发现现在支持gRPC还不是很好,最后发现TCP支持,Haproxy做得很好.

  • 相关阅读:
    欧拉公式
    isap的一些想法
    错误合集
    Hello World
    PAT (Advanced Level) Practice 1068 Find More Coins
    PAT (Advanced Level) 1087 All Roads Lead to Rome
    PAT (Advanced Level) 1075 PAT Judge
    PAT (Advanced Level) 1067 Sort with Swap(0, i)
    PAT (Advanced Level) 1017 Queueing at Bank
    PAT (Advanced Level) 1025 PAT Ranking
  • 原文地址:https://www.cnblogs.com/nima/p/11751262.html
Copyright © 2011-2022 走看看