[整理人:张子萌 2010-4]
一、概述
测试环境
操作系统CentOS
VIP地址:192.168.11
负载到两台web地址:192.168.1.2和192.168.1.3
WEB服务器备用地址:192.168.1.4
二、下载、安装
下载地址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.5.tar.gz
# tar zxvf haproxy-1.4.5.tar.gz
# cd haproxy-1.4.5
# make TARGET=linux26 PREFIX=/usr/local/haproxy
编译过程中TARGET=linux26 为系统内核版本为2.6。
# make install PREFIX=/usr/local/haproxy
# mkdir –p /usr/local/haproxy/logs
# groupadd –g650 haproxy
# useradd -u650 -g haproxy haproxy
三、配置
默认配置可以参见编译环境中examples/haproxy.cfg
本文手动编辑配置文件
# /usr/local/haproxy
# vi haproxy.cfg
global
log 127.0.0.1 local0 #使用本机的syslog来记录log
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096 # ulimit-n必须是maxconn的两倍以上
chroot /usr/local/haproxy
uid haproxy
gid haproxy
daemon
nbproc 2 #设置haproxy的并发进程
pidfile /usr/local/haproxy/logs/haproxy.pid
#debug
#quiet
defaults
log global
mode http
option httplog
option httpclose #启用被动的http连接关闭
option dontlognull
option forwardfor #apache日志转发功能
option redispatch # 不会连接到宕机服务器
option nolinger #在连接关闭时立即清理连接,减少FIN_WAIT1连接
retries 3 #web无法访问的重试次数
maxconn 2000
balance roundrobin
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen test 192.168.1.1:80
mode http #监听模式”tcp”也即4层,和”http”,即7层
stats enable #打开状态监控
stats auth admin:admin #进入状态监控页面
stats refresh 5s
stats uri /haproxy-stats #状态监控后缀
balance roundrobin #负载算法 roundrobin(动态加权轮循)source(加权源地址哈希)
cookie JSESSIONID prefix #处理session
option forwardfor #apache日志转发功能
option httpchk HEAD /robots.txt HTTP/1.0 #健康检测连接和协议
option forwardfor # 插入 X-Forwarded-For 头部
server web1 192.168.1.2 weight 3 minconn 100 maxconn 900 check inter 20000 fall 3
# inter 健康检测间隔 20000微妙
server web2 192.168.1.3 weight 3 minconn 100 maxconn 900 check inter 20000 fall 3
server web3 192.168.1.4 weight 3 check inter 20000 fall 3 backup
errorfile 400 /etc/haproxy/errors/400.http #根据错误号,解析错误页面
四、启动
命令在/usr/local/haproxy/sbin.
haproxy -f <配置文件> [-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p] [-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里的进程发送FINISH信号,这个参数放在命令行的最后
-st 程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后但配置后,死活不会输出日志,还没找到解决方法,网上有些,但行不通:
建议第一次运行建议使用前台模式便于调试
./haproxy –f /usr/local/haproxy/haproxy.cfg –d
五、优化
a)日志部分
健康检测会产生大量日志,建议屏蔽掉。
apache不记录健康检查和监控的log
SetEnvIf Request_URI “^//robots.txt$” dontlog
CustomLog output/logs/cookie_logs/%w/cookie_log cookielog env=!dontlog
六、常见问题
a) 启动失败
使用./haproxy –f /usr/local/haproxy/haproxy.cfg –d启动系统报错如下:
Starting haproxy: [ALERT] 015/191034 (15631) : Starting proxy webfarm: cannot bind socket…on both load balancers
或
[ALERT] 056/103843 (1358) : Starting proxy www-balancer: cannot bind socket
解法方法:
修改# vi /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
保存结果,使结果生效
# sysctl –p