HAproxy可以实现基于TCP(四层 例如:SSH,SMTP,MYSQL)和HTTP(七层 例如:web服务器)应用的代理软件,同时也可以作为负载均衡器使用,并且是开源完全免费的。HAproxy完全可以支持数以万计的并发链接,它的工作模式可以将其简单而安全地整合到当前的服务架构中,同时可以保护你的WEB服务器不暴露到网络上(设置成代理来实现的 通过VIP将后端的web服务器隐藏到内网中)。
HAProxy有以下几个优点
1、免费开源,稳定性也非常好,其稳定性可以与硬件级别的F5 BIG-IP相媲美。
2、负载带宽非常大。根据官方文档可知,HAproxy可以跑满10Gbps的带宽,对于软件级负载均衡器来说,是相当惊人的。
3、支持链接拒绝。因为保护一个链接保持打开状态的开销是很低的,有时我们需要防止蠕虫攻击,也就是通过限制它们的连接打开来防止它们的危害,可以用于防止DDoS攻击,这也是其他负载均衡器所不具备的。
4、支持全透明代理(已具备硬件防火墙的典型特点)。可以用客户端IP地址或任何其他地址来链接后端服务器,这个特性仅在Linux 2.4/2.6 内核打了cttproxy补丁后才可以使用。
5、支持TCP层(四层)的负载均衡。HAproxy现在多用于线上的MySQL集群环境,常用它作为MySQL(读)负载均衡,不过在后端的MySQL Slaves数量超过10台时性能不如LVS,所以更推荐推荐LVS+Keepalived。一般情况下都是前端通过LVS做四层负载 HAProxy做后端web服务器的负载 这样性能会比单独用HAProxy高很多
6、强大的监控服务。自带强大的监控服务器状态的页面,在生产环境中可结合Nagios来实现邮件或短信报警。
7、能支持多种的负载均衡算法,现在为止可以支持8种
8、支持虚拟主机。
haproxy 的配置文件(haproxy.conf)详解
1.global
- local0日志设备,info日志级别,日志界别有:err warning info debug 4种。这个配置表示使用127.0.0.1上的rsyslog服务中的local0日志设备
- maxconn 20480 最大并发数
- daemon 后台模式
- nbproc:进程数
- user:需要些用户名
- gid:需要写数字
- pidfile:pid文件、
2.defaults
- mode:http tcp模式,http模式和health模式(健康检查已经废弃)
- retries:3 设置后端服务器的失败重试次数,如果连接失败的次数超过这里设置的值,haproxy就会对后端服务器标记不可用,也可以在后面进行设置
- timeout connect 10s 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,也可以使用其他单位换算
- timeout client 20s 设置成功连接客户端发动数据时最长等待时间,………………
- imeout server 30s 设置服务器端回应客户端数据发送的最长等待时间…………
- timeout check 5s 设置对后端服务器的检测超时时间,…………
3.frontend
- frontend关键字定义了一个名字为www的前端虚拟节点
- bind格式:bind [:
] interface interface可选项,用来指定网络接口的名称,只在linux上使用 - option httplog 默认情况下,haproxy日志是不记录http请求的,这样不方便haproxy的排错和监控,此项启动日志记录http请求
- option forwardfor 后端服务器需要获得客户端的真实ip,就需要配置此参数
- option httpclose: 此项表示客户端和服务器端完成一次连接请求后,haproxy将主动关闭tcp连接。这是对性能非常有帮助的参数
- log global: 表示使用全局的日志配置,
- default_backend: 指定默认的后端服务器池,也就是指一组后端真是服务器,而真是服务器组将在backend段定义。这里的htmpool就是一个后端服务器组。
4.backend
- backend关键字定义了一个名为htmpool的后端真是服务器组。
- mode http http模式
- option redispatch:此参数用于cookie保持的环境中。在默认的环境下,HAProxy会将其请求的后端服务器的serverID插入到cookie中,以保证会话的session持久性。而如果后端的服务器出现故障,客户端的cookie是不会刷新的,这就会出现问题。此时如果设置此参数,将会将客户端的请求强制定向到另外一台监控的后端服务器上,一保证服务器的正常。
- option abortonclose:如果设置此参数,在服务器负载很高的情况下,自动结束当前队列处理时间比较长的连接
- balance:此关键字用来定义负载均衡算法:常用的算法有:
- 1.roundrobin:基于权重轮训
- 2.static-rr:静态权重轮训,运行时调整其服务器权重不会生效
- 3.source:ip算法,ip_hash,同一个客户端的请求转发在特定的后端服务器上
- 4.leastconn:此算法会将新的连接请求转发到最少连接数目的后端服务器,在回话时间较长的环境中使用,比如:数据库负载均衡等,不适合会话短的环境
- 5.uri:此算法会对部分或者整个URL进行hash运算,在经过与服务器的总权重相除,最后转发到某台匹配的后端服务器上
- 6.uri_param:此算法会根据URL路劲中的参数进行转发,这样可保证在后端真是服务器数量不变时,同一个用户的请求始终分发到一台机器上
- 7.hdr:此算法根据http头进行转发,如果指定的http头名称不存在,则使用roundrobin算法进行策略转发。
- cookie:表示允许向cookie插入SERVERID,每台服务器的SERVERID可在下面的server关键字中使用cookie关键字定义
- option httpchk:此选项表示启用http的服务状态监测功能。haproxy作为一个专业的负载均衡器,他支持对backend部分指定的后端服务器节点的健康检查,以保证在后端backend中某个节点不能服务时,吧从frotend段进来的客户端请求分配至backend中其他健康节点上,从而保证整理服务的可用性。option httpchk具体用法如下:
|
|
method:常用的请求的方法:OPTIONS, GET,HEAD,一般用head方式,head仅检查response的head是不是状态码200,head相对get更快,更简单
uri:表示要检测的url地址,200为正常,其他都为错误
version:指定心跳检测时的http版本号
- server:定义后端真实服务器,不能用于default和frontend部分,使用格式:
|
|
参数含义:
:后端服务器指定一个内部名称,随便写 [param*]:常用参数:
check:表示启用对此后端服务器执行健康检查
inter:设置健康状态检查的时间间隔,单位毫秒
rise:社会中重故障状态转换正常状态的次数
fall:设置后端服务器从正常状态转换至不可用状态的检查次数:
cookie:指定后端服务器设定的cookie值。
weight:权重,值1-256,0代表不参与负载均衡
backup:设置后端服务器的备份服务器,仅仅在后端所有真是服务器均不可用的情况下次啊启用
5.listen
- listen关键字定义了一个admin_stats的实例,
- stats refresh:设置haproxy监控统计页面自动刷新的时间。
- stats uri:设置haproxy监控统计页面的URL路劲,通过ip:port/haproxy-status查看,路劲自己随意设置
- stats realm:设置登录haproxy统计页面的密码框上的文本信息
- stats auth:设置登录haproxy统计页面的用户名和密码。可以设置多个,设置多行
- stats hide-version:用来隐藏统计页面上haproxy的版本信息
- stats admin if TURE:在1.4.9版本以后,可以在监控页面上手工启动或者禁用后端服务器