找回密码
 注册
查看: 4280|回复: 0

Haproxy安装及配置

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2016-8-18 09:29:51 | 显示全部楼层 |阅读模式

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- w
4.设置开机启动
为了方便系统在开机时加载,还可以创建启动脚本:, [) _* 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% y

5.启动服务

启动服务:
( 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:58 , Processed in 0.027462 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表