今天给伙伴们分享一下Haproxy 高可用代理详解,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
一、HAProxy 简介
-
官网:http://www.haproxy.com
-
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP的应用代理,支持虚拟主机,它是免费、快速并且可靠的一种负载均衡解决方案。适合处理高负载站点的七层数据请求。类似的代理服务可以屏蔽内部真实服务器,防止内部服务器遭受攻击。
1、HAProxy 特点和优点
- 支持原生SSL,同时支持客户端和服务器的SSL. https
- 支持IPv6和UNIX套字节(sockets)
- 支持HTTP Keep-Alive
- 支持HTTP/1.1压缩,节省宽带
- 支持优化健康检测机制(SSL、scripted TCP、check agent…)
- 支持7层负载均衡。
- 可靠性和稳定性非常好。
- 并发连接40000-50000个,单位时间处理最大请求20000个,最大数据处理10Gbps.
- 支持8种负载均衡算法,同时支持session保持。
- 支持虚拟主机。
- 支持连接拒绝、全透明代理。
- 拥有服务器状态监控页面。
- 支持ACL.
2、HAProxy 保持会话
- HAProxy为了让同一客户端访问服务器可以保持会话。有三种解决方法:客户端IP、Cookie以及Session 客户端的id
- HAProxy通过客户端IP进行Hash计算并保存,以此确保当相同IP访问代理服务器可以转发给固定的真实服务器。
- HAProxy依靠真实服务器发送客户端的Cookie信息进行会话保持。
- HAProxy将保存真实服务器的Session以及服务器标识,实现会话保持。(HAProxy只要求后端服务器能够在网络联通,也没有像LVS那样繁琐的ARP配置)
3、HAProxy 负载均衡算法
- HAProxy的balance8种负载均衡算法:
- roundrobin : 基于权重轮循。
- static-rr : 基于权重轮循。静态算法,运行时改变无法生效
- source : 基于请求源IP的算法。对请求的源IP进行hash运算,然后将结果与后端服务器的权重总数想除后转发至某台匹配服务器。使同一IP客户端请求始终被转发到某特定的后端服务器。
- leastconn : 最小连接。(适合数据库负载均衡,不适合会话短的环境)
- uri : 对部分或整体URI进行hash运算,再与服务器的总权重想除,最后转发到匹配后端。 http://www.qf.com/aa/bb/a.html
- uri_param : 根据URL路径中参数进行转发,保证在后端服务器数量不变的情况下,同一用户请求分发到同一机器。 /web /new
- hdr() : 根据http头转发,如果不存在http头。则使用简单轮循。
4、HAProxy主要工作模式
- tcp模式:该模式下,在客户端和服务器之间将建立一个全双工的连接,且不会对7层的报文做任何处理的简单模式。此模式默认,通常用于SSL、SSH、SMTP应用。
- http模式(一般使用):该模式下,客户端请求在转发给后端服务器之前会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。
二、HAProxy 安装及配置文件参数
1、HAProxy 安装
[root@edenluo.com ~]# yum -y install haproxy
2、HAProxy 环境
- haproxy 的配置文件通常分为三部分:
- global(全局配置部分)
- defaults(默认配置部分)
- listen (应用组件部分)
1、 HAProxy 配置文件详解
[root@edenluo.com ~]# vim /etc/haproxy/haproxy.cfg
####################全局配置#######################
#######参数是进程级的,通常和操作系统(OS)相关#########
global
maxconn 20480 # 默认最大连接数
log 127.0.0.1 local0 # 日志输出配置,所有日志都记录在本机系统日志,通过local0输出
log 127.0.0.1 local1 notice # notice 为日志级别,通常有24个级别(error warring info debug)
chroot /var/haproxy # chroot运行的路径
uid 99 # 所属运行的用户uid
gid 99 # 所属运行的用户组
daemon # 以后台形式运行haproxy
nbproc 1 # 进程数量(可以设置多个进程提高性能)
pidfile /var/run/haproxy.pid # haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
ulimit -n 65535 # ulimit的数量限制
#####################默认设置######################
##这些参数可以被利用配置到frontend,backend,listen组件##
defaults