1、HAProxy 介紹
haproxy是一個開源的反向代理或者說是負載均衡服務服務軟件之一,它支持雙機熱備、虛擬主機、基於TCP和http應用代理、具有圖形界面等功能,支持節點健康檢查,自動剔除和添加。
1、HAProxy是支持虛擬主機的,可以工作在4、7層(支持多網段);
2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作;
3、支持url檢測後端的服務器;
4、它跟LVS一樣,本身僅僅就只是一款負載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的;
5、HAProxy可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10臺時性能不如LVS;
6、HAProxy的算法較多,達到8種;
2、實驗環境
機器
10.0.10.8 HAProxy
10.0.10.12 Nginx靜態
10.0.10.10 Ngins動態,LNMP平臺
系統版本和內核
# cat /etc/redhat-release
CentOS release 6.6 (Final)
# uname -r
2.6.32-504.3.3.el6.x86_64
3、配置說明
Global settings 全局配置
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog #修改syslog配置文件
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog #定義日誌設備
#
# local2.* /var/log/haproxy.log #記錄日誌的目錄和級別
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid #pid文件目錄
maxconn 4000 #最大連接數,默認是4000
user haproxy #用戶
group haproxy #組
daemon #創建1個進程進入deamon模式運行。此參數要求將運行模式設置爲"daemon"
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
defaults 默認配置
mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
log global #採用全局定義的日誌
option httplog #日誌類別http日誌格式
option dontlognull #不記錄健康檢查的日誌信息
option http-server-close #每次請求完畢後主動關閉http通道
option forwardfor except 127.0.0.0/8 #不記錄本機轉發的日誌
option redispatch #serverId對應的服務器掛掉後,強制定向到其他健康的服務器
retries 3 #3次連接失敗就認爲服務不可用,也可以通過後面設置
timeout http-request 10s #請求超時
timeout queue 1m #隊列超時
timeout connect 10s #連接超時
timeout client 1m #客戶端連接超時
timeout server 1m #服務器連接超時
timeout http-keep-alive 10s #長連接超時
timeout check 10s #檢查超時
maxconn 3000 #最大連接數
acl配置
frontend main *:5000
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static #滿足策略要求,則響應策略定義的backend頁面
default_backend app #不滿足則響應backend的默認頁面
定義後端配置
#定義使用靜態後端圖像,樣式表等
backend static #定義靜態
balance roundrobin #負載均衡模式輪詢
server static 127.0.0.1:4331 check #服務器定義
backend app
balance roundrobin #負載均衡模式輪詢
server app1 127.0.0.1:5001 check #服務器定義,check進行健康檢查
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
4、算法
roundrobin:相當LVS的wrr。加權輪詢調度,支持慢起動,支持運行時調整,最多允許有4095個後端服務器,
static-rr:相當LVS的wrr。靜態輪詢調度,不支持運行時調整,調整後需要重啓服務。
leastconn:相當於LVS的wlc 。最小連接,擁有最小連接的後端服務器優先被調用。支持運行時調整算法參數
source:相當於LVS的sh算法,來自於同一個ip地址的請求,將被髮向同一個後端服務器。建議用於基於TCP調度,且不支持使用cookie插入時使用。是否爲動態由hash-type參數的dynamic或static決定。一般用來做session綁定。
uri:也是根據hash調度的,是根據請求報文uri的左半部分(查詢條件之前的部分)或全部uri進行惟一碼計算一個hash碼。可以讓請求的同一個資源都會發往同一個後端的服務器。一般用在緩存服務器上,可以提高緩存命中率。是否爲動態算法,取決於hash-type的取值。
url_param:根據url的請求參數的值做hash,常在後端服務器需要對用戶進行認證的場景中,能夠把經過用戶認證的url始終發向同一個後端服務器
hdr(<name>):根據用戶請求報文中指定的http首部指定的值進行調度,適用於後端爲虛擬主機的場景。還可以根據域名進行hash值計算,這樣可以把同一個域下的主機發送到同一個後端服務器,這個參數是 use_domain_only。 是否爲動態算法還是取決於hash-type的值。
rdp-cookid: 主要對rdp協議做負載均衡
rdp-cookid(name):主要對rdp協議做負載均衡
5、簡單實現負載均衡
cat /etc/haproxy/haproxy.cfg
frontend websrv *:80
default_backend webservers
backend webservers
balance roundrobin
server nginx01 10.0.10.12:80 check
server nginx02 10.0.10.10:80 check
檢測效果,按F5的,一比一輪詢
6、記錄日誌
1.# vi /etc/rsyslog.conf 裝載模塊
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
#級別高,添加一個低的
# Save boot messages also to boot.log
local7.* /var/log/boot.log
local2.* /var/log/haproxy.log
2.重新加載啓動服務
# /etc/init.d/rsyslog restart
關閉系統日誌記錄器: [確定]
啓動系統日誌記錄器 [確定]
# /etc/init.d/haproxy reload
重新載入 haproxy:
3.查看日誌
[root@HAproxy ~]# tail -f /var/log/haproxy.log
Aug 23 03:22:35 localhost haproxy[2199]: Proxy websrv stopped (FE: 1 conns, BE: 0 conns).
Aug 23 03:22:35 localhost haproxy[2199]: Proxy webservers stopped (FE: 0 conns, BE: 9 conns).
7、配置圖形監控頁面
listen stats
mode http
bind 0.0.0.0:1080
stats enable
stats hide-version
stats uri /haproxyadmin?stats
stats realm Haproxy\ Statistics
stats auth admin:123456
stats admin if TRUE
顯示效果
8、動靜分離
frontend http-in
bind *:80
mode http
log global
option httpclose
option logasap
option dontlognull
capture request header Host len 20
capture request header Referer len 60
acl url_static path_beg -i /images /stylesheets /vedios /javascript
acl url_static path_end -i .html .jpg .gif .png .js .css
acl url_dynamic path_end -i .php
use_backend static if url_static
default_backend dynamic
backend static
balance roundrobin
server websrv1 10.0.10.12:80 check rise 2 fall 1
server websrv2 10.0.10.12:8080 check rise 2 fall 1
backend dynamic
balance roundrobin
server websrv3 10.0.10.10:80 check rise 2 fall 1
server websrv4 10.0.10.10:8080 check rise 2 fall 1
顯示效果
4.訪問指定的目錄中的圖片