|
1.安装 # tar zcvf haproxy-1.3.20.tar.gz # cd haproxy-1.3.20 # make TARGET=linux26 PREFIX=/usr/local/haproxy #将haproxy安装到/usr/local/haproxy # make install PREFIX=/usr/local/haproxy 2.配置 安装完毕后,进入安装目录配置文件,默认情况下目录里是没有.cfg配置文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到usr/local/haproxy下。 # cd /usr/local/haproxy # vi haproxy.cfg8 s1 V2 p( M; {. }
6 V% ]+ k7 v- b& e2 S 默认文件内容如下:3 s5 A4 F4 X0 ^- @8 ]: \
# this config needs haproxy-1.1.28 or haproxy-1.2.1
5 E7 Z+ Y# c) O! S& d
3 U) r7 {$ H& Q3 Z global
- t! b3 G( }, d5 U- Y* L. Zlog 127.0.0.1 local04 Q! @4 |8 R$ H( R
log 127.0.0.1 local1 notice
2 o* I5 d& Y( v6 _#log loghost local0 info
8 ^9 W2 u+ Z8 V4 O) o4 _% ~4 Pmaxconn 4096
# i" u% J: G, y# I1 l( N/ u: zchroot /usr/share/haproxy" q; |4 Y; i" ]+ f' i/ `& q
uid 994 |* H! |( V" S+ z* _ ^
gid 99, y0 ^. E: J8 p" T0 i. y6 i
daemon
5 w1 h6 H. {: A7 O5 O#debug
9 m" o' `( ]7 Z! s ~#quiet
* O+ C+ D' v! V% [4 s
5 ]3 w+ Y8 o" P7 p jdefaults6 |- N, t4 y5 b
log global1 s& V) Z% k) i% Q5 d
mode http
& u5 U: k/ n" y, X! c$ b" x/ ]# ]option httplog) B" }' g" V* \+ T
option dontlognull0 S3 \" i6 Q3 D8 Q, ^
retries 3* d6 X5 I, c. E, O7 ^
redispatch
" ^5 l5 ^' Z& j: Z. gmaxconn 2000 {/ k8 m' g, ~$ _$ V0 H3 Y
contimeout 50005 I) i, `! W' I3 {- ^
clitimeout 50000
$ L3 }: n0 `9 [: ysrvtimeout 50000
0 {+ h; ?9 }7 |! l2 }3 I g" c) A+ U
listen appli1-rewrite 0.0.0.0:100016 c+ A/ N) i4 ~+ [
cookie SERVERID rewrite$ M4 d' h4 C8 E; M8 F9 u# \
balance roundrobin: Q7 E4 {) t+ x6 W2 Z/ d$ |
server app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
$ O5 M! ?' v: Rserver app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 52 S; N5 }1 J7 {* O) R
server app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 54 Y5 ]7 |6 v/ i7 s
server app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 52 f0 n; k# x( l- g4 G2 X
5 p) U& ^3 _) ~. A1 y% F6 zlisten appli2-insert 0.0.0.0:10002: E N/ G* {) G% e$ V9 m6 @
option httpchk
/ p( L' p- |3 bbalance roundrobin0 g. w1 }- ~2 Z2 r z
cookie SERVERID insert indirect nocache K ^) ]! m( ^) }% ~) V2 y. O; G
server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 32 X- z8 q7 y4 C" a& C r) M8 C" q
server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3
4 ?, w0 D! g# r4 m5 Q0 Zcapture cookie vgnvisitor= len 32
2 d$ w+ q+ ^; V+ d8 }1 ~) s6 O) f3 T6 a& ^$ S/ r' f
option httpclose # disable keep-alive. ^. @% q8 d0 J8 ?
rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address- b( I6 O, {' A1 g: E" n
. H$ @. }8 b% [8 g/ d! C
listen appli3-relais 0.0.0.0:10003, y' F2 X# U( A. [' o2 g& N
dispatch 192.168.135.17:808 ^6 O$ ~* B8 M* w# ?! ~
2 ]5 W# Y( j3 Z6 ^# v7 g9 T. X5 u, Blisten appli4-backup 0.0.0.0:10004, W c# R1 R ?8 v& p, p
option httpchk /index.html
, K; }" A$ ]0 i# W' [option persist
: ~! k# P6 `2 U% g% L' w: Z qbalance roundrobin
6 Y7 N3 P0 S( d' H4 p% y2 Qserver inst1 192.168.114.56:80 check inter 2000 fall 32 N' O" Z3 ~, m5 c0 H: y B
server inst2 192.168.114.56:81 check inter 2000 fall 3 backup
' [( Q. @6 _ D# V+ U! s' A B }
, j+ d+ E' i" Ilisten ssl-relay 0.0.0.0:8443! D$ T: f( A3 ^* O5 j
option ssl-hello-chk9 ?# L0 E5 N% _0 y
balance source& e: I( m6 Y! ^' P! Y# c0 F& e
server inst1 192.168.110.56:443 check inter 2000 fall 3- `1 C1 I8 r R: k9 O
server inst2 192.168.110.57:443 check inter 2000 fall 3
2 K9 T& o0 s. _8 gserver back1 192.168.120.58:443 backup
4 F) h. N% [2 ?7 Q0 x/ d: E8 ~" w- Q, ^& R8 Y0 K: f" }& z
listen appli5-backup 0.0.0.0:10005; f3 a. k8 I$ D8 {4 M7 \5 u# h) P5 M
option httpchk *
+ T. k9 ?, u3 t! _balance roundrobin, ]: @4 f' R7 X4 O" Z( R* m
cookie SERVERID insert indirect nocache
$ z6 J1 Q) N2 n( q3 q4 N' N8 A3 oserver inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
/ C: `* m2 J9 Hserver inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3
6 K) x. C( E6 M9 Y6 H% F1 ]server inst3 192.168.114.57:80 backup check inter 2000 fall 3. N0 q- ~6 M( _/ S3 M
capture cookie ASPSESSION len 32
- B# W7 e. h, V, L4 R# @! `srvtimeout 20000
+ Z- x/ P: |5 ]: O; T7 T" w0 O) G1 r4 T3 u/ {+ z: e, E
option httpclose # disable keep-alive
; A, }8 R, |6 A# d9 l( r3 S q7 x$ a' hoption checkcache # block response if set-cookie & cacheable
0 {- S$ o1 d1 H; m( J9 m5 ~- I8 P$ }2 `; _! H/ G+ G G
rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address( _( S0 u9 x2 w7 j( U/ G* ]
1 w; s2 b: g9 F: _# ~
errorloc 502 http://192.168.114.58/error502.html* c- J- }0 r' k* `- [
errorfile 503 /etc/haproxy/errors/503.http
8 q6 I% k. j# j m, U* _4 w5 v% q6 k9 \) A6 L. ~
/ x9 v( M7 m! ]5 F" z
$ ?! Y# @; b% e) P$ d& [根据实际需求,更改配置文件,我的配置如下 global #全局设置 log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出 #log loghost local0 info maxconn 4096 #最大连接数 chroot /usr/local/haproxy uid 99 #所属运行的用户uid gid 99 #所属运行的用户组 daemon #以后台形式运行haproxy nbproc 2 #启动2个haproxy实例 pidfile /usr/local/haproxy/haproxy.pid #将所有进程写入pid文件 #debug #quiet
5 H2 E7 t* e# u( j2 c. g# @( h3 P
defaults #默认设置 #log global log 127.0.0.1 local3 #日志文件的输出定向 mode http #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发 option httplog #日志类别,采用httplog option dontlognull option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现 retries 3 #3次连接失败就认为服务器不可用,主要通过后面的check检查 option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器 maxconn 2000 #最大连接数 stats uri /haproxy-admin #haproxy 监控页面的访问地址 contimeout 5000 #连接超时时间 clitimeout 50000 #客户端连接超时时间 srvtimeout 50000 #服务器端连接超时时间 stats auth Frank:Frank #设置监控页面的用户和密码:Frank
" X* ^& ^& f$ i+ |" L stats hide-version #隐藏统计页面的HAproxy版本信息9 _5 u4 Q: x5 r
# W4 X% f0 f& A o+ |
5 ?# R) R3 i) { M
frontend http-in #前台 bind *:80 mode http option httplog log global default_backend htmpool #静态服务器池
! n3 T2 D9 o+ H4 ?1 C2 |
backend htmpool #后台 balance leastconn#负载均衡算法- d) Q% o6 q7 a1 T& t4 W; Q; d9 r
option httpchk HEAD /index.htm HTTP/1.0 #健康检查 server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3 server web2 10.16.0.10:8085 cookie 2 weight 3 check inter 2000 rise 2 fall 3 [; N' a) \; ^4 j: }& g
#cookie 1表示serverid为1,check inter 1500 是检测心跳频率
1 b, B% C4 G" ~. i: e' \3 D% I #rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
* `- \1 f0 r2 N
' b# B3 n4 m8 Q4 a# U6 L3.加上日志支持' D# i; v" u) `. Y y% ?4 F" |& ^
# vim /etc/syslog.conf 在最下边增加
* v. U; F; `# wlocal3.* /var/log/haproxy.log# h y7 r, J, v% c% p, f
local0.* /var/log/haproxy.log # w, D3 _6 c0 M1 |1 |1 T+ F5 V
#vim /etc/sysconfig/syslog 修改: SYSLOGD_OPTIONS="-r -m 0" 重启日志服务service syslog restart 3 }7 R7 u* Y. ~7 G
4.设置开机启动 为了方便系统在开机时加载,还可以创建启动脚本:
/ g& a0 l7 i- Z' Q# vim /etc/rc.d/init.d/haproxy 内容如下: #! /bin/sh
. W, x* j0 ?& W7 ^" t! I4 A( F/ Qset -e* ]- U2 z; j+ t' ~3 v' j
! U! a: {8 m8 MPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
- H6 I8 j6 |$ p) M0 ^' i1 J$ c+ {PROGDIR=/usr/local/haproxy' W# K" c# ~; L9 u# F. a/ S
PROGNAME=haproxy: ]6 c& A W, t3 w
DAEMON=$PROGDIR/sbin/$PROGNAME" n- G/ s& Y/ p% {
CONFIG=$PROGDIR/$PROGNAME.conf9 d9 g6 A3 N, _; k8 C2 M
PIDFILE=$PROGDIR/$PROGNAME.pid8 x: m4 m' N- j
DESC="HAProxy daemon" G: \' ?; S( Y# }
SCRIPTNAME=/etc/init.d/$PROGNAME
- `9 A& ?" u% S1 I4 }
' ^" ~' V( C+ F% A# Gracefully exit if the package has been removed.
5 x$ `5 U' T3 P" etest -x $DAEMON || exit 0
" V9 f% f, Z3 g6 K2 L4 ^4 b2 q- u4 t( @8 k5 e! y. X
start()9 ?! o( ^! j& K1 E0 Z
{8 h, g4 x4 S0 P# K6 l
echo -n "Starting $DESC: $PROGNAME"" o6 l1 s- f6 f. g5 T
$DAEMON -f $CONFIG
" T1 G4 i* i2 O! ~2 ^ echo "."9 P/ h! s% o5 S' e
}
O2 o1 E1 g* U+ ~
, o/ w* I- u7 U8 z! wstop()
! G1 {" E* z8 h2 A9 L{
5 C. G! C& L" u; g3 y- J echo -n "Stopping $DESC: $PROGNAME"2 a7 J) N2 t+ D2 T& m) |3 t( ^1 G
haproxy_pid=cat $PIDFILE
# n1 O% F) S( N; `- U m kill $haproxy_pid* L! U7 F4 p' S2 ~5 }% l
echo "."
' F0 Y# x# a; p% U" h}0 o" G4 X5 [( \8 v6 T
9 E0 I, s2 @. A2 hrestart()2 w4 ]2 L/ K) {+ B' {; a
{; I n( m! |) H# `
echo -n "Restarting $DESC: $PROGNAME"
; |; l# Y. O4 K* R! N $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
1 f& O' I2 W6 ] w( } echo "."
: J$ i5 v$ b2 E}
3 E4 o6 {" I% p* r F: e9 |1 P0 ~% d# z' l
case "$1" in
* K. q& k/ x- C" D start)
# }& h8 E# x/ }* d start0 }- p5 z5 S/ X8 E
;;
) j( \1 \. n% B! M4 {! a$ d( e stop)
) p4 N, h8 h& |. D9 u0 R# J stop: S" t" \" K# F( @
;;: D4 D' J# w# O+ R2 W) t
restart)1 y; V; J ] g' P$ L5 n- `
restart
+ A4 d# H$ i/ s! M3 Q ;;
. T$ o6 B$ R- w/ r# `+ F, i* I, F *)) n. Q# a/ }# d D/ G# f
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
- I- i9 {4 O7 y0 n1 h, N* H# G exit 19 ^% N/ R8 b. f/ {$ B3 ?( e5 Q
;;0 e, i# S' S* ?- l6 \; u
esac exit 0
9 k- ^# u& C: N/ R/ H保存后赐予可执行权限0 R) k G* F! A
# chmod +x /etc/rc.d/init.d/haproxy 就可以使用 service haproxy start|stop|restart 来控***务的启动停止跟重启。
' M, I) j) W7 T6 P" m8 M并通过以下命令加载到开机服务启动列表
$ e* Y+ W# ], U) _& Z) i1 h c1 i; v# chkconfig --add haproxy " B8 t/ L- N, K
5.启动服务 启动服务:* y6 s( {4 u5 Q* [7 C/ T# B! G
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg 重启服务:
6 \/ x1 Y) J. Q/ g# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid` (没有换行) 停止服务:
, R7 j4 r7 y; u1 [# killall haproxy
2 `- V) [; ?& D# y" l6.举例 在浏览器中输入haproxy监控地址:http://10.16.0.246:1080/haproxy-admin,如图所示 
在浏览器输入haproxy设置的对外访问地址:http://10.16.0.244/,如图所示
' F, V. ~# W8 n7 a2 i, [ |