马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
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.cfg# g' ?& w' J' T, m2 ^. f
( K7 c5 H8 e/ }1 Q2 Z2 j8 \: ^" m 默认文件内容如下:( x& J. h$ V+ U( j% x9 v
# this config needs haproxy-1.1.28 or haproxy-1.2.1
% D" a. k, H6 ~# m# X8 ~
: t( U% n" [0 C y- I9 J global
4 U7 M7 _1 I5 l4 r% |4 T s" Hlog 127.0.0.1 local0
# y8 v; p& A1 c3 M2 w% ?3 J1 Rlog 127.0.0.1 local1 notice1 e2 U6 W# l/ h0 d6 s2 P
#log loghost local0 info6 n. P0 ^+ B. C! V6 v/ \: V7 E/ b
maxconn 40968 f! }& \) F8 r$ C' I' b6 ^
chroot /usr/share/haproxy
+ N! f. [! {0 A* s5 S% s Auid 99
; F/ G* \! v0 V. |& |3 w8 jgid 99$ J8 F* [2 `. Q m
daemon
) H3 Y' D. s2 c0 I3 V7 D/ E: k#debug
( E9 ^. L9 I7 I7 Z#quiet
' l3 H) e% s* a1 o; z& F) S* i# b2 `& X% |) |: X x7 O. o
defaults; F, i9 G. }3 O) \7 _
log global* Q5 G" r" m6 N) j( j
mode http
7 T! o) A, x+ W6 g+ _3 d, |option httplog
( l! {1 i% V0 M- L2 doption dontlognull
* |" O$ h! D- h5 P' t1 dretries 33 X, V2 s: d( N( ^/ a: s R g
redispatch
, m( w+ t; S) X5 umaxconn 20007 Q/ L ~. _# y3 q
contimeout 5000
/ n& B: x! o, ~' p# Jclitimeout 500005 }; h. Y4 c7 U" }+ m$ Z
srvtimeout 50000
6 f: ]0 r; j0 F) W1 h8 L5 u0 s6 U5 E5 X6 g" E* X8 @5 j
listen appli1-rewrite 0.0.0.0:10001. g& U0 W6 t3 `
cookie SERVERID rewrite+ {8 C+ ?: r2 D) H! z
balance roundrobin
9 O0 d5 X; q; M& vserver app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5! ~& I( _( ~& |$ \; Y2 u/ b2 E
server app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 5
* o4 D( q6 q5 e5 d- k) T; mserver app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5* r3 g5 _( o! P" n
server app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 50 h3 D; E( |* a; C' c
4 L; U5 e5 s/ k0 Rlisten appli2-insert 0.0.0.0:10002
Q- S n$ y5 j0 F4 W. soption httpchk* O1 J+ O% X V, d8 O, w1 ^8 _
balance roundrobin1 u- P4 F n5 q% B3 a3 w% y) k' |# q
cookie SERVERID insert indirect nocache3 T9 y$ k! G7 l( X" m# A
server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
6 Y* _' [7 k7 ^; q( V+ ^( R$ ~5 qserver inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3
) d* H$ U2 m4 t" k3 Bcapture cookie vgnvisitor= len 32$ e! u$ B! f5 B+ A8 E
# H" x c- R1 ^" s& e
option httpclose # disable keep-alive/ c# h3 ?6 @2 K; v8 Y3 E
rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address
2 V4 A0 S8 X% D0 e% N' e) b$ _& G
# ^+ f7 w7 Y r% P; tlisten appli3-relais 0.0.0.0:10003
6 W1 U1 ]% K2 o/ r# O1 a$ |/ R. [dispatch 192.168.135.17:80
+ Y N* w$ V9 Z! x" V$ ?
: X' Z: r( R' ]; Q: [5 Llisten appli4-backup 0.0.0.0:100045 J+ ^% k( K: U& C7 k: X5 q
option httpchk /index.html' W4 I& w$ @0 H( ^
option persist
" e: }: y* |; y& _9 d; r7 |6 D% pbalance roundrobin7 W* { |( n D& O6 b4 l+ u# g
server inst1 192.168.114.56:80 check inter 2000 fall 3
" b9 k! @+ }5 e( @. W* x- pserver inst2 192.168.114.56:81 check inter 2000 fall 3 backup% S e" P6 F$ \: p4 H4 @
2 M0 m+ @* U& d$ nlisten ssl-relay 0.0.0.0:8443
% a- B; |; T. y( a- \option ssl-hello-chk
) v: L2 m0 o( c4 G9 B, v/ [4 Obalance source2 ^4 w/ I" S8 a" U/ `
server inst1 192.168.110.56:443 check inter 2000 fall 3
# X' O d: t) K' Z, Pserver inst2 192.168.110.57:443 check inter 2000 fall 3& E2 h7 V9 ^* z! Y- K* N
server back1 192.168.120.58:443 backup7 M$ x4 u+ b4 N1 g5 ]% `
/ i, n. i2 [$ F4 J
listen appli5-backup 0.0.0.0:10005+ _+ c1 M) U" c2 Z3 B+ Z
option httpchk *
. z' B# w0 I1 S8 Kbalance roundrobin4 f* Y/ O6 |( v
cookie SERVERID insert indirect nocache
1 W5 v! w/ `( y* l0 m1 Vserver inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
8 U* _1 V j2 w" z. B! r! hserver inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 37 d/ w% Z) s( ^. {
server inst3 192.168.114.57:80 backup check inter 2000 fall 3
: Y) S5 W9 l* m/ Q# L, ncapture cookie ASPSESSION len 32( m; O: D$ N, q# L/ K5 `
srvtimeout 20000
: O: X" c! n4 l7 h
+ t4 o& L$ f5 C$ uoption httpclose # disable keep-alive9 {1 P) h- Z. J0 X4 }
option checkcache # block response if set-cookie & cacheable
! N$ B# F- s. _3 G# P8 h
) j/ J3 d" Q' {* h" Arspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address& z s6 x2 M' V8 B% b4 L0 ?8 Y
0 \9 S/ \1 e" }4 m
errorloc 502 http://192.168.114.58/error502.html. x4 U7 y5 R9 u3 ]6 I# R2 S
errorfile 503 /etc/haproxy/errors/503.http
0 d" ?0 E g* D+ G6 p6 c& Y$ }8 P% ?1 P) T1 g; u6 C6 |! F
. v2 B5 s! a$ N4 R3 o/ L* ^! e A4 A Q4 }: I
根据实际需求,更改配置文件,我的配置如下 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 ) S7 H; g6 d' d7 K. U9 v8 z# Y
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
- G% m* Z* V6 L+ D5 |: M2 C, ~ stats hide-version #隐藏统计页面的HAproxy版本信息+ ]2 r( n% ?1 n3 Q
8 s; Y9 s( v( R5 ]6 O J# Q
# H! Z0 v. E; ?% q$ N) g
frontend http-in #前台 bind *:80 mode http option httplog log global default_backend htmpool #静态服务器池 ( E$ ?3 C) A2 Q7 Y' v
backend htmpool #后台 balance leastconn#负载均衡算法2 `; s" M" w6 E& o; k6 ^+ Z
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 9 H% B$ Z+ v. I3 U% n
#cookie 1表示serverid为1,check inter 1500 是检测心跳频率
5 m4 }: H6 _& ?( C& e #rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重. N3 h$ P/ M( H9 J( ]) Y" v5 _% ^
, _! i7 j4 z( ]. E
3.加上日志支持! z- o+ b# i: Z. c' U. S
# vim /etc/syslog.conf 在最下边增加: ]; ?3 t6 E) o% u$ z
local3.* /var/log/haproxy.log
: d, d+ p8 N" X3 ilocal0.* /var/log/haproxy.log . ]+ `* R' R& l! x2 X" V
#vim /etc/sysconfig/syslog 修改: SYSLOGD_OPTIONS="-r -m 0" 重启日志服务service syslog restart " l; i' B$ i7 d8 }! c9 `
4.设置开机启动 为了方便系统在开机时加载,还可以创建启动脚本:/ ~8 J, T9 \& W7 ]" I
# vim /etc/rc.d/init.d/haproxy 内容如下: #! /bin/sh- `7 R G- F0 [1 M) D4 R$ Y: [6 c% ^
set -e
* ^" L9 B+ X4 N8 r
$ ]+ r! W: K' |6 m' Q% i. @PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
! y% B$ ~' n- O2 bPROGDIR=/usr/local/haproxy! h4 e9 v/ o& f9 M
PROGNAME=haproxy
* N1 J e3 \" n1 c" \DAEMON=$PROGDIR/sbin/$PROGNAME
* C8 y# Q" U/ h! N' lCONFIG=$PROGDIR/$PROGNAME.conf0 k/ N, ]: H% ^3 Z9 C/ B
PIDFILE=$PROGDIR/$PROGNAME.pid/ B d* s+ P: C& V
DESC="HAProxy daemon"# W( |( _* P5 }; d) Y# t! Z5 s
SCRIPTNAME=/etc/init.d/$PROGNAME
4 [1 i. c' {; T5 {& I: T
- ?% `/ D3 v" Z# [/ `2 f0 h+ @# Gracefully exit if the package has been removed.
8 Q& @0 G- m, ^6 D2 k9 ]. d" f) _! Ntest -x $DAEMON || exit 0 l/ S9 i: n8 m c
/ a4 O: b+ b/ \" K% W4 E, @3 F
start() C' f3 k2 X' B+ s) W; O
{
Z- K& }+ c' _8 b echo -n "Starting $DESC: $PROGNAME"& I. g& V- p( q/ i. v4 f; N; W
$DAEMON -f $CONFIG
; i5 b/ w L! f5 O4 v( @3 V echo "."* ~9 m- r+ d& U6 I( s
}
( l% \( h5 @% ~- }) k X Z4 t" D
: F1 f/ D2 D: Q& Tstop()
! i8 D$ q0 ]' J- S1 x* r{
4 d: N. z$ ~9 H: G3 P3 h: y# {: l$ ` echo -n "Stopping $DESC: $PROGNAME"
8 `# G& w# u' B( q haproxy_pid=cat $PIDFILE; c% i6 @. O* {9 \+ ?
kill $haproxy_pid
b* x. H! \3 ~7 S% e echo "."9 h% C" U( h8 D6 ~5 y
}8 x. i i7 x' }+ Q8 M9 [: z9 `3 q
' J& _. v2 t; P+ ~, i" o
restart()) E4 |3 K' F. M/ y0 z
{- @. K N# N$ z; \- F; X3 q9 ?
echo -n "Restarting $DESC: $PROGNAME"$ i* }) t9 H8 p2 [
$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
% \* h0 F: A4 w echo "."
0 `: D2 J6 V& ]. k# L0 ]" h}8 x& `1 g2 J0 ~; x, `8 g6 w
) e f2 f1 n. T: e0 `
case "$1" in3 [) _- b; X1 A
start)
: |( k( A6 {" }# U* s5 u% p/ f/ R start
, V4 e1 Y- n7 T ;;- ~ q0 z- y5 g# H; y0 _" `+ f
stop)9 I# o" J' D. {. k0 i; N9 e
stop" U1 r' A ^* x. N; e
;;
# Q8 O& z# @; d restart)- D* C) e# g+ L2 i) \$ [
restart6 `8 m7 t% `3 j& Z8 _: |2 \ H
;;
4 b' X5 b! G- `7 a; ]* _/ E *)
' c" [" `. E0 Q( L echo "Usage: $SCRIPTNAME {start|stop|restart}" >&25 i' u, |$ B3 U5 ]
exit 1/ a9 A1 S- Y+ d* b
;;
/ c* ?9 [: h+ Q" ?: o( r: uesac exit 0
) _& i- S1 b/ F0 @保存后赐予可执行权限8 t0 R* X( b) \: ?- O2 u
# chmod +x /etc/rc.d/init.d/haproxy 就可以使用 service haproxy start|stop|restart 来控***务的启动停止跟重启。: n: p; S) }$ O+ Q( \( s! f* j0 I
并通过以下命令加载到开机服务启动列表- `1 C4 D- s. X0 `3 M9 h
# chkconfig --add haproxy
3 s) e- @6 R; }+ f9 @+ R4 ^5.启动服务 启动服务:
6 n' j X+ E' m# c, W q# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg 重启服务:: d0 B; @' \: m9 C- b* {: B, y. P
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid` (没有换行) 停止服务:! c! f0 R7 P g% p) G; K }
# killall haproxy . M# r; X# I0 q7 Q# g
6.举例 在浏览器中输入haproxy监控地址:http://10.16.0.246:1080/haproxy-admin,如图所示
在浏览器输入haproxy设置的对外访问地址:http://10.16.0.244/,如图所示 3 E4 t* D& Z5 F2 C+ T" O
|