haproxy實現動靜分離

1.HAProxy簡介

    HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在時下的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。

    HAProxy實現了一種事件驅動、單一進程模型,此模型支持非常大的併發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千併發連接。事件驅動模型因爲在有更好的資源和時間管理的用戶端(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是爲什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。

    HAProxy是免費、極速且可靠的用於爲TCP和基於HTTP應用程序提供高可用、負載均衡和代理服務的解決方案,尤其適用於高負載且需要持久連接或7層處理機制的web站點。


2.HAProxy性能詳解

1).基於單進程、事件驅動模型顯著降低了上下文切換的開銷及內存佔用。

2).事件檢查器(event checker)允許其在高併發連接中對任何連接的任何事件實現即時探測。

3).在任何可用的情況下,單緩衝(single buffering)機制能以不復制任何數據的方式完成讀寫操作,這會節約大量的CPU時鐘週期及內存帶寬;

4).藉助於Linux 2.6 (>= 2.6.27.19)上的splice()系統調用,HAProxy可以實現零複製轉發(Zero-copyforwarding),在現在的新版本的Linux OS中還可以實現零複製啓動(zero-starting)

5).MRU內存分配器在固定大小的內存池中可實現即時內存分配,這能夠減少創建一個會話的時長;

6).樹型存儲:彈性二叉樹,實現了接近以O(1)的低開銷來保持計時器命令、保持運行隊列命令及管理輪詢及最少連接隊列;

7).優化的HTTP首部分析:優化的首部分析功能避免了在HTTP首部分析過程中重讀任何內存區域;

8).支持客戶端側的長連接(client-side keep-alive)並且支持TCP加速(TCP speedups)

9).基於源的粘性(source-based stickiness)及更詳細的健康狀態檢測(more verbose health checks)


3.HAPROTXY的主要特性

1)、HAProxy是支持虛擬主機的。

2)、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作

3)、支持url檢測後端的服務器出問題的檢測會有很好的幫助。

4)、它跟LVS一樣,本身僅僅就只是一款負載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的。

5)、HAProxy可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10臺時性能不如LVS,所以我向大家推薦LVS+Keepalived。

6)、HAProxy的算法現在也越來越多了,具體有如下8種:

①roundrobin,表示簡單的輪詢,這個是負載均衡基本都具備的;

②static-rr,表示根據權重,建議關注;

③leastconn,表示最少連接者先處理,建議關注;

④source,表示根據請求源IP,這個跟Nginx的IP_hash機制類似,我們用其作爲解決session問題的一種方法,建議關注;

⑤ri,表示根據請求的URI;

⑥rl_param,表示根據請求的URl參數'balance url_param' requires an URL parameter name;

⑦hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;

⑧rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求


4.簡單安裝和示例配置

安裝:在CentOS6的系統鏡像中默認已經集成了HAProxy,版本爲1.4.22。在這裏我們使用yum裝:

[root@HAProxy ~]# yum install haproxy #安裝

[root@HAProxy ~]# rpm -ql haproxy #查看生成的配置文件

/etc/haproxy

/etc/haproxy/haproxy.cfg

/etc/logrotate.d/haproxy

/etc/rc.d/init.d/haproxy

/usr/bin/halog

/usr/sbin/haproxy

/usr/share/doc/haproxy-1.4.22

......

簡單配置:

[root@HAProxy ~]# vim /etc/haproxy/haproxy.cfg

global                                                #全局設置

log 127.0.0.1 local2                                  #定義日誌的記錄的級別和服務器地址

chroot /var/lib/haproxy                               #限定相關用戶的訪問目錄

pidfile /var/run/haproxy.pid                          #pid文件的設置

maxconn 4000                                          #最大連接數的設置

user haproxy                                          #定義運行服務的用戶

group haproxy                                         #屬組

daemon                                                #設置服務後臺運行

stats socket /var/lib/haproxy/stats                   #打開狀態檢測socket

listen stats                                          #關聯前端和後端定義一個定義一個完整的代理

mode http                                             #設置代理協議

bind *:1080                                           #綁定相應的端口

stats enable                                          #開啓狀態檢測

stats hide-version                                    #隱藏代理服務器版本

stats uri /stats                                      #設置資源詳細記錄

stats realm haproxy_stats                             #設置登錄認證提示信息

stats auth admin:admin                                #設置登錄用戶和密碼

frontend main *:8080                                  #定義監聽套接字

acl url_static path_end -i .jpg .gif .png .css .js    #acl匹配靜態資源

use_backend static if url_static                      #如果匹配靜態資源使用static

default_backend app                                   #否則使用默認的後端服務器

backend static                                        #定義後端服務器的設置(匹配靜態)

balance roundrobin                                    #使用動態的輪詢調度算法

server static 192.168.21.4:80 check                   #設置代理的後端服務器地址

backend app                                           #定義匹配默認的後端服務器

balance roundrobin

server app1 192.168.21.1:80 check


wKioL1QfvSbABoVUAACwxgKnT-g577.png

定義haproxy雙網卡一個RIP 192.168.1.110 一個VIP 10.0.0.1

後端定義靜態內容服務器一個vip 10.0.0.2 

動態內容服務器vip 10.0.0.3

haproxy的配置文件如下

listen stats
    mode http
    bind *:1080
    stats enable
    stats hide-version
    stats uri       /stats
    stats realm     haproxy_stats
    stats auth      admin:admin

frontend  main *:8080
    acl url_static       path_end       -i .jpg .gif .png .css .js         
    use_backend static          if url_static
    default_backend             app
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
backend static
   balance     roundrobin
   server      static 10.0.0.2:80 check
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
backend app
    balance     roundrobin
    server  10.0.0.3:80 check


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