找回密码
 注册
查看: 4282|回复: 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.cfg' S9 W5 H# V5 F  a7 v
6 w* o! T! v! e8 Y  p$ r8 y
默认文件内容如下:5 c3 j5 m/ x; T: ]1 j& F' T
# this config needs haproxy-1.1.28 or haproxy-1.2.10 g! Z: n4 i/ [
* [. d. c, W* }, _
global
; u; l+ _6 s% Rlog 127.0.0.1 local0
3 f. I/ E2 U+ y+ }; u3 M6 d' Glog 127.0.0.1 local1 notice
) V( m6 w- P+ d% D0 k) h#log loghost local0 info, L3 N% P* e' H
maxconn 4096
% O/ ], ^  R: u# P6 }chroot /usr/share/haproxy
8 m! R, m& r$ w3 @3 r/ V" C, f6 ^uid 99
8 a1 W! Y1 ^$ X# egid 99( x# V+ g! E0 i6 c1 R& u
daemon
- X# c: p; d5 C/ j; Y& S7 D#debug% I4 |: @, n# @( Z
#quiet, H0 a- p! s5 L: Z! J7 {

9 L7 Q" E% ]& H0 Adefaults
4 }) u2 g5 G/ m4 Plog global
' x; U9 N% T8 K8 t" z1 o& kmode http
$ Q; F8 a% x) B5 G% p* Coption httplog* r' N+ J! a5 g. F% P5 G
option dontlognull
* s. ?3 M2 y7 eretries 3
, }; u- i6 r- nredispatch
2 j; p# d1 K+ I" K0 @+ kmaxconn 2000! n  ~% L, ^. Z' R- \3 s
contimeout 5000
- e; A. G# T/ j7 }' \* ~clitimeout 50000
6 j8 {* g) L, e+ R" z; o4 Psrvtimeout 50000
# ~& \! ]7 e/ Z0 b* T& L" n) [/ V- a/ U5 [
listen appli1-rewrite 0.0.0.0:10001/ R$ Q4 Z4 M  C
cookie SERVERID rewrite1 |* r( D8 r1 x. @: H" J
balance roundrobin  g, n8 _4 x4 N1 F7 j
server app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2  fall 5
9 p2 D" \6 C  V- F8 z! i3 Tserver app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2  fall 5
2 c! v6 H& U# S/ userver app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2  fall 5; R) W" x8 {# m3 J; O" M7 d9 f
server app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2  fall 5
3 O3 V  G# D/ t2 f5 J+ O- A1 d" w: ]1 ~
listen appli2-insert 0.0.0.0:10002
, n* e2 M6 C, `3 [. A/ N, B# Loption httpchk' Z0 {! ]+ m0 m. I3 r8 P! r8 e
balance roundrobin
+ {  ^* }# Y) ~# \" I4 V" j* c" Ccookie SERVERID insert indirect nocache  g, S2 X$ |5 F% n; M% @% c0 ~% e
server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3: Q7 _! t; J' e1 f  L: e
server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3$ q1 u6 b8 }2 }- ?: \! U
capture cookie vgnvisitor= len 32! Y  f; a9 ]- g' S5 h) [- F5 O
  N2 J8 L0 W: s
option httpclose # disable keep-alive
/ @% `9 L) I: v" Qrspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address; B1 o8 j, U' }
; n7 Z. u" u' T: Z. a
listen appli3-relais 0.0.0.0:100037 b  g5 U  r' }% k, r5 r
dispatch 192.168.135.17:80
+ `4 n) D' G* U# R* x8 ~* J0 h1 s9 K6 m$ T3 t- l
listen appli4-backup 0.0.0.0:10004' u! e3 q- r, \! z5 ]) W
option httpchk /index.html) ~# K. x/ f3 X) P
option persist# R  s6 w/ B" g2 C
balance roundrobin
# L2 j9 O$ K: L- w- Gserver inst1 192.168.114.56:80 check inter 2000 fall 3
; F" N; J  \& a$ Yserver inst2 192.168.114.56:81 check inter 2000 fall 3 backup
# J7 i, c" B8 z& r: l: ?9 `
5 a5 Q5 e9 c) }" u) d2 ?listen ssl-relay 0.0.0.0:8443" G9 m- Y! W9 S5 e% B  z7 m
option ssl-hello-chk
" v; B7 Y! ~+ ~+ g& c/ cbalance source
2 c" ~% Z+ o1 v" ~- ~server inst1 192.168.110.56:443 check inter 2000 fall 3# R7 W: ]5 h2 ]; H+ F* O+ k
server inst2 192.168.110.57:443 check inter 2000 fall 3
% V( v5 X) \5 W& o' C5 C6 lserver back1 192.168.120.58:443 backup
3 w# e) p/ z6 T8 }* Q; p6 J% n5 j3 m. ~& ?$ O
listen appli5-backup 0.0.0.0:10005
) N2 B6 f3 _" w) G' }! Y3 roption httpchk *
! m; ~9 K, z1 ^balance roundrobin
( c# m/ Z3 P1 a, d  b' w& O* g& `7 E6 Ocookie SERVERID insert indirect nocache7 v0 x& Y5 o$ `: M+ V& e# O4 O
server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3( V/ e3 j- U3 v
server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 34 w: @# E% N# p: m# p0 {9 N2 T; U3 y9 n
server inst3 192.168.114.57:80 backup check inter 2000 fall 3" D* A( E, m+ A' U
capture cookie ASPSESSION len 323 ~4 |. Z4 _- H! Z# S7 v- d
srvtimeout 200001 `5 g! Q4 |5 N2 u6 v2 `

" f  x7 E/ r. p) E3 @. M0 Hoption httpclose # disable keep-alive
# Z( M! z6 A. |% _! S1 Loption checkcache # block response if set-cookie & cacheable* f4 f; E9 k. B. c
; {$ A& n" r  _0 Y+ j) s( r
rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address, G9 N  m- p+ P; \. ~

* V& d& Y! I7 M' J" ~; _4 O, Derrorloc 502 http://192.168.114.58/error502.html
0 `! V5 l+ L1 l2 {7 ~( Herrorfile 503 /etc/haproxy/errors/503.http
/ k! F. R2 D% p, Z/ A" m
4 T' z9 [, z6 k2 e

- L, T; W5 z2 U) n$ n, F0 ~# \4 X2 v' i! L. r* 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
$ i& ^9 i4 l4 m4 }/ K
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
5 |& F" L; p+ m1 R/ @" K/ z( n
stats hide-version         #隐藏统计页面的HAproxy版本信息
! `0 B3 Y9 t1 C5 d. q, ~6 @) j
* N' m. ]6 e; A: E+ M- L6 _" j
% R& c! g& J5 |8 Q% I9 q

frontend http-in                        #前台

       bind *:80

       mode    http

       option  httplog

       log     global

       default_backend htmpool       #静态服务器池

9 }- \7 [; M( I& ?+ A

backend htmpool                    #后台

       balance leastconn#负载均衡算法. l; s% x( f0 L+ f

       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
0 B  e  s6 B- d: B8 x
#cookie 1表示serverid为1,check inter 1500 是检测心跳频率
  h3 a; }* a6 Q# l* p
#rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
; M9 L  j: G5 \  Y. ^

3 M; `+ o8 k9 a. n9 ]. ]' l9 r3.加上日志支持
: t0 w! ?9 o/ X# i
# vim /etc/syslog.conf
在最下边增加) J# l8 z" h( A
local3.*         /var/log/haproxy.log
" {7 K0 X% u6 p4 d/ ^* n2 z3 W0 q& Hlocal0.*         /var/log/haproxy.log

3 A1 r. C6 ?& X
#vim /etc/sysconfig/syslog
修改: SYSLOGD_OPTIONS="-r -m 0"
重启日志服务service syslog restart
- C# j$ a6 U* V* m) J) S
4.设置开机启动
为了方便系统在开机时加载,还可以创建启动脚本:2 p9 D+ q2 `/ @, S
# vim /etc/rc.d/init.d/haproxy  内容如下:
#! /bin/sh
: j+ |0 J9 s% f, \8 ~3 D/ y4 jset -e
, }$ `* T1 W5 Q  B- }' m: b. m! U2 b% T& y
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
) g& Y/ z* b6 l# B& t+ y6 H% UPROGDIR=/usr/local/haproxy
& x; H; z8 Q/ y- W$ L8 |PROGNAME=haproxy
. k. O! E4 Q# ]8 s- k( Z1 z: |DAEMON=$PROGDIR/sbin/$PROGNAME
* n: Q8 W' f$ {/ ?/ |7 }CONFIG=$PROGDIR/$PROGNAME.conf/ Z! z) \' I1 Z1 @8 D. _8 H% O- D
PIDFILE=$PROGDIR/$PROGNAME.pid) d9 P# Y) y* n% a' F
DESC="HAProxy daemon"' R3 p/ s2 ~9 T6 @1 x
SCRIPTNAME=/etc/init.d/$PROGNAME
4 Z' x  F; u# S1 |7 K1 C
, A  ]7 k+ w, _4 T# Gracefully exit if the package has been removed.2 t, w1 d0 q+ D  w, \, D
test -x $DAEMON || exit 0
8 h: F  S3 r/ o2 J4 B9 @+ ^/ q% F2 a8 q/ d
start()) j2 A" E( q" M8 X* O* V: h
{* C, B2 ]# s( q1 ~7 i
       echo -n "Starting $DESC: $PROGNAME"
1 g) h" T* z. J/ z       $DAEMON -f $CONFIG
: B! Y8 \& R$ @' a) G: Q       echo "."8 k" O6 p# Z' [; I, f4 k/ ?
}
( T# Q* V( O, j' B8 J$ W" R" ?& W* X  Y8 E: B  c0 m* ^
stop()
  z# P. Y/ U. P8 @" \{" h# Z; Z* |8 X' d7 s
       echo -n "Stopping $DESC: $PROGNAME"
" q0 W5 ?- l$ e7 m& X: O* ^# u7 ~/ [9 [       haproxy_pid=cat $PIDFILE
2 F6 k& q/ i4 l0 r, S       kill $haproxy_pid
8 D/ [+ t5 A; Y! T# T0 K       echo "."
+ V4 K( s. L5 o0 \2 i6 ~' O}4 h7 F) `* {" X/ `: D/ q) f6 b7 @
% D9 g! c' p/ g8 S) _7 w& ~9 p
restart()
: H+ f! _! D0 b8 [- B{
/ W6 R& E# i0 p1 o. f" L. P       echo -n "Restarting $DESC: $PROGNAME"
' l7 |& k4 O0 r2 Y9 U       $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE); x. f" q1 w' ^+ v1 [; D  c* Q/ F
       echo "."  V' i" ?: k& R: t. K& t, |9 L! v5 ^
}
2 Q2 h) b2 ~. G# h
1 g$ g& N3 c1 _! _. Y9 a5 ocase "$1" in
' a( C, q* Y, k  _, g' o: l. _ start)1 H9 X. U" m2 O& g" Z& A2 W
       start
; g  i( _; o, E3 e- r6 ]7 A5 `: t       ;;
1 S  I, }- x- {5 M, ^( N stop)
5 y( g$ l+ F# J# j# L! j% m$ Z  ~- g       stop. Z9 _9 M; u: h- u. \
       ;;
  _9 a- j- l' B$ B5 ]8 g restart)
6 D  |/ `$ B% j+ s5 v5 C       restart0 i/ u/ ~1 A7 D4 s4 H2 E
       ;;
! r, G6 T' s) }' i *)
& J3 m! ~. r9 f# k8 p! \. |       echo "Usage: $SCRIPTNAME {start|stop|restart}" >&24 B1 |$ T9 q! I: E  s- ~6 p
       exit 17 R$ a3 q9 K  O6 j. Z: N! I7 q5 O
       ;;
% G+ V- U: r7 S  uesac
exit 0

& ~7 N4 Y; u0 A" t7 g/ x9 F) f9 ]
保存后赐予可执行权限8 S# X. U$ e8 x
# chmod +x /etc/rc.d/init.d/haproxy
就可以使用 service haproxy start|stop|restart 来控***务的启动停止跟重启。; |& r. P( _9 Y- E1 @* t- e/ m3 K
并通过以下命令加载到开机服务启动列表
8 O5 W. I( Y- W! A: y2 M0 e# chkconfig --add haproxy

6 A3 g; t/ z, Z/ F

5.启动服务

启动服务:* b2 `1 T1 Y0 k9 W* |. K
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
重启服务:
( T8 v8 F) R$ O( T( g, |' l# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid`  (没有换行)
停止服务:
& F! `; ^# g. z, p/ O# killall haproxy
5 N# {1 W! D* i

6.举例

在浏览器中输入haproxy监控地址:http://10.16.0.246:1080/haproxy-admin,如图所示

在浏览器输入haproxy设置的对外访问地址:http://10.16.0.244/,如图所示

4 G$ ]$ u  J: J- i6 u! Q+ E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 03:03 , Processed in 0.020946 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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