软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮 件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy 会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
配置: # vi haproxy.cfg
配置内容如下:
global
#全局设置
log
127.0.0.1 local0
#日志输出配置,所有日志都记录在本机,通过local0输出
#log 127.0.0.1 local1
notice
#log
loghost local0 info
ulimit-n
82000 #设置每个进程的可用的最大文件描述符
maxconn 4096
#最大连接数
chroot /usr/local/haproxy
#改变当前工作目录
uid
99 #所属运行的用户uid
gid
99
#所属运行的用户组
daemon
#以后台形式运行ha-proxy
nbproc 3
#启动2个ha-proxy实例
pidfile
/usr/local/haproxy/run/haproxy.pid
#pid文件位置
debug
#调试模式,输出启动信息到标准输出
#quiet #安静模式,启动时无输出
defaults
#默认设置
log
global
log 127.0.0.1
local3
#日志文件的输出定向
mode
http
#所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
option
httplog
#日志类别,采用httplog
option httpclose
#每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现
option dontlognull
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http
Header中获得客户端ip
option redispatch
retries
2
#3次连接失败就认为服务器不可用,主要通过后面的check检查
maxconn 2000
#最大连接数
balance
roundrobin
#负载均衡算法
stats
uri
/haproxy-stats #haproxy
监控页面的访问地址,可通过http://ip/haproxy-stats访问
contimeout 5000
#连接超时时间
clitimeout 50000
#客户端连接超时时间
srvtimeout 50000
#服务器端连接超时时间
listen app-balancer
0.0.0.0:80
mode
http
# log 127.0.0.1
local3
#cookie ServerID
insert nocache
cookie
ServerID prefix
cookie
JSESSIONID prefix
capture request header
Cookie len 200
capture
request header X-Forwarded-For len
15
capture request header
Host len 15
capture request
header Referrer len 15
appsession JSESSIONID
len 52 timeout 1080000
balance roundrobin
option
httpchk GET /ok.jsp HTTP/1.0
#健康检查
server app_1
192.168.0.243:8080 cookie app1 minconn 100 maxconn 40960 check inter 5000
rise 2 fall 5 weight 2
server app_2 192.168.0.242:8080 cookie app2 minconn 100 maxconn 40960
check inter 2000 rise 2 fall 5 weight
2
server app_4
192.168.0.245:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000
rise 2 fall 5 weight 1
#option forwardfor except
192.168.0.159
option
forwardfor
stats
enable
stats uri
/haproxy-stat
stats realm
"test_123 monitor"
stats
auth admin:admin
重新打开配置文件haproxy.cfg,留意最下部分的均衡主机选项
listen
localhost
0.0.0.0:1080
#运行的端口及主机名
mode http
option httpchk GET
/index.htm
#用于健康检测的后端页面
server s1 127.0.0.1:3121 weight 3
check #后端的主机 IP &权衡
server s2
127.0.0.1:3122 weight 3 check #后端的主机 IP
&权衡
在实验中,我们的的后端是 squid 分开了2个端口在同一台服务器上。
以其中一项为例:
server s1 127.0.0.1:3121 weight 3 check
s1
是可自己定义的服务器别名
127.0.0.1:3121 服务器的IP地址以及端口号
weight
3
所能分配到请求的高低权衡,数字越大分配到的请求数就越高
check
接受 haproxy 的定时检查,以确定后端服务器的健康情况。
如需配置虚拟主机,相当简单,紧需修改 localhost 为你虚拟主机的的域名,加到haproxy配置中, 再为其分配后端服务器的参数即可。
例:
listen www.x1.com 0.0.0.0:1080
#运行的端口及主机名
mode http
option httpchk GET
/index.htm
#用于健康检测的后端页面
server s1 127.0.0.1:3121 weight 3
check #后端的主机 IP &权衡
server s2
127.0.0.1:3122 weight 3 check #后端的主机 IP &权衡
listen www.x2.com 0.0.0.0:1080
#运行的端口及主机名
mode http
option httpchk GET
/index.htm
#用于健康检测的后端页面
server s1 127.0.0.1:3121 weight 3
check #后端的主机 IP
&权衡
server s2 127.0.0.1:3122 weight 3
check #后端的主机 IP &权衡
保存配置后重新加载,即可生效,刷新管理页面也可看到新的虚拟主机。
反复测试,得出其结果:
Haproxy
单独进行均衡负载的性能最强,超过了Nginx。
然而 Nginx + Haproxy
的搭配性能最弱,应该是跟通过了2层反向代理有关。
所以想用 Haproxy 替代 Nginx
所自带的均衡负载功能将会令性能打折。
但虽然如此 Haproxy 对均衡负载功能远比 Nginx
成熟,例如session粘贴,cookies 引导等都是 nginx
所没有的。
可根据需要而选择搭配。
相关启动参数介绍
#./haproxy –help //haproxy相关命令参数介绍.
haproxy -f <配置文件>
[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist...]
-d 前台,debug模式
-D daemon模式启动
-q 安静模式,不输出信息
-V 详细模式
-c 对配置文件进行语法检查
-s 显示统计数据
-l 显示详细统计数据
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用后台模式,程序跑在前台
-sf <pidlist> 程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后
-st <pidlist> 程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后
附:一个比较简单的配置文件内容
global
log
127.0.0.1 local0
maxconn 4096
chroot
/usr/local/haproxy
uid
99
gid
99
daemon
nbproc
1
pidfile
/usr/local/haproxy/haproxy.pid
debug
#quiet
defaults
log 127.0.0.1
local3
mode http
option httplog
option
httpclose
option
dontlognull
option
forwardfor
option
redispatch
retries
2
maxconn
2000
balance
roundrobin
contimeout
5000
clitimeout
50000
srvtimeout
50000
listen webinfo :1080
mode http
balance roundrobin
option httpclose
option forwardfor
server phpinfo1 192.168.18.2:10000 check weight 1 minconn 1
maxconn 3 check inter 40000
server phpinfo2 127.0.0.1:80 check
weight 1 minconn 1 maxconn 3 check inter 40000
listen webmb :1081
mode http
balance roundrobin
option httpclose
option forwardfor
server webmb1 192.168.1.91:10000 weight 1 minconn 1 maxconn 3
check inter 40000
server webmb2 127.0.0.1:10000 weight 1 minconn
1 maxconn 3 check inter 40000
listen stats :8888
mode http
transparent
stats uri / haproxy-stats
stats realm Haproxy \
statistic
stats auth
admin:admin
原文地址:http://www.cnblogs.com/wjoyxt/p/3766284.html