HAProxy负载均衡技术

软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。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

原文地址:https://www.cnblogs.com/aqicheng/p/10299456.html