- 介紹
- HAProxy是支持虛擬主機(jī)的,通過(guò)frontend指令來(lái)實(shí)現(xiàn)
- 能夠補(bǔ)充Nginx的一些缺點(diǎn)比如Session的保持壹置,Cookie的引導(dǎo)等工作
- 支持url檢測(cè)后端的服務(wù)器出問(wèn)題的檢測(cè)會(huì)有很好的幫助昌执。
- 它跟LVS一樣荣茫,本身僅僅就只是一款負(fù)載均衡軟件丧慈;單純從效率上來(lái)講HAProxy更會(huì)比Nginx有更出色的負(fù)載均衡速度馍迄,在并發(fā)處理上也是優(yōu)于Nginx的艳吠。
- HAProxy可以對(duì)Mysql讀進(jìn)行負(fù)載均衡麦备,對(duì)后端的MySQL節(jié)點(diǎn)進(jìn)行檢測(cè)和負(fù)載均衡,不過(guò)在后端的MySQL slaves數(shù)量超過(guò)10臺(tái)時(shí)性能不如LVS昭娩,所以我向大家推薦LVS+Keepalived凛篙。
- 能對(duì)請(qǐng)求的url和header中的信息做匹配,有比lvs有更好的7層實(shí)現(xiàn)
- HAProxy的負(fù)載均衡算法現(xiàn)在也越來(lái)越多了栏渺,具體有如下8種:
① roundrobin呛梆,表示簡(jiǎn)單的輪詢,這個(gè)不多說(shuō)磕诊,這個(gè)是負(fù)載均衡基本都具備的填物;
②static-rr纹腌,表示根據(jù)權(quán)重,建議關(guān)注滞磺;
③leastconn升薯,表示最少連接者先處理,建議關(guān)注击困;
④source涎劈,表示根據(jù)請(qǐng)求源IP,這個(gè)跟Nginx的IP_hash機(jī)制類似阅茶,我們用其作為解決session問(wèn)題的一種方法
⑤ri蛛枚,表示根據(jù)請(qǐng)求的URI;
⑥r(nóng)l_param脸哀,表示根據(jù)請(qǐng)求的URl參數(shù)'balance url_param' requires an URL parameter name蹦浦;
⑦h(yuǎn)dr(name),表示根據(jù)HTTP請(qǐng)求頭來(lái)鎖定每一次HTTP請(qǐng)求企蹭;
⑧rdp-cookie(name)白筹,表示根據(jù)據(jù)cookie(name)來(lái)鎖定并哈希每一次TCP請(qǐng)求智末。
- 安裝
1 下載鏈接
2 tar -zxvf haproxy-version.tar.gz
3 cd haproxy-version
4 uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Oct 29 17:29:29 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
5 make TARGET=linux31
6 make install PREFIX=/data/haproxy
7 cd /data/haproxy
8 mkdir conf
9 cd conf
9 touch haproxy.conf
10 vim haproxy.conf - 配置haproxy.conf
global
# 定義每個(gè)haproxy進(jìn)程的最大連接數(shù)
maxconn 40000
daemon
user haproxy
group haproxy
# 定義haproxy的pid谅摄,定義haproxy pid文件存放位置
pidfile /data/haproxy/h.pid
log 127.0.0.1:514 local2
defaults
log global
mode http
option httplog
option dontlognull
no option log-health-checks
no option dontlog-normal
option log-separate-errors
# add X-Forwarded-For: IP
option forwardfor
balance roundrobin
hash-type consistent
timeout connect 10000
timeout queue 1000
timeout tarpit 12000
timeout client 120000
timeout server 120000
timeout http-request 120000
timeout http-keep-alive 120000
timeout check 3000
grace 3000
frontend h_9999
maxconn 60000
bind 0.0.0.0:9999
use_backend weixin_server
# 這里定義你要代理的服務(wù)器
backend weixin_server
balance roundrobin
log global
cookie SERVERID
server db_test_155_8888 10.1.3.155:8888 check inter 2000 fall 3
11 添加haproxy 用戶和用戶組
groupadd haproxy #添加haproxy組
useradd -g haproxy haproxy -s /bin/false #創(chuàng)建nginx運(yùn)行賬戶haproxy并加入到haproxy組,不允許haproxy用戶直接登錄系統(tǒng)
12 啟動(dòng)
/data/haproxy/sbin/haproxy -f /data/haproxy/conf/haproxy.cfg
- 給haproxy 添加日志:
haproxy的日志需要打開(kāi)才能夠查看系馆,一般haproxy會(huì)將日志輸出到系統(tǒng)日志中送漠。haproxy 日志配置步驟如下:- vim /etc/rsyslog.conf
添加local0.* /var/log/haproxy.log
這里對(duì)路徑如果修改為/home/xinz/haproxytest/log目錄下,
由于rsyslog默認(rèn)情況下由蘑,沒(méi)有訪問(wèn)home目錄下的權(quán)限闽寡,
可以參考:You can generate a local policy module to allow this access.Doallow this access for now by executing:# grep rsyslogd /var/log/audit/audit.log | audit2allow -M mypol# semodule -i mypol.pp2.rsyslog - 默認(rèn)情況下,需要在514端口監(jiān)聽(tīng)UDP尼酿,
所以可以把/etc/rsyslog.conf如下的注釋去掉
$ModLoad imudp
$UDPServerRun 514
- 重啟 rsyslog
service rsyslog restart
service rsyslog status
- 配置Haproxy.conf代碼
global
log 127.0.0.1 local0 info - 日志輸出在/var/log/haproxy.log下
- vim /etc/rsyslog.conf