global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000 #每個(gè)Haproxy進(jìn)程的最大連接數(shù)
user haproxy
group haproxy
daemon #Haproxy進(jìn)程進(jìn)入后臺(tái)運(yùn)行
nbproc 1 #Haproxy啟動(dòng)時(shí)創(chuàng)建的進(jìn)程(比CPU核數(shù)少1)
stats socket /var/lib/haproxy/stats
defaults
mode http #Haproxy運(yùn)行模式(tcp http health)
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s #超時(shí)時(shí)間
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen admin_stats
bind 0.0.0.0:19088
mode http
log 127.0.0.1 local0 err
stats refresh 30s #Haproxy監(jiān)控統(tǒng)計(jì)頁(yè)自動(dòng)刷新時(shí)間
stats uri /haproxy-status #監(jiān)控統(tǒng)計(jì)也的URL路徑(http://IP:19088/harpoxy-status)可以隨意指定
stats realm welcom login\ Haproxy #密碼框上的文本信息
stats auth admin:admin #登陸的用戶名和密碼
stats auth admin1:admin1
stats hide-version #隱藏統(tǒng)計(jì)頁(yè)上版本信息
stats admin if TRUE #可以在控制頁(yè)上手工開關(guān)后端真實(shí)服務(wù)器
frontend www
bind *:80
mode http
option httplog #啟動(dòng)HTTP請(qǐng)求日志
option forwardfor #后端服務(wù)器需要獲取客戶端的真實(shí)IP
option httpclose #客戶端與服務(wù)器完成最后一次連接后监右,主動(dòng)關(guān)閉TCP連接
log global #使用全局的日志配置
acl host_www hdr_reg(host) -i ^(www.test.com|test.com)
acl host_bbs hdr_dom(host) -i bbs.test.com
use_backend server_www if host_www
use_backend server_bbs if host_bbs
#訪問www.test.com或test.com時(shí),使用server_www服務(wù)池
#訪問bbs.test.com 時(shí)使用server_bbs服務(wù)池
backend server_www
mode http
option redispatch #用戶cookie保持環(huán)境中册烈,將客戶的會(huì)話強(qiáng)制定向到一臺(tái)健康的服務(wù)器上
option abortonclose #自動(dòng)結(jié)束當(dāng)前隊(duì)列中處理時(shí)間比較長(zhǎng)的鏈接
balance source #定義負(fù)載均衡算法
cookie SERVERID #允許向cookie插入SERVERID
option httpchk GET /index.php #啟動(dòng)HTTP的服務(wù)狀態(tài)檢測(cè)功能(訪問這個(gè)網(wǎng)頁(yè)的返回狀態(tài)為200為正常巷燥,其他都為不正常)
server web1 192.168.1.10:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
server web2 192.168.1.20:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3
#定義后端正式服務(wù)器
backend server_bbs
mode http
option redispatch
option abortonclose
balance source
cookie SERVERID
option httpchk GET /index.php
server web1 192.168.1.30:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
server web2 192.168.1.40:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3
Haproxy日志策略
yum install syslog
vim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp #支持UDP協(xié)議的模塊
$UDPServerRun 514 #允許514端口接收UDP和TCP協(xié)議轉(zhuǎn)發(fā)過來(lái)的日志
local3.* /var/log/haproxy/haproxy.log
local0.* /var/log/haproxy/haproxy.log
wq!
vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS='-c 2 -r -m 0'
wq!
systemctl restart rsyslog
Haproxy運(yùn)行模式(mode)
tcp:客戶端和服務(wù)器端建立一個(gè)全雙工的連接,不對(duì)七層報(bào)文進(jìn)行檢測(cè)壮锻,常用于SLL.SSH.SMTP等應(yīng)用
http:客戶端請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器之前會(huì)被深度分析樟澜,所有不與RFC格式兼容的請(qǐng)求都會(huì)被拒絕
health:基本不用的模式
負(fù)載均衡算法(balance)
roundrobin:基于權(quán)重的輪叫調(diào)度
static-rr:靜態(tài)基于權(quán)重的輪叫調(diào)度误窖,運(yùn)行中調(diào)整不會(huì)生效
source:基于請(qǐng)求源ip的算法叮盘,可使一個(gè)客戶端的IP請(qǐng)求始終轉(zhuǎn)發(fā)到特定的服務(wù)器
leastconn:將新的連接請(qǐng)求轉(zhuǎn)發(fā)到最少連接數(shù)的后端服務(wù)器。(數(shù)據(jù)庫(kù)負(fù)載適合使用)
uri:對(duì)部分或則整個(gè)uri進(jìn)行hash運(yùn)算霹俺,然后除以總權(quán)重柔吼,轉(zhuǎn)發(fā)到匹配的服務(wù)器
uri_param:根據(jù)URL路徑中的參數(shù)進(jìn)行轉(zhuǎn)發(fā),保證后端服務(wù)器數(shù)量不變時(shí)丙唧,同一個(gè)用戶請(qǐng)求始終到同一臺(tái)服務(wù)器
hdr(<name>):根據(jù)http頭進(jìn)行轉(zhuǎn)發(fā)愈魏,如果指定的頭不存在,則用roundrobin進(jìn)行轉(zhuǎn)發(fā)