centos7下haproxy1.7的使用與配置
haproxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。
一、haproxy下載
http://www.haproxy.org/#down
如:haproxy-1.7.2.tar.gz
二、安裝haproxy
查看內核版本
> uname -r
解壓haproxy,並安裝
> tar xf haproxy-1.7.2.tar.gz > cd haproxy-1.7.2 > make TARGET=linux2628 PREFIX=/data/haproxy > make install PREFIX=/data/haproxy
安裝成功后,查看版本
> /data/haproxy/sbin/haproxy -v
復制haproxy文件到/usr/sbin下
因為下面的haproxy.init啟動腳本默認會去/usr/sbin下找,當然你也可以修改,不過比較麻煩。
> cp /data/haproxy/sbin/haproxy /usr/sbin/
復制haproxy腳本,到/etc/init.d下
> cp ./examples/haproxy.init /etc/init.d/haproxy > chmod 755 /etc/init.d/haproxy
我們可以查看一下這個haproxy.init文件
#$BASENAME默認就是haproxy BASENAME=`basename $0` if [ -L $0 ]; then BASENAME=`find $0 -name $BASENAME -printf %l` BASENAME=`basename $BASENAME` fi #執行文件路徑 BIN=/usr/sbin/$BASENAME #配置文件路徑 CFG=/etc/$BASENAME/$BASENAME.cfg #pid文件路徑 PIDFILE=/var/run/$BASENAME.pid #鎖文件路徑 LOCKFILE=/var/lock/subsys/$BASENAME
創建系統賬號
> useradd -r haproxy
創建配置文件
> mkdir /etc/haproxy > vi /etc/haproxy/haproxy.cfg
#全局配置
global
#設置日志
log 127.0.0.1 local3 info
chroot /data/haproxy
#用戶與用戶組
user haproxy
group haproxy
#守護進程啟動
daemon
#最大連接數
maxconn 4000
#默認配置
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
#前端配置,http_front名稱可自定義
frontend http_front
bind *:80
#haproxy的狀態管理頁面,通過/haproxy?stats來訪問
stats uri /haproxy?stats
default_backend http_back
#后端配置,http_back名稱可自定義
backend http_back
#負載均衡方式
#source 根據請求源IP
#static-rr 根據權重
#leastconn 最少連接者先處理
#uri 根據請求的uri
#url_param 根據請求的url參數
#rdp-cookie 據據cookie(name)來鎖定並哈希每一次請求
#hdr(name) 根據HTTP請求頭來鎖定每一次HTTP請求
#roundrobin 輪詢方式
balance roundrobin
#設置健康檢查頁面
option httpchk GET /index.html
#傳遞客戶端真實IP
option forwardfor header X-Forwarded-For
# inter 2000 健康檢查時間間隔2秒
# rise 3 檢測多少次才認為是正常的
# fall 3 失敗多少次才認為是不可用的
# weight 30 權重
server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30
server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30
打開rsyslog配置
> vi /etc/rsyslog.conf
去掉下面兩行前面的#號
$ModLoad imudp $UDPServerRun 514
並添加下面一行
local3.* /var/log/haproxy.log
重啟rsyslog
> systemctl restart rsyslog
啟動haproxy
> service haproxy start
三、haproxy的acl規則
frontend http_front
bind *:80
stats uri /haproxy?stats
#創建一個acl,is_http_back2是acl的名稱,可自定義,用於判斷主機名是否為www.back2.com
acl is_http_back2 hdr_end(host) www.back2.com
#通過正則判斷主機名中是否為bbs.back.com或forum.back.com
acl is_host_bbs hdr_reg(host) -i ^(bbs.back.com|forum.back.com)
#判斷ua是否為android
acl is_ua_android hdr_reg(User-Agent) -i android
#判斷主機名開頭是否為img.或css.或js.
acl is_host_static hdr_beg(host) -i img. css. js.
#判斷url路徑中是否有/bbs
acl is_path_bbs path_beg -i /bbs
#判斷url文件結尾
acl is_php path_end -i .php
#通過正則判斷url中結尾以
acl is_static_file url_reg -i /*.(css|jpg|png|jpeg|gif)$
#效果同上
acl is_static_file2 path_end -i .css .jpg .png .jpeg .gif
#如果主機名是www.back2.com那么就使用后端http_back2
use_backend http_back2 if is_http_back2
#默認使用的后端
default_backend http_back
backend http_back
balance roundrobin
option httpchk GET /index.html
option forwardfor header X-Forwarded-For
server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30
backend http_back2
balance roundrobin
option httpchk GET /index.html
option forwardfor header X-Forwarded-For
server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30
四、haproxy的動態管理
在/etc/haproxy/haproxy.cfg的global配置中添加如下項:
stats socket /data/haproxy/haproxy.sock mode 600 level admin stats timeout 2m
安裝socat工具
> yum install socat
查看幫助
> echo "help" | socat stdio /data/haproxy/haproxy.sock
查看信息
> echo "info" | socat stdio /data/haproxy/haproxy.sock
關閉后台主機
> echo "disable server http_back/node1" | socat stdio /data/haproxy/haproxy.sock
打開后台主機
> echo "enable server http_back/node1" | socat stdio /data/haproxy/haproxy.sock
五、可調優的參數
配置端口可用范圍
> cat /proc/sys/net/ipv4/ip_local_port_range
配置端口復用
> cat /proc/sys/net/ipv4/tcp_tw_reuse
修改timeout的時間(不建議修改)
> cat /proc/sys/net/ipv4/tcp_fin_timeout
