1 Haproxy HAproxy 是一个提供高可用性、负载均衡以及基于 TCP 和 HTTP 的应用程序的代理。它是一个免费、快速且可靠的解决方案。 HAProxy非常适合并发大型(超过10000个并发开发)网站,通常需要会话持久或七层处理。 HAProxy 的操作模型可以轻松、安全地集成到现有架构中,同时保护 Web 服务器不暴露在互联网上。
●可靠性和稳定性非常好,可媲美硬件级的F5负载均衡设备;
●最多可同时维持40,000-50,000个并发连接,单位时间最大处理请求数为20,000个,最大处理能力可达10Git/s;
●支持多达8种负载均衡算法
●支持Session保持和Cookie引导;
●支持通过获取指定URL来检测后端服务器的状态;
●支持虚拟机主机功能,实现更灵活的Web负载均衡;
●支持连接拒绝、全透明代理等独特功能;
●具有强大的ACL支持访问控制;
●支持TCP、HTTP协议的负载均衡转发;
●支持客户端的keepalive功能,减少客户端与haproxy之间多次三向握手造成的资源浪费,允许在一个TCP连接中完成多个请求;
以下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检测。
Haproxy服务器:192.168.30.105
Nginx 服务器 1:192.168.30.107
Nginx 服务器 2:192.168.30.109
客户端:192.168.30.115
systemctl 停止防火墙
设定强度 0
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
#最大服务器套接字队列长度
安装依赖环境 编译并安装HAproxy HAProxy的配置文件共有5个域: 添加执行权限 chmod +x /etc/init.d/haproxy 在chkconfig管理工具中添加/etc/init.d/haproxy脚本 启用haproxy服务 ---Nginx服务器1:192.168.1.100--- ---Nginx服务器1:192.168.1.101--- 在客户端使用浏览器打开,不断刷新浏览器来测试负载均衡效果
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
2.1.4 Haproxy服务器配置
useradd -M -s /sbin/nologin haproxy
mkdir -p /usr/local/haproxy/conf
cd /usr/local/haproxy/conf
●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添加为系统服务
chkconfig --add /etc/init.d/haproxy
chkconfig --level 35 haproxy 开启
chkconfig --level 35 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服务
2.3 测试 Web 集群