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


    目录

    1 Haproxy

    1.1 HAProxy的主要特性

    1.2 HAProxy负载均衡策略

    1.3 LVS、Nginx、HAproxy的区别

    2 Haproxy搭建 Web 群集

    2.1 haproxy 服务器部署

    2.1.1 关闭防火墙

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

    2.1.3 安装 Haproxy

    2.1.4 Haproxy服务器配置

    2.1.4 添加为系统服务

    2.2 节点服务器部署

    2.3 测试 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 关闭防火墙

    1. systemctl stop firewalld
    2. setenforce 0

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

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

    2.1.3 安装 Haproxy

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

    安装依赖环境

    编译安装HAproxy

    2.1.4 Haproxy服务器配置

    1. useradd -M -s /sbin/nologin haproxy
    2. mkdir -p /usr/local/haproxy/conf
    3. cd /usr/local/haproxy/conf

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

    ●global:用于配置全局参数
    ●default:用于配置所有frontend和backend的默认属性
    ●frontend:用于配置前端服务(即HAProxy自身提供的服务)实例
    ●backend:用于配置后端服务(即HAProxy后面接的服务)实例组

    ●listen:frontend + backend的组合配置,可以理解成更简洁的配置方法,frontend域和backend域中所有的配置都可以配置在listen域下

    1. global #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
    2. log 127.0.0.1 local1 warning
    3. daemon #让haproxy以守护进程的方式工作于后台
    4. option dontlognull #不在日志中记录空连接
    5. option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
    6. maxconn 20000 #最大连接数,“defaults”中的值不能超过“global”段中的定义
    7. timeout queue 3s #默认客户端请求在队列中的最大时长
    8. timeout connect 1s #默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容
    9. frontend http-in
    10. bind *:80
    11. acl url_jsp path_end -i .jsp
    12. use_backend tomcat_server if url_jsp
    13. default_backend nginx_server
    14. backend nginx_server
    15. balance roundrobin
    16. option httpchk GET /test.html
    17. server ngx01 192.168.30.107:80 check inter 2000 fall 3 rise 2
    18. server ngx02 192.168.30.109:80 check inter 2000 fall 3 rise 2
    19. backend tomcat_server
    20. balance roundrobin
    21. option http-server-close
    22. cookie HA_STICKY_dy insert indirect nocache
    23. server tomcat01 192.168.30.107:8080 cookie tomcat01 check inter 2000 fall 3 rise 2
    24. server tomcat02 192.168.30.109:8080 cookie tomcat02 check inter 2000 fall 3 rise 2
    25. listen stats
    26. bind *:1080
    27. stats enable
    28. stats refresh 30s
    29. stats uri /stats
    30. stats realm HAProxy\ Stats
    31. stats auth admin:admin

    2.1.4 添加为系统服务

    添加执行的权限

    chmod   +x  /etc/init.d/haproxy

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

    1. chkconfig --add /etc/init.d/haproxy
    2. chkconfig --level 35 haproxy on
    3. chkconfig --level 35 haproxy on
    4. service haproxy start

    开启haproxy服务

    !!!注意!!!

    HAProxy默认使用端口80来监听HTTP流量

    2.2 节点服务器部署

    1. systemctl stop firewalld
    2. setenforce 0
    3. yum install -y pcre-devel zlib-devel gcc gcc-c++ make
    4. useradd -M -s /sbin/nologin nginx
    5. cd /opt
    6. tar zxvf nginx-1.12.0.tar.gz -C /opt/
    7. cd nginx-1.12.0/
    8. ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
    9. make && make install
    10. --192.168.80.100---
    11. echo "this is kgc web" > /usr/local/nginx/html/test.html
    12. --192.168.80.101---
    13. echo "this is benet web" > /usr/local/nginx/html/test.html
    14. ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    15. nginx #启动nginx 服务

                                                ---Nginx 服务器1:192.168.30.107---

                                                 ---Nginx 服务器1:192.168.30.109---

    2.3 测试 Web群集

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

  • 相关阅读:
    在爬虫的时候发现request 中的from data 是一串数据格式
    K8S-EverNote同步
    点云从入门到精通技术详解100篇-低重叠率三维点云配准及点云数据一体化处理系统开发
    GameStop熊市杀入NFT交易,老牌游戏零售商借Web3焕发第二春
    【面试题01】找出数组中的最长前缀
    【从0到1设计一个网关】基于Hystrix实现熔断降级
    HTML5期末大作业:美妆网页主题网站设计——清新的手工肥皂网站展示(4页)HTML+CSS+JavaScript
    Reactor And Gev 详解 通俗易懂
    fiddler无法信任根证书 安卓
    Milvus跨集群数据迁移
  • 原文地址:https://blog.csdn.net/2302_78835233/article/details/132917507