HAProxy 配置說明 動靜分離

wKiom1Xm8IKDvXogAACNkbOZ8S8707.jpg

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的,一比一輪詢

wKioL1Xm8vDiu1otAABzXq_-WkE231.jpg

wKiom1Xm8PnhSIPVAAB6BFMuGFg139.jpg

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
顯示效果

wKioL1Xm81aSqvxDAAhEl9V8Dog083.jpg

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

顯示效果

  1. 默認是動態的網頁,按F5刷新

    wKiom1Xm8bvje5mJAABv3bQwmQ0926.jpg

    wKioL1Xm8_mgrdknAABfa_bg5Zs082.jpg

  2. 訪問靜態的網頁

    wKioL1Xm9FrwKCCcAAB8kF2AHo0442.jpg

    wKiom1Xm8kXhG7uOAAB1t5MuQeU165.jpg

  3. 訪問圖片

    wKiom1Xm8syRFtHbAAKl-fCSJTs253.jpg

4.訪問指定的目錄中的圖片

wKiom1Xm8vzxtyaAAAUKE6hmEQY696.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章