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

目录

[1 Haproxy](#1 Haproxy)

[1.1 HAProxy的主要特性](#1.1 HAProxy的主要特性)

[1.2 HAProxy负载均衡策略](#1.2 HAProxy负载均衡策略)

[1.3 LVS、Nginx、HAproxy的区别](#1.3 LVS、Nginx、HAproxy的区别)

[2 Haproxy搭建 Web 群集](#2 Haproxy搭建 Web 群集)

[2.1 haproxy 服务器部署](#2.1 haproxy 服务器部署)

[2.1.1 关闭防火墙](#2.1.1 关闭防火墙)

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

[2.1.3 安装 Haproxy](#2.1.3 安装 Haproxy)

[2.1.4 Haproxy服务器配置](#2.1.4 Haproxy服务器配置)

[2.1.4 添加为系统服务](#2.1.4 添加为系统服务)

[2.2 节点服务器部署](#2.2 节点服务器部署)

[2.3 测试 Web群集](#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 关闭防火墙

复制代码
​
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.30.107:80 check inter 2000 fall 3 rise 2
    server ngx02 192.168.30.109: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.30.107:8080 cookie tomcat01 check inter 2000 fall 3 rise 2
    server tomcat02 192.168.30.109: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服务

!!!注意!!!

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

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

--192.168.80.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.30.107---

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

2.3 测试 Web群集

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

相关推荐
茶杯梦轩7 分钟前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
可观测性用观测云16 小时前
云原生网关 Ingress-Nginx 链路追踪实战:OpenTelemetry 采集与观测云集成方案
nginx·kubernetes
甲鱼92920 小时前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
Johny_Zhao1 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
用户962377954482 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机2 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机2 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954482 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star2 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954482 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全