博文目錄
1、Haproxy概述
一、HTTP請求
二、負載均衡經常使用調度算法
三、常見的Web羣集調度器
2、Haproxy配置項介紹
一、global配置項一般有下面配置參數:
二、defaults配置項配置默認參數,通常會被應用組件繼承,若是在應用組件中沒有特別的聲明,將安裝默認配置參數:
三、listen配置項通常配置應用模塊參數:
3、Haproxy的參數優化php
Haproxy是目前比較流行的一種羣集調度工具,同類羣集調度工具備不少,如LVS和Nginx。相比較而言,LVS性能最好,可是搭建相對複雜;Nginx的upstream模塊支持羣集功能,可是對羣集節點健康檢查功能不強,性能沒有Haproxy好。Haproxy官方網站是http://www.haproxy.org/ 。html
經過URL訪問網站使用的協議是HTTP協議,此類請求通常稱爲HTTP請求。HTTP請求的方式分爲GET方式和POST方式。
當使用瀏覽器訪問某一個URL,會根據請求URL返回狀態碼,一般正常的狀態碼爲2 X X、3 X X(如200、301),若是出現異常會返回4 X X、5 X X(如400、500)。例如:訪問http://www.test.com/a.php?ld=123 ,就是一個GET請求,若是訪問正常,會從服務器的日誌中獲取200狀態碼。假如此請求使用POST方式,那麼傳遞給a.php的ld參數依舊是123,可是瀏覽器的URL將不會顯示後面的ld=123字樣,所以表單類或者有用戶名、密碼等內容提交時建議使用POST方式。無論使用哪一種方式,最終a.php獲取的值是同樣的。redis
LVS、Haproxy、Nginx最經常使用的調度算法有三種,以下所述:算法
RR(Round Robin):動態加權輪詢算法,支持權重的運行時調整及慢啓動機制;最大支持4095個後端主機;在服務器的處理時間平均分配的狀況下這是最流暢和公平的算法。該算法是動態的,對於實例啓動慢的服務器權重會在運行中調整。後端
LC(Least Connections): 最小鏈接數算法,鏈接數最少的服務器優先接收鏈接。建議用於長會話場景中使用,例如LDAP、SQL等協議,而不適合短會話協議。如HTTP.該算法是動態的,對於實例啓動慢的服務器權重會在運行中調整。瀏覽器
- SH(Source Hashing):源地址哈希算法,對請求源IP地址進行哈希;取模法:將源地址hash計算後除以服務器總權重,服務器變更會影響全局調度效果;根據結果進行分配。只要服務器正常,同一個客戶端IP地址老是訪問同一個服務器。若是哈希的結果隨可用服務器數量而變化,那麼客戶端會定向到不一樣的服務器;該算法默認是靜態的,因此運行時修改服務器的權重是無效的,可是算法會根據「hash-type」的變化作調整。
該算法通常用於不能插入cookie的Tcp模式。它還能夠用於廣域網上爲拒絕使用會話cookie的客戶端提供最有效的粘連;一致性hash:服務器變更僅影響局部調度;動態調度。
目前常見的Web羣集調度器分爲軟件和硬件,軟件一般使用開源的LVS、Haproxy、Nginx;硬件通常使用比較多的是F5,也有不少人使用國內的一些產品,如梭子魚、綠盟等。服務器
Haproxy的配置文件一般分爲三個部分:cookie
- global;
- defaults;
- listen;
global爲全局配置,defaults爲默認配置,listen爲應用組件配置。
global log 127.0.0.1 local <!--配置日誌記錄,local0爲日誌設備,默認存放到系統日誌--> log 127.0.0.1 local1 notice <!--notice爲日誌級別,一般有24個級別--> #log loghost local0 info maxconn 4096 <!--最大鏈接數--> chroot /usr/share/haproxy <!--該服務自設置的根目錄,通常需將此行註釋掉--> uid 99 <!--用戶UID--> gid 99 <!--用戶GID--> daemon <!--守護進程模式-->
defaults log global <!--定義日誌爲global配置中的日誌定義--> mode http <!--模式爲http--> option httplog <!--採用http日誌格式記錄日誌--> option dontlognull retries 3 <!--檢查節點服務器失敗次數,連續達到三次失敗,則認爲節點不可用--> redispatch <!--當服務器負載很高時,自動結束當前隊列處理比較久的鏈接--> maxconn 2000 <!--最大鏈接數--> contimeout 5000 <!--鏈接超時時間--> clitimeout 50000 <!--客戶端超時時間--> srvtimeout 50000 <!--服務器超時時間-->
listen appli4-backup 0.0.0.0:10004 <!--定義一個名爲appli4-backup的應用--> option httpchk /index.html <!--檢查服務器的index.html文件--> option persist <!--強制將請求發送到已經down掉的服務器,通常禁用此選項--> balance roundrobin <!--負載均衡調度算法使用輪詢算法--> server inst1 192.168.114.56:80 check inter 2000 fall 3 <!--定義在線節點--> server inst2 192.168.114.56:81 check inter 2000 fall 3 backup <!--定義備份節點--> <!--注意:在以上定義備份節點的參數中, 「check inter 2000」表示haproxy服務器和節點之間的一個心跳率, 「fall 3」表示連續三次檢測不到心跳頻率則認爲該節點失效。 節點配置後帶有「 backup」表示該節點只是個備份節點, 只有主節點失效該節點纔會上。去除backup,表示爲主節點, 和其餘主節點共同提供服務-->
關於Haproxy的參數優化,如下列舉了幾個關鍵的參數,並對各參數的生產環境的優化建議作了說明:app
—————— 本文至此結束,感謝閱讀 ——————負載均衡