• Haproxy搭建 Web 群集实现负载均衡


    Haproxy搭建 Web 群集实现负载均衡

    1 Haproxy HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

    1.1 HAProxy的主要特性

    ●可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;

    ●最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;

    ●支持多达8种负载均衡算法

    ●支持Session会话保持,Cookie的引导;

    ●支持通过获取指定的url来检测后端服务器的状态;

    ●支持虚机主机功能,从而实现web负载均衡更加灵活;

    ●支持连接拒绝、全透明代理等独特的功能;

    ●拥有强大的ACL支持,用于访问控制;

    ●支持TCP和HTTP协议的负载均衡转发;

    ●支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;

    1.2 HAProxy负载均衡策略

    常见的有如下8种:

    (1)roundrobin,表示简单的轮询

    (2)static-rr,表示根据权重

    (3)leastconn,表示最少连接者先处理

    (4)source,表示根据请求源IP

    (5)uri,表示根据请求的URI,做cdn需使用;

    (6)url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name (7)hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

    (8)rdp-cookie(name),表示根据cookie(name)来锁定并哈希每一次TCP请求。

    1.3 LVS、Nginx、HAproxy的区别 ●LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;

    ●LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;

    ●LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;

    ●HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;

    ●Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。

    2 Haproxy搭建 Web 群集

    Haproxy服务器:192.168.30.105

    Nginx 服务器1:192.168.30.107

    Nginx 服务器2:192.168.30.109

    客户端:192.168.30.115

    2.1 haproxy 服务器部署

    2.1.1 关闭防火墙

    ​
    systemctl stop firewalld
     
    setenforce 0
     
     

    2.1.2 内核配置(实验环境可有可无)

    vim  /etc/sysctl.conf
     
    net.ipv4.tcp_tw_reuse = 1
     
    #启用端口重用,允许一个服务器进程在进行完一个连接后立即再次使用相同的连接端口。
    net.ipv4.ip_local_port_range = 1024 65023
     
    #本地端口范围。指定可用于本地TCP/UDP端口的端口号范围。
    net.ipv4.tcp_max_syn_backlog = 10240
     
    #TCP半连接请求的最大长度,如果超过这个值,对方就会收到RST响应。
    net.ipv4.tcp_max_tw_buckets = 400000
     
    #系统中同时保持TIME_WAIT状态的最大数量,一般设置为TCP建立连接次数的2倍。
    net.ipv4.tcp_max_orphans = 60000
     
    #系统中允许存在的最大orphan连接数(没有对应的socket文件),这个数字越大,系统支持的TCP连接数也越多。
    net.ipv4.tcp_synack_retries = 3
     
    #尝试发送SYN+ACK应答报文的最大次数。
    net.core.somaxconn = 10000
     
    #服务器套接字排队长度的最大值

    2.1.3 安装 Haproxy

    //编译安装
    yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
     
    tar zxvf haproxy-2.2.11.tar.gz
    cd haproxy-2.2.11/
    make TARGET=linux31 PREFIX=/usr/local/haproxy 
    make install PREFIX=/usr/local/haproxy
     
    ---------------------参数说明---------------------------------------------------------------------------
    TARGET=linux26  #内核版本,
     
    #使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

    安装依赖环境

    编译安装HAproxy

    2.1.4 Haproxy服务器配置

    useradd -M -s /sbin/nologin haproxy
    mkdir -p /usr/local/haproxy/conf
    cd /usr/local/haproxy/conf

    HAProxy 的配置文件共有 5 个域:

    global:用于配置全局参数
    ●default:用于配置所有frontend和backend的默认属性
    ●frontend:用于配置前端服务(即HAProxy自身提供的服务)实例
    ●backend:用于配置后端服务(即HAProxy后面接的服务)实例组
    ​
    ●listen:frontend + backend的组合配置,可以理解成更简洁的配置方法,frontend域和backend域中所有的配置都可以配置在listen域下
    global          #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
        log 127.0.0.1 local1 warning
     
        daemon                                      #让haproxy以守护进程的方式工作于后台
        option  dontlognull         #不在日志中记录空连接
        option  abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        maxconn 20000                       #最大连接数,“defaults”中的值不能超过“global”段中的定义
        timeout queue 3s        #默认客户端请求在队列中的最大时长
        timeout connect 1s          #默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容
     
    frontend http-in
        bind *:80
     
        acl url_jsp  path_end  -i .jsp
     
        use_backend tomcat_server if url_jsp
     
        default_backend nginx_server
     
    backend nginx_server
        balance  roundrobin
        option httpchk  GET /test.html
     
        server ngx01 192.168.1.101:80 check inter 2000 fall 3 rise 2
        server ngx02 192.168.1.100:80 check inter 2000 fall 3 rise 2
     
    backend tomcat_server
        balance  roundrobin
        option http-server-close
        cookie HA_STICKY_dy insert indirect nocache
        server tomcat01 192.168.1.102:8080 cookie tomcat01 check inter 2000 fall 3 rise 2
        server tomcat02 192.168.1.150:8080 cookie tomcat02 check inter 2000 fall 3 rise 2
     
    listen stats
        bind *:1080
        stats enable
        stats refresh 30s
        stats uri /stats
        stats realm HAProxy\ Stats
        stats auth admin:admin

    2.1.4 添加为系统服务

    添加执行的权限

    chmod +x /etc/init.d/haproxy

    将 /etc/init.d/haproxy 脚本添加到 chkconfig 管理工具中

    chkconfig --add /etc/init.d/haproxy
    chkconfig --level 35 haproxy on
    chkconfig --level 35 haproxy on
    service haproxy start

    开启haproxy服务

    2.2 节点服务器部署

    systemctl stop firewalld
    setenforce 0
     
    yum install -y pcre-devel zlib-devel gcc gcc-c++ make 
     
    useradd -M -s /sbin/nologin nginx
     
    cd /opt
    tar zxvf nginx-1.12.0.tar.gz -C /opt/
     
    cd nginx-1.12.0/
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
     
    make && make install
     
    --192.168.1.100---
    echo "this is kgc web" > /usr/local/nginx/html/test.html
     
    --192.168.1.101---
    echo "this is benet web" > /usr/local/nginx/html/test.html
     
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
     
    nginx      #启动nginx 服务

    ---Nginx 服务器1:192.168.1.100---

    ---Nginx 服务器1:192.168.1.101---

    2.3 测试 Web群集

    在客户端使用浏览器打开 http://192.168.30.150 ,不断刷新浏览器测试负载均衡效果


    __EOF__

  • 本文作者: 旧巷g
  • 本文链接: https://www.cnblogs.com/sl08/p/17712884.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Django-文件上传
    行业话题 | 天天坐地铁,你知道BIM在地铁中的应用吗
    css圣杯布局和双飞翼布局
    字节系列「夏日游乐场 周周赚88元」进度与骰子次数R语言回归分析
    PHP排序sort()、asort() 和 ksort() 的区别及用法
    VitualBox安装增强功能实现无缝模式和拖放功能(踩坑点记录汇总)
    asdfsdfsdfd
    [​DuckDB] 多核算子并行的源码解析
    ToBeWritten之基于ATT&CK的模拟攻击:闭环的防御与安全运营
    深度探索Copilot插件
  • 原文地址:https://www.cnblogs.com/sl08/p/17712884.html