当前位置:编程学堂 > Haproxy搭建Web集群实现负载均衡

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

  • 发布:2023-10-05 04:29

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

1 Haproxy HAproxy 是一个提供高可用性、负载均衡以及基于 TCP 和 HTTP 的应用程序的代理。它是一个免费、快速且可靠的解决方案。 HAProxy非常适合并发大型(超过10000个并发开发)网站,通常需要会话持久或七层处理。 HAProxy 的操作模型可以轻松、安全地集成到现有架构中,同时保护 Web 服务器不暴露在互联网上。

1.1 HAProxy主要特点

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

●最多可同时维持40,000-50,000个并发连接,单位时间最大处理请求数为20,000个,最大处理能力可达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)来源,表示请求源IP

(5) uri,表示根据请求的URI进行CDN需要;

(6) url_param,表示‘balance url_param’根据请求的URL参数需要一个URL参数名称 (7) hdr(name),表示根据HTTP请求头锁定每个HTTP请求;

(8)rdp-cookie(name),表示根据cookie(name)对每个TCP请求进行锁定和散列。

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

●LVS是IP负载均衡技术,可以实现4层,无法实现基于目录、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 停止防火墙
 
设定强度 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
 
#系统允许的最大孤立连接数(没有对应的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/
使 TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy------------------参数说明---------------------------------------- -------------------------------------------------- ------
TARGET=linux26 #内核版本,
 
#使用uname -r查看内核,如:2.6.18-371.el5。此时该参数使用TARGET=linux26;如果内核大于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:用于配置前端服务(即HAProxy本身提供的服务)实例
●backend:用于配置后端服务(即HAProxy后面连接的服务)实例组
​
●listen:前端+后端的组合配置,可以理解为更简单的配置方式。前端域和后端域中的所有配置都可以在监听域中配置
global               #全局配置,主要用于定义全局参数,是进程级配置,通常与操作系统配置相关
 记录 127.0.0.1 local1 警告
 
 daemon                                   #让haproxy作为守护进程在后台工作
 option dontlognull #日志中不记录空连接
 option abortonclose #当服务器负载很高时,自动结束当前队列中已处理较长时间的链接
 maxconn 20000                         #最大连接数,“defaults”中的值不能超过“global”部分中的定义
 timeout queue 3s #默认客户端请求在队列中的最大持续时间
 timeout connect 1s #haproxy默认与服务器建立连接的最大时间。新版本中替换了Contimeout。该参数向后兼容
 
前端 http-in
 绑定*:80
 
 acl url_jsp 路径结束 -i .jsp如果 url_jsp 则使用_backend tomcat_server
 
 默认后端 nginx_server
 
后端 nginx_server
 平衡循环赛
 选项 httpchk GET /test.html
 
 服务器 ngx01 192.168.1.101:80 检查国际米兰 2000 年下降 3 上升 2
 服务器 ngx02 192.168.1.100:80 检查国米 2000 年下降 3 上升 2
 
后端 tomcat_server
 平衡循环赛
 选项 http-server-close
 cookie HA_STICKY_dy 插入间接 nocache
 服务器 tomcat01 192.168.1.102:8080 cookie tomcat01 检查国米 2000 年下降 3 上升 2
 服务器 tomcat02 192.168.1.150:8080 cookie tomcat02 检查国米 2000 年下降 3 上升 2
 
听统计数据
 绑定*:1080
 统计启用
 统计刷新30秒
 统计 uri /stats
 统计领域 HAProxy\ 统计
 统计授权管理员:admin

2.1.4添加为系统服务

添加执行权限

chmod +x /etc/init.d/haproxy

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

chkconfig --add /etc/init.d/haproxy
chkconfig --level 35 haproxy 开启
chkconfig --level 35 haproxy 开启
服务haproxy启动

启用haproxy服务

2.2 节点服务器部署

systemctl 停止防火墙
设定强度 0
 
yum install -y pcre-devel zlib-devel gcc gcc-c++ make
 
useradd -M -s /sbin/nologin nginx
 
光盘/选择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
 
制作 && 制作安装
 
--192.168.1.100---
echo "这是 kgc 网站" > /usr/local/nginx/html/test.html
 
--192.168.1.101---
echo "这是 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,不断刷新浏览器来测试负载均衡效果

相关文章