1. Haproxy概念
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这个功能。
2. Haproxy安装
直接通过yum进行安装,安装命令:yum -y install haproxy
3. Haproxy配置
实例:
其中
Check就是执行心跳检查
path_beg:是路径的前缀是什么
path_end:是路径的后缀是什么
注意:
一个Listen是由Frontend和Backend这两个绑定在一起使用的。
配置说明:
说明:
- haproxy的日志设置也可以发送到某一个机器单独保存
- 默认使用ulimit-n,这个很重要,一般情况不需要单独定义
说明: - ulimit-n 是根据maxconn、maxpipes两个设置进行自动计算
配置实例:
HAProxy日志记录设置:
有两种方式:
1.采用日志服务记录(通过rsyslog来执行)日志,需要在日志服务中设置
第一步:去/etc/rsyslog.conf中启动UDP和TCP日志,如图:
第二步:增加相关的日志设置
第三步:重启rsyslog服务,命令:systemctl restart rsyslog
第四步:设置/etc/haproxy/haporxy.cfg文件,如图:
这样交给rsyslog管理日志的设置就完成了。
2.自己直接设置日志
启用日志:
把上面的注释取消掉就OK。
日志记录事例:
4 Haproxy 代理配置
对Haproxy代理配置,包括四大块:Default、frontend、backend、listen,
4.1 bind
注意:
- 可以监听一个范围的端口
- 可以监听多个端口,以逗号隔开
4.2 balance
注意:
- balance是负载均衡的策略,很重要
- roundrobin与static-rr区别:对于新增加的服务,roundrobin是动态增加进来,而static-rr就是增加进来,也不会使用,除非重启
- roundrobin是根据权重进行轮询的,对于权重也可以动态进行调整,动态生效
- static-rr:是根据权重进行轮询的,是静态的,调整了权重,需要重启服务
- leastconn:使用连接数最小的服务,主要长连接的协议中,如:LDAP、SQL等
- uri:广泛用于后端服务器是缓存服务器,能够提高缓存利用率(它是通过哈希和取模计算,能够保证每一个连接落在同一服务器上)
- source与uri基本是一样的,都是通过哈希算法选择服务,而source哈希的是IP,uri哈希的是URL
其中URL格式如下:
4.3 mode
mode是用来指定haproxy的工作模式。
Haproxy有两种工作模式:
- http:http协议模式对应用程序进行深度分析,支持7层的过滤、处理和转换等机制。
- tcp:是haproxy在客户端和服务端之间建立一个全双工的连接,不会对应用层协议做任何检查,对于SSL、Mysql等都应使用此模式。
使用mode指定Haproxy模式,如图:
4.4 server
server是为listen和backend定义各个服务器,格式如下:
其中param参数说明:
4.5 use_backend
use_backend就是指定使用哪一个后端,格式如下:
4.6 stats
stats是用来查看Haproxy状态的,通过地址:http://114.67.234.74:7080/haproxy?stats 可以进行查看,需要进行设置,如下图:
stats不能用在前端,可以用在default、Listen、backend中,一般通过stats auth来增加权限,如上图。
stats uri 是用来改变访问状态的地址,默认是/haproxy?stats,可以通过stats uri进行设置
也可以访问状态的地址的端口进行设定,如下图:
stats hide_version 用来隐藏版本。
stats admin 是具有管理功能的,具体功能如下:
下面是Stats对应的参数设置:
总结统计页面输出命令有如下:
- stats enable
- stats uri
- stats realm
- stats auth
- stats admin
使用单独端口的配置如下:
listen statspage
bind:*:80
stats enable
stats auth admin:admin
stats admin if true
stats uri /admin?stats
4.7 自定义错误页面
Haproxy自定义错误页面主要有以下几个配置项:
errorfile
errorloc
errorloc302
其中errorfile格式 如下:
实例如下:
4.8 访问控制(http-request)
haproxy有两种访问机制:
- block
- http-request
这两个访问机制都依赖ACL
4.9 http-server-close
4.10 httpclose
option httpclose 就判断每一个连接中是否有Connection:close,如果没有,会自动增加,这样每一个连接就不是长连接。
4.11 redispatch
4.12 通过acl 进行重定向 redirect example
说明:
acl:用来定义具体的变量
redirect:根据变量来判断重定向,比如:redirect prefix https://mage.com.cn if login_page !secure
就是说如果进入的是登陆界面但是不是使用8080端口登陆的,就直接重定向到首页。
4.13 timeout connect
说明:设置连接超时时间
4.14 timeout client
说明:客户端非活动时间的设置,超过设置自动断开连接,和Web中的setion设置差不多。
4.15 timeout server
与客户端连接超时设置一样的
4.16 timeout http-keep-alive
4.17 timeout check