经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » Hadoop » 查看文章
Haproxy搭建 Web 群集实现负载均衡
来源:cnblogs  作者:旧巷g  时间:2023/9/19 8:38:13  对本文有异议

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

  1. ?
  2. systemctl stop firewalld
  3. 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. #服务器套接字排队长度的最大值

image-20230917195804314

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

安装依赖环境

image-20230917200054111

编译安装HAproxy

image-20230917200354617

image-20230917200648356

image-20230917200728488

2.1.4 Haproxy服务器配置

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

image-20230917200834975

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

  1. global:用于配置全局参数
  2. default:用于配置所有frontendbackend的默认属性
  3. frontend:用于配置前端服务(即HAProxy自身提供的服务)实例
  4. backend:用于配置后端服务(即HAProxy后面接的服务)实例组
  5. ?
  6. listenfrontend + 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.1.101:80 check inter 2000 fall 3 rise 2
  18.   server ngx02 192.168.1.100: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.1.102:8080 cookie tomcat01 check inter 2000 fall 3 rise 2
  24.   server tomcat02 192.168.1.150: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

image-20230918171357006

2.1.4 添加为系统服务

image-20230918171924505

添加执行的权限

chmod +x /etc/init.d/haproxy

image-20230918172236960

将 /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

image-20230918192603693

开启haproxy服务

image-20230918192625393

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.1.100---
  11. echo "this is kgc web" > /usr/local/nginx/html/test.html
  12. --192.168.1.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.1.100---

image-20230918192810969

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

image-20230918192857008

2.3 测试 Web群集

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

image-20230918192946681

image-20230918193000247

原文链接:https://www.cnblogs.com/sl08/p/17712884.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号