|
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.cfg1 a' Q+ ?( B [6 Y, o
9 c- X" O+ J9 }0 P2 c
默认文件内容如下:# m9 J5 B# O% P) K2 l
# this config needs haproxy-1.1.28 or haproxy-1.2.1% M5 C8 t9 L. d: |8 D$ F+ D
2 e% _% t) D+ ?1 p& }4 o6 y global6 r# M/ q- |! l1 K- |1 v
log 127.0.0.1 local01 _5 I2 b+ N* E7 r! S4 {
log 127.0.0.1 local1 notice8 ^3 J0 r$ _6 t5 L/ C- P
#log loghost local0 info: ]# f! f/ F7 Y5 F1 \1 X! E7 {0 V
maxconn 4096
: ?; J0 r$ _/ P5 \) d7 R ~chroot /usr/share/haproxy
* r& |$ [" l4 U) z4 E* w, s# V7 puid 99. h. q- A; G3 T/ u L
gid 996 f& i9 D* z/ m. g9 T
daemon* D( G4 a% g1 v- g; Y7 ~0 O
#debug/ q* X$ w, t- ?. d- r
#quiet4 X3 `+ R, ~- Q+ X
S' l- A% U4 Udefaults
* `: s8 ^8 O3 Hlog global
! C( ^2 d2 ?! I- _, ?$ E0 o! zmode http5 c1 {) N. R& ]& ~# L+ F3 @/ U7 X
option httplog% _9 ^- M! e0 e7 C2 u C. a4 k
option dontlognull- h+ I9 e$ a6 o
retries 33 z. M, G3 s, ^
redispatch' l& ~" N |; ^* W. ~
maxconn 2000
( P8 y, X9 V G1 b# g" t1 x% `contimeout 50000 h! h! X# B. J" a3 p% q
clitimeout 500009 [/ C% @, `: P2 B- M' T, R
srvtimeout 500005 B! P8 U6 e5 r* m2 F: L7 ?1 k
7 D5 {* S" |' `) P, T6 l: Jlisten appli1-rewrite 0.0.0.0:10001
$ x) o5 y u9 ocookie SERVERID rewrite
% w0 F, t, _5 {& ]: s4 p* Ibalance roundrobin
+ ~; @+ t8 D/ M* M) Oserver app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
$ y1 a4 Z0 f. {server app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 51 y1 ~8 y: \& [8 |+ y1 m: x
server app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5
5 [* S' i/ u% ]+ k0 fserver app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 5& ~; ^3 x7 ^' V% B6 s C6 a H
2 M {; g6 J% f" I: E" `. }0 {listen appli2-insert 0.0.0.0:10002$ r- V$ [' q3 m7 z
option httpchk
4 }% u- e1 k* C' w2 wbalance roundrobin- a6 P( o( z }7 [( B
cookie SERVERID insert indirect nocache
. o- u' F8 U, `, h. [server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
! s: _7 J3 Z3 t7 b# ]9 L! Vserver inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3& h4 E+ w! Y N2 a" Q7 j1 E9 g
capture cookie vgnvisitor= len 320 r/ \. J" ?$ y1 ^) R% m
1 A& a' c! V: g" {) X$ n+ C
option httpclose # disable keep-alive4 M, c3 L# n$ w ^
rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address
3 c: [ c0 A5 T& Y0 j$ x8 E( X8 Q2 K8 `
listen appli3-relais 0.0.0.0:10003
2 ~0 }% J+ p; G2 [dispatch 192.168.135.17:80
7 A y8 U% L; \) N+ c" w5 b5 w; w. G$ j4 ~/ k
listen appli4-backup 0.0.0.0:10004
3 e6 l& p" s$ B4 {8 r, |$ U# {option httpchk /index.html+ i; T7 y; {& q. _
option persist3 Q- M! {% |3 h% r h
balance roundrobin
1 a6 u3 \* S x- dserver inst1 192.168.114.56:80 check inter 2000 fall 3+ F, z; L2 Q: Q L+ G% Y6 a
server inst2 192.168.114.56:81 check inter 2000 fall 3 backup
$ o8 _4 ]8 k+ G8 A# n% p4 l! M1 n
% P0 j: [5 l2 llisten ssl-relay 0.0.0.0:8443, K* }+ H% C+ I
option ssl-hello-chk
7 `; I7 G4 Q+ }& q1 ybalance source
9 S! w, G1 r7 [7 ]server inst1 192.168.110.56:443 check inter 2000 fall 3" k8 H9 r# B/ R( T
server inst2 192.168.110.57:443 check inter 2000 fall 3- m1 D8 R. X/ r2 D4 H/ b& q
server back1 192.168.120.58:443 backup6 _. ]. X, j p6 m* o/ U! E2 L
7 @& \6 ?3 h4 n" J- w( l! Y& |, W4 g6 p
listen appli5-backup 0.0.0.0:10005
5 q: H( W( l/ N+ k3 J! Toption httpchk *
- R( J2 V) i) N$ H+ t. Dbalance roundrobin- x! t; j8 k5 X! g; r4 v
cookie SERVERID insert indirect nocache8 P& Z5 u4 j7 O0 j* e
server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3% v! Q0 q7 |& |0 b: J; [! }
server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3+ g9 Q/ p+ ?$ D4 H4 T
server inst3 192.168.114.57:80 backup check inter 2000 fall 33 A6 g$ B* p, G% |8 A+ \
capture cookie ASPSESSION len 32
2 n. _1 x6 I% l6 g8 T. d" Jsrvtimeout 20000; j6 @( u* d$ o X
4 }; q! ^ ?& r1 Loption httpclose # disable keep-alive) R7 d- i) F, F8 \' E5 G0 @, R$ K
option checkcache # block response if set-cookie & cacheable. P0 j( F5 } _: B
. i! H; P( C s$ }$ W" X2 G. \
rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address. I+ y' {8 j& I( f6 U' n' a
4 Y. G/ I+ M+ perrorloc 502 http://192.168.114.58/error502.html9 c4 \6 T, W. @/ `5 k
errorfile 503 /etc/haproxy/errors/503.http5 H) s1 b% r" D9 d5 b
9 ]7 q5 n. p. }; J% s2 M
7 S& M& A: h, D2 j6 D5 l4 s/ Q/ I6 U" q$ ?
根据实际需求,更改配置文件,我的配置如下 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
) a6 [8 e2 R; S* Q; y0 E: p2 o
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
' [/ V. d; o! l3 d stats hide-version #隐藏统计页面的HAproxy版本信息
' w! n; O. M Z% _) j6 R' ~& C; B1 M6 z! g( C
7 z( y. m3 f4 o" ^
frontend http-in #前台 bind *:80 mode http option httplog log global default_backend htmpool #静态服务器池
6 g) S1 R4 g+ p3 ^% T1 j9 j# H& N
backend htmpool #后台 balance leastconn#负载均衡算法6 t8 ` j; Y& {- V; U+ V4 ^
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 ; R$ r+ u, _; A
#cookie 1表示serverid为1,check inter 1500 是检测心跳频率 5 z! \; Z1 ~+ a9 h8 d, d, n" w3 y8 ?1 V
#rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重4 L0 _* v0 ]5 F6 E6 M8 [/ d
7 a4 C: K; Y' @+ O7 Q y4 g2 h! E- m
3.加上日志支持
2 j# c/ g: n+ k# vim /etc/syslog.conf 在最下边增加. |- r% V5 }1 E2 y7 c( ~
local3.* /var/log/haproxy.log
. X0 B9 F; A7 Q- O) Ylocal0.* /var/log/haproxy.log 0 P n0 G( P% e
#vim /etc/sysconfig/syslog 修改: SYSLOGD_OPTIONS="-r -m 0" 重启日志服务service syslog restart
$ J# W5 W7 S5 \, B v- w4.设置开机启动 为了方便系统在开机时加载,还可以创建启动脚本:, [) _* h6 t. A2 @ \
# vim /etc/rc.d/init.d/haproxy 内容如下: #! /bin/sh& S0 D: T- k2 i
set -e
/ E& P: Q$ e: X6 {3 E
# Q. F1 [! Q0 I6 gPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin& b$ d" h7 [7 {2 ^
PROGDIR=/usr/local/haproxy
0 }& W: ]4 P, N) t fPROGNAME=haproxy
6 g3 m1 u D" n8 N8 g3 U9 [DAEMON=$PROGDIR/sbin/$PROGNAME" e# z* V8 ~% n( n. L/ F
CONFIG=$PROGDIR/$PROGNAME.conf. B# Z5 J3 [2 `9 D' g( {
PIDFILE=$PROGDIR/$PROGNAME.pid
% }) O7 K0 c7 W, G! U: ] s. c6 `DESC="HAProxy daemon"8 r8 c+ T2 x( @+ ?3 V7 G
SCRIPTNAME=/etc/init.d/$PROGNAME" a. n; M# K0 _4 k Q
8 z8 _- ]3 a* z% S# l: M3 t# Gracefully exit if the package has been removed." M! H4 x3 ^6 P$ b O5 I) F) f1 _
test -x $DAEMON || exit 0# w X6 m1 p# l
1 U5 s' w3 J, {# u h, ?! hstart()
0 m6 L- D$ ?3 K1 N; O! a, `9 q{ D! G, P7 T* [5 v' ^$ t3 j
echo -n "Starting $DESC: $PROGNAME"- J- R4 t" `& W7 t4 n3 }# T4 x- s
$DAEMON -f $CONFIG
8 {7 t) C1 S+ W8 X8 N2 \6 j1 y echo "."% ^0 }- `5 T1 t; I3 S
}
. u! L( Y( ~$ J3 L0 R% t: S4 W$ I* o' ~- G
stop()
- ^# d: O* {4 Y0 t; F3 `{
& H$ _* F( o" ]6 t. z echo -n "Stopping $DESC: $PROGNAME"
. X$ d: i2 H4 r" u$ ?- t1 z; ] haproxy_pid=cat $PIDFILE
- } C/ n$ H7 }8 h4 j8 n! D$ Y kill $haproxy_pid
; s5 B9 ~! \! X* }8 q+ C echo "."
- Q# B2 A) W, k [1 u6 p}
) u) u7 _, v2 R. x1 [
6 X7 W7 M3 p$ ?* D% jrestart()
: n3 _. ], P3 ~8 B{
1 Y8 y, J; z2 K. Y/ _2 t, n- X echo -n "Restarting $DESC: $PROGNAME"
# b _0 ?% A' ]& |- T8 @+ Q $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
, k1 |+ F9 D& A6 | echo ".") a% E5 E' e Y. _& k7 X- b1 P
} G1 `4 c+ @9 u( e, z. \/ T
. ]$ m; u# e4 m6 rcase "$1" in3 C; }* U f8 [+ ~6 O: o) Q7 x: Q. c
start)
9 Q- o% o- @) V, x9 {5 J s start2 j# b4 p- Z" {0 {" l _" j
;;
" }1 \1 P3 [3 I, @) e stop)- q5 Z! k, [' s g
stop
$ J- x! K4 A; f% F3 H' E; V' Q ;;
, L1 Z, Z I5 B' c( C restart)
; m+ ^8 ~/ S3 q, P) ~ restart' ^0 {: K7 L7 g
;;+ K- ~5 A. G) [' _
*)
M/ v3 f& y; m. P* E0 @ echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
" C. \# ^' P8 N S d exit 1
9 c6 n+ [/ f+ ^* M8 k ;;
& t" K/ { T9 S3 z: oesac exit 0
1 t1 s" u! ~ @. f, F保存后赐予可执行权限
: r* h" s6 O$ d0 `# chmod +x /etc/rc.d/init.d/haproxy 就可以使用 service haproxy start|stop|restart 来控***务的启动停止跟重启。
8 [& H1 h4 j( S: a1 ?# r2 l; Z并通过以下命令加载到开机服务启动列表8 w1 x0 @- L, T" P6 s" ~
# chkconfig --add haproxy
/ s( f" G! s8 C: L% y5.启动服务 启动服务:
( H1 Q# J6 o& G# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg 重启服务:" f: [ c6 }0 ]" A8 t+ w
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid` (没有换行) 停止服务:, O+ |" J# ~' K9 b
# killall haproxy
$ Q& s5 {% S- d5 _% t; |6.举例 在浏览器中输入haproxy监控地址:http://10.16.0.246:1080/haproxy-admin,如图所示 
在浏览器输入haproxy设置的对外访问地址:http://10.16.0.244/,如图所示
& @6 h K3 N' q% R- g |