1.安裝php
# wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gzhtml
# tar zcvf haproxy-1.3.20.tar.gzlinux
# cd haproxy-1.3.20web
# make TARGET=linux26 PREFIX=/usr/local/haproxy #將haproxy安裝到/usr/local/haproxyredis
# make install PREFIX=/usr/local/haproxyvim
2.配置後端
安裝完畢後,進入安裝目錄配置文件,默認狀況下目錄裏是沒有.cfg配置文件的,能夠回到安裝文件目錄下將examples下的haproxy.cfg拷貝到usr/local/haproxy下。瀏覽器
# cd /usr/local/haproxy服務器
# vi haproxy.cfgcookie
默認文件內容以下:
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
chroot /usr/share/haproxy
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen appli1-rewrite 0.0.0.0:10001
cookie SERVERID rewrite
balance roundrobin
server app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
server app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 5
server app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5
server app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 5
.....
.....
.....
listen appli5-backup 0.0.0.0:10005
option httpchk *
balance roundrobin
cookie SERVERID insert indirect nocache
server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3
server inst3 192.168.114.57:80 backup check inter 2000 fall 3
capture cookie ASPSESSION len 32
srvtimeout 20000
option httpclose # disable keep-alive
option checkcache # block response if set-cookie & cacheable
rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address
errorloc 502 http://192.168.114.58/error502.html
errorfile 503 /etc/haproxy/errors/503.http
根據實際需求,更改配置文件,個人配置以下
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
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
stats hide
-
version
#隱藏統計頁面的HAproxy版本信息
frontend www #前臺
bind *:80
default_backend webserver #靜態服務器池
backend webserver #後臺
mode http
balance leastconn#負載均衡算法
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
#cookie 1表示serverid爲1,check inter 1500 是檢測心跳頻率
#rise 2是2次正確認爲服務器可用,fall 3是3次失敗認爲服務器不可用,weight表明權重
注:若是想經過不一樣的IP或域名,訪問不一樣的站點,則須要將frontend進行以下配置:
frontend www
bind *:80
acl web hdr_beg(host) 10.207.252.45
acl web1 hdr_beg(host) 10.207.252.46
use_backend webserver if web
use_backend web1server if web1
backend webserver
mode http
balance roundrobin
server web01 10.207.252.35:80 check inter 2000 fall 3
backend web1server
mode http
balance roundrobin
server web01 10.207.252.34:80 check inter 2000 fall 3
3.加上日誌支持
# vim /etc/syslog.conf
在最下邊增長
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
#vim /etc/sysconfig/syslog
修改: SYSLOGD_OPTIONS="-r -m 0"
重啓日誌服務service syslog restart
4.設置開機啓動
爲了方便系統在開機時加載,還能夠建立啓動腳本:
# vim /etc/rc.d/init.d/haproxy 內容以下:
#! /bin/sh
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
PROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/$PROGNAME.conf
PIDFILE=$PROGDIR/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
start()
{
echo -n "Starting $DESC: $PROGNAME"
$DAEMON -f $CONFIG
echo "."
}
stop()
{
echo -n "Stopping $DESC: $PROGNAME"
haproxy_pid=cat $PIDFILE
kill $haproxy_pid
echo "."
}
restart()
{
echo -n "Restarting $DESC: $PROGNAME"
$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
echo "."
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
保存後賜予可執行權限
# chmod +x /etc/rc.d/init.d/haproxy
就可使用 service haproxy start|stop|restart 來控***務的啓動中止跟重啓。
並經過如下命令加載到開機服務啓動列表
# chkconfig --add haproxy
5.啓動服務
啓動服務:
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
重啓服務:
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid` (沒有換行)
中止服務:
# killall haproxy
6.舉例
在瀏覽器中輸入haproxy監控地址:http://10.16.0.246:1080/haproxy-admin,如圖所示
在瀏覽器輸入haproxy設置的對外訪問地址:http://10.16.0.244/,如圖所示
參考文獻:
http://blog.chinaunix.net/uid-25266990-id-3989321.html
http://blog.csdn.net/tantexian/article/details/50056199
http://www.th7.cn/system/lin/201508/127172.shtml