软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当 前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
HAProxy的优点:
一、免费开源,稳定性也是非常好,这个可通过我做的一些小项目可以看出来,单Haproxy也跑得不错,稳定性可以与LVS相媲美;
二、根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express),这个作为软件级负载均衡,也是比较惊人的;
三、HAProxy可以作为MySQL、邮件或其它的非web的负载均衡,我们常用于它作为MySQL(读)负载均衡;
四、自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警,这个也是我非常喜欢它的原因之一;
五、HAProxy支持虚拟主机。
HAProxy的8种算法
一、roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
二、static-rr,表示根据权重,建议关注;
三、leastconn,表示最少连接者先处理,建议关注;
四、source,表示根据请求源IP,建议关注;
五、uri,表示根据请求的URI;
六、url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name
七、hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
八、rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
yum 方式安装
yum -y install haproxy 自动安装完成
updatedb 更新本地搜索缓存库
locate haproxy 找到 /usr/sbin/haproxy
/usr/sbin/haproxy -v 如果能出现版本,那么就是安装成功的。
源代码安装
tar -zvxf haproxy-1.5.8.tar cd haproxy-1.5.8 more README ( GCC between 2.95 and 4.8. Others may work, but not tested.) uname –a make TARGET=linux2628 ARCH=x86_64 USE_OPENSSL=1 ADDLIB=-lz make install PREFIX=/usr/local/haproxy 如果编译出错,我们需要回滚一下编译的文件。 make clean
haproxy 配置
1. 创建一个 haproxy 用户,通过 cat /etc/passwd | grep haproxy 获取我们的uid 和 gid
2. 配置
global log 127.0.0.1 local0 maxconn 4096 #默认最大连接数
chroot /usr/local/haproxy uid 502 gid 502 daemon #以后台形式运行
haproxy nbproc 1 #进程数量(可以设置多个进程提高性能)
pidfile /usr/local/haproxy/logs/haproxy.pid #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
defaults log 127.0.0.1 local3 mode http #所处理的类别 (#7层 http;4层tcp )
option httplog option httpclose option dontlognull option forwardfor option redispatch retries 2 #2次连接失败就认为服务不可用,也可以通过后面设置
balance roundrobin #默认的负载均衡的方式,轮询方式
timeout connect 5000 #连接超时
timeout client 50000 #客户端超时
timeout server 50000 #服务器超时
listen admin_stats bind 0.0.0.0:8080 #监听端口
option httplog #采用http日志格式
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息
listen web_proxy 114.215.174.147:80
server web1 120.55.82.2:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server web2 121.41.7.219:80 cookie app1inst2 check inter 2000 rise 2 fall 5
#serverid为web1
#check inter 1500是检测心跳频率
#rise 3是3次正确认为服务器可用,
#fall 5是5次失败认为服务器不可用重
3. 需要创建 /usr/local/haproxy/logs 文件夹, 否则会有警告
4. 见3.2.6 使用方式
haproxy 使用
启动服务: # /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf 重启服务: # /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf -st `cat /usr/local/haproxy/logs/haproxy.pid` (没有换行) 停止服务: # killall haproxy
haproxy 自动保留session id