马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
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.cfg8 v2 W; O! ^5 V2 \% G) v; q
% I& V% H `+ f& @, F5 H 默认文件内容如下:5 o7 C2 u( X& u$ @! d7 Y
# this config needs haproxy-1.1.28 or haproxy-1.2.1
9 [+ e6 B6 t7 _ K- p3 |+ h1 o3 j* M- c; \
global7 t% r+ K* E# Z7 H
log 127.0.0.1 local0, Y: ]* D' x& w+ q4 f8 n& R
log 127.0.0.1 local1 notice
7 W4 M. V" Q+ i0 n& c8 F) h3 e2 Y) `#log loghost local0 info
2 G# V. A7 l+ k) v+ B6 }. wmaxconn 4096
0 ]0 m: P0 L9 p# t ]chroot /usr/share/haproxy* R# a% R0 N, }1 O0 L0 \
uid 994 d5 L; d) F3 i2 G. Z% R3 \
gid 99; u; v( c2 p" \1 d+ o0 D4 |# L
daemon( ^& E! {2 U: X; s
#debug" ]6 x3 [6 v) C0 P( {, H, A
#quiet% y1 ?4 j' M+ g H* ?
$ p9 x) O0 k \2 c) }1 Edefaults
4 L2 V8 ^: z+ S2 l0 M- elog global
/ M- r1 e: z- E( ^4 n `" T: _* i( {: dmode http
3 q9 I) }% f; l& T% X* h5 E& Z, Xoption httplog; m. }( _0 [6 ^7 p( o
option dontlognull. ^' r I, K4 ^, H' l
retries 3
$ y% Z% j1 s. x1 \" I3 u l0 Mredispatch
. q( ^# [2 V) [# s+ omaxconn 2000
. }! r6 O5 q- n7 P T4 f5 Tcontimeout 5000/ @: f- a' j! y+ ]
clitimeout 50000
, {% }* g |" wsrvtimeout 50000 K' B! m" w/ G+ Q, H
# ?( O- e# ?9 B P3 f' k
listen appli1-rewrite 0.0.0.0:10001 P+ ^+ O1 x ]& V" f# c; M$ x
cookie SERVERID rewrite
" T' ?( h& @/ l/ c* |" d7 ybalance roundrobin
2 t& C5 ^6 c: z; [, L! Nserver app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
: s$ U8 m1 z: y/ C4 Fserver app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 5
- M q% Y2 U5 Xserver app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5
, X( V5 o* [' L; e Oserver app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 5
: C4 q2 F" [% a# U& {3 o4 K$ J5 }# h# i3 I; E. S
listen appli2-insert 0.0.0.0:10002
6 V4 b" |2 j" w$ ?& A. B# o. Boption httpchk# E w9 x0 ?5 k7 F c# W
balance roundrobin2 R |( R a3 m, O r( I/ Y" u
cookie SERVERID insert indirect nocache
8 j* F' Y: k+ B; Bserver inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3 {; f. Q) k' {: L9 H
server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3 n' o. t& D% e6 u# X& H7 [& l
capture cookie vgnvisitor= len 32
$ R! F4 w1 m$ q K: v5 H
! `: Z1 K/ T0 H) Voption httpclose # disable keep-alive
- h) g, r' |2 Q; s2 urspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address7 C# x0 y" M7 ]& p4 Z
* Z& y# ^0 [' q- L4 H; N4 Glisten appli3-relais 0.0.0.0:10003
& |# N, v# @& s& ?. S) adispatch 192.168.135.17:80) E p# V& I% c% B7 u+ P9 l
0 Q E W! T1 olisten appli4-backup 0.0.0.0:10004
9 |& x) v/ i/ U( Joption httpchk /index.html" l0 R% A9 ]5 V# S/ U
option persist
+ _* n- c; ~) R" j0 z/ V* fbalance roundrobin
1 L. p5 k1 H$ C+ T* gserver inst1 192.168.114.56:80 check inter 2000 fall 3$ z- I! f6 W" A
server inst2 192.168.114.56:81 check inter 2000 fall 3 backup0 h$ {( F N6 k, c4 p
) s# [3 V# a6 o0 @; Y+ M1 U- ~listen ssl-relay 0.0.0.0:8443
! Z/ Q' |( L; U; g- ?) }option ssl-hello-chk7 L* O. _1 L9 a3 l4 K2 Z' n
balance source
: X- A% [. ^* H' e( b0 |server inst1 192.168.110.56:443 check inter 2000 fall 30 N- m' x! |6 Z+ C1 [
server inst2 192.168.110.57:443 check inter 2000 fall 3
3 G2 E; w% u) `server back1 192.168.120.58:443 backup
( P3 V( S. G) `3 {; J0 d8 D( h- e6 l/ N- ~* p% @5 O( x
listen appli5-backup 0.0.0.0:10005) f$ r: k3 p6 Z3 H z; D+ M/ f
option httpchk *
: {6 T% O, E( Y N' \balance roundrobin
% x) j) ^ i, O2 i9 Acookie SERVERID insert indirect nocache
' i0 L/ z) n& b# a' v* m( a9 V! rserver inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
! ~7 i$ s( Z3 I: Oserver inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3
5 {' K, O1 n% ^& X2 ^0 `- D& Fserver inst3 192.168.114.57:80 backup check inter 2000 fall 3* d, E- o7 r. @5 a) [1 O
capture cookie ASPSESSION len 325 A, j1 B, x/ u, G$ G
srvtimeout 20000$ O. x x3 [: `3 j% }' }2 l
3 r! t/ v/ e" u8 G8 K! a$ i
option httpclose # disable keep-alive7 k1 g/ r5 c \* ]
option checkcache # block response if set-cookie & cacheable
Q+ [7 p' _( ^, R' Y$ @4 \ o- f# L' G" i
rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address
# C, _" D, D2 F2 d* r2 D
+ }- }# Q b. q7 ~- W) o9 C4 f! ?, Yerrorloc 502 http://192.168.114.58/error502.html
4 p9 T1 S. q4 g3 Nerrorfile 503 /etc/haproxy/errors/503.http' n) D% n H6 ~8 F2 X0 q4 N4 M% `
' W0 ]( r, n# s3 E* a0 X- {8 P4 I: c8 v8 X$ b& I
) G% r# K6 Q8 ~4 s. `/ F0 N; v7 w根据实际需求,更改配置文件,我的配置如下 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
# B+ F0 [, T& H* \6 n- m
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
. W, _9 _7 g6 b2 V6 S" D0 J stats hide-version #隐藏统计页面的HAproxy版本信息' S; x+ N5 i, J+ t1 L9 U1 t
; C& ^8 K( M I2 J
# R1 R) w, o, |$ g# ]; S/ C
frontend http-in #前台 bind *:80 mode http option httplog log global default_backend htmpool #静态服务器池
9 G" Q6 O: W; H: u' I' K) v5 g. b
backend htmpool #后台 balance leastconn#负载均衡算法
`1 w' i! u: p m8 y" W 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
4 A" C( y5 i/ b#cookie 1表示serverid为1,check inter 1500 是检测心跳频率
# n. O( b( h; x# B7 B1 Q #rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重 f6 R. ?* B8 [5 s2 n) h0 X
) ~3 F/ ]" j- T1 {1 U3.加上日志支持- s, u. Y% }" h* |8 c B
# vim /etc/syslog.conf 在最下边增加1 `( a6 P% S* T& }
local3.* /var/log/haproxy.log* C6 |6 e2 k3 t; v& @
local0.* /var/log/haproxy.log
* F. y4 ?; Q2 t5 M) Z; c$ H: B6 m#vim /etc/sysconfig/syslog 修改: SYSLOGD_OPTIONS="-r -m 0" 重启日志服务service syslog restart
1 w! o% T$ u c6 G3 j) Y" s4.设置开机启动 为了方便系统在开机时加载,还可以创建启动脚本:; |9 v1 s, X" G; |
# vim /etc/rc.d/init.d/haproxy 内容如下: #! /bin/sh/ z6 v6 t2 V* P
set -e8 F" p1 y% C5 o- q$ l3 E, A
! T4 A- n' F- N: Z
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin1 ]# K* b8 U7 \& l
PROGDIR=/usr/local/haproxy
$ j" Y$ U1 L8 \PROGNAME=haproxy$ ~1 R# h# \8 N* z( a% M6 ]8 V$ `7 j
DAEMON=$PROGDIR/sbin/$PROGNAME9 n$ M/ t: n+ p. m9 E1 s
CONFIG=$PROGDIR/$PROGNAME.conf# ~% e+ d3 H6 g
PIDFILE=$PROGDIR/$PROGNAME.pid( `1 U/ q3 H' p9 w- m: U
DESC="HAProxy daemon"
) N! s& u, G; }# TSCRIPTNAME=/etc/init.d/$PROGNAME9 z# p. {6 I+ z9 U9 C! Y0 [2 B& j
: p2 z- |) J1 m' V6 r% P0 j
# Gracefully exit if the package has been removed.6 j: U1 q$ F4 _! a9 ]
test -x $DAEMON || exit 0
% L# ~2 \$ }* k* v- N& s' C$ c# ]4 r7 z0 i3 o' N
start()
1 t" k* ^% f! j Z' U! L8 d+ v{
1 g9 F& a i! ^7 i+ _( Y3 O2 e4 D1 b echo -n "Starting $DESC: $PROGNAME"
7 @. `1 }. A" Z $DAEMON -f $CONFIG
! \5 O: H2 q: ?( s7 a( ]( z echo "."
; i; O- u* X, F. t# b/ ?# e$ I}
6 }" k, F9 J& {# L9 m% g5 h3 B
3 H+ T7 z' [; gstop()
- q$ s+ `. B+ I, d{
1 v; _/ M7 M& [% S' A echo -n "Stopping $DESC: $PROGNAME"
" ^& f6 b A& U- I haproxy_pid=cat $PIDFILE/ i! j3 }0 }. G& E* Y3 e
kill $haproxy_pid
6 q" F1 K4 g2 p echo "."6 s, N" z+ K# `5 P2 p
}
; i4 M' R2 ?9 E& w$ \5 [
o: S3 ^+ i0 Y8 |restart()
9 B* B: w5 a: v; V t$ ?{
2 k2 o1 t, ~; Q% i) Q- U6 z echo -n "Restarting $DESC: $PROGNAME"
5 d1 F( h5 D1 d# e $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)2 c( g- F8 N& g5 c. e
echo "."5 c% d& z- `" I3 L. g
}0 }6 s) n7 F r% k9 c/ ~7 {1 z
0 N7 c. u U9 \* q5 p9 ycase "$1" in
( ]9 E$ J% z! W start) v: h$ F- P" p: W) q) }+ ~3 \
start3 ?/ | O- \! T# r3 D4 {) r0 m+ l
;;" z4 P$ L0 }4 t" y0 j. D
stop)
7 u/ P! l2 t: t% O, ^ a% x5 L stop6 b+ Q6 t! H( G, g5 Y
;;- R3 G4 y4 d5 o6 o1 c: a+ Z
restart)
- U0 t) n# p9 h restart
- Q6 r& U" W% ~" X, f ;;
% @, d4 |& U1 _" h6 R7 J2 v7 A9 Z3 J: x *)
7 d# v3 X* C! {) }: `4 Y: h echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
p0 }2 i R F" ^ exit 14 ]7 e5 J# @- I+ U
;;
- _9 ^8 `6 t9 kesac exit 0 - ~' q5 Y$ l4 U+ }9 G
保存后赐予可执行权限
. N, v+ ?1 S/ ~ u0 S2 W9 b# chmod +x /etc/rc.d/init.d/haproxy 就可以使用 service haproxy start|stop|restart 来控***务的启动停止跟重启。
2 I! f0 q; t, Z5 e+ T2 _" r7 Y# q并通过以下命令加载到开机服务启动列表
; V& E6 j; S- x# chkconfig --add haproxy
; O4 g' t! `, c4 ^* y& a+ D( s" u5.启动服务 启动服务:# ?6 Z2 I( ^8 a' x
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg 重启服务:, H% y1 ^2 A6 }4 p( g& O
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid` (没有换行) 停止服务:
" y/ C5 z$ {; W& ], d) G# killall haproxy / R5 x' {, ^: s4 g; D
6.举例 在浏览器中输入haproxy监控地址:http://10.16.0.246:1080/haproxy-admin,如图所示
在浏览器输入haproxy设置的对外访问地址:http://10.16.0.244/,如图所示
5 N, F- @& ~$ n9 @2 l |