1. 程式人生 > >HAproxy簡介

HAproxy簡介

linux

關於HAproxy這個東西對於互聯網企業來說絕對不陌生,一個在負載均衡上可以和專業硬件相比都不遜色的一款軟件。HAproxy是一個使用C語言便攜的自由及開放源代碼軟件,其提供高性能,負載均衡,以及基於TCP和HTTP的應用程序代理。相比較Nginx來言,HAproxy更專註反向代理,因此他可以支持更多的選項更精細的控制更多的健康監測機制和負載均衡算法。

HAproxy特別適用哪些負載特別大的web站點,這些站點通常又需要會話保持或七層處理。HAproxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以簡單的整合進你當前的架構中,同時可以保護你的web服務器不被暴露到網絡上。

至於它的特點那就多了:

1.出色的可靠性和穩定性

2.支持拒絕連接,防止DOS攻擊

3.支持長連接,短連接和日誌功能

4.路由HTTP請求到後端服務器,基於cookie作為會話綁定;同時支持通過制定的url來檢測後端real server的狀態

5.支持強大的ACL,靈活的路由配置,能實現動靜分離

6.可支持四層和七層負載

7,擁有功能強大的後端服務器狀態監測web頁面,可以實時了解設備的運行狀態,還可實現設備的上下線。

8.支持多種負載均衡調度算法,並且支持session保持

這麽強大的軟件是不是很想要0.0 他的主要安裝方式就是yum源安裝和源碼安裝 #有點區別那就是yum安裝不易出錯比較簡單,而編譯安裝則對自己的需求來安裝,更適合自己。


關於配置文件

他的配置文件所在/etc/haproxy/haproxy.cfg

在他的配置文件內主要有那麽兩個大部分global settings(全局設置)和proxies(對代理的設定)。

global settings:定義關於進程管理和性能的參數

daemon:讓haproxy以守護進程的方式工作於後臺,其等同於“-D”選項的功能

gid:已制定的GID運行haproxy #默認haproxy

group:組名,不過gid使用組號

uid:已指定UID運行

user:使用用戶名

log:定義全局的syslog服務器 #比如log 127.0.0.1 local2(需要在/etc/rsyslog/日誌服務內定義local2)

stats:可開啟一個unix socket管理接口

maxconn:最大打開文件數量

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

proxies:proxies又分為四個段default frontend backend listen這四個段

default段參數解讀:

defaults
    mode                    http          #模式為http
    log                     global        #全局日誌
    option                  httplog       #啟用記錄http請求日誌,默認不啟用
    option                  dontlognull   #日誌不記錄空連接
    option http-server-close              #長連接     
    option forwardfor       except 127.0.0.0/8      #添加forwardfor日指標記
    option                  redispatch    #某臺服務器宕機,強制定向到其他健康服務器 
    retries                 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          #能接受的最大並發連接數

關於frontend相關配置:#監聽套接字可以接受客戶端請求並且建立連接

        具體格式如下
     frontend webserver  #frontend為代碼要求 weserver為自己定義的名字
        bind *:80        # bind綁定端口,後面為IP:端口號(監聽端口)
        default_backend webserver   #默認的backend,下面的bacend來調用

關於backend的相關配置和舉例:backend段用於定義後端real server,代理請求給後端服務器。

調度算法:

roundrobin:基於權重進行輪叫,在服務器的處理時間保持均勻分布時,這是最平衡、最公平的算法。此算法是動態的,這表示其權重可以在運行時進行調整,不過,在設計上,每個後端服務器僅能最多接受4128個連接;

static-rr:基於權重進行輪叫,與roundrobin類似,但是為靜態方法,在運行時調整其服務器權重不會生效;不過,其在後端服務器連接數上沒有限制;

leastconn:新的連接請求被派發至具有最少連接數目的後端服務器;在有著較長時間會話的場景中推薦使用此算法,如LDAP、SQL等,其並不太適用於較短會話的應用層協議

first:根據服務器在列表中的位置,自上而下進行調度;前面服務器的連接數達到上限,新請求才會分配給下一臺服務;

source:根據原地址hash可以使客戶端一直定向到某個客戶端

    backend webserver #backend代碼格式 webserver則為上面frontend定義的
    balance     roundrobin                #調度算法
    server  app1 172.17.200.78:80 check   #    後端服務  check檢查(可以不加)
    server  app2 172.17.200.79:80 check   #格式為  server address [:port][param]

param的簡單參數(可以定義多個,check僅為其中的一個)

backup:為備用的服務器加上此選項之後則其他機器全部宕機之後該服務器啟動# !註意,全部宕機

check:後面跟參數檢查inter檢查健康狀態間隔默認毫秒,rise離線到正常的檢測次數,fall正常到不可用的檢查次數 # inter 3000 rise 2 fall 2

cookie:指定server設定cookie值,用來指定連接 #連到某臺server則一直保持連接該服務器

weight:權重 默認為1


Listen可以說是把frontend和backend結合起來但不建議這樣使用,現在可以用來建立一個健康監測頁面的listen段。

listen stats #定義一個統計報告服務
mode http    #基於http協議
bind 0.0.0.0:1080     #監聽1080端口
stats enable          #開啟統計報告服務
stats hide-version    #隱藏統計報告版本信息
stats uri /haproxyadmin?stats   #統計報告訪問url
stats realm Haproxy\ Statistics #頁面登陸信息
stats auth admin:admin   #驗證賬號信息
stats admin if TRUE      #驗證模式



接下來借用一個keepalived來配合HAproxy做一個簡單的負載均衡:

keepalived配置如下,具體就不說怎麽做了!!!就是用來IP地址訪問和實現高可用的,地址轉移,不細說了。就說一點這裏面設置了一個172.17.200.100的IP來讓外界訪問。而這個地址可以轉移!

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth2
    virtual_router_id 76
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 9000
    }
    virtual_ipaddress {
172.17.200.100
}
}

HAproxy配置如下:

frontend webserver
        bind *:80
        default_backend webserver
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend webserver
    balance     roundrobin
    server  app1 172.17.200.78:80 check
    server  app2 172.17.200.79:80 check

定義frontend端口和名稱,下面backend來調用即可,這裏調用三個兩個real server。這就差不多了 0.0可以訪問一下嘗試了。

記得訪問172.17.200.100













本文出自 “mlon客” 博客,請務必保留此出處http://13154101.blog.51cto.com/13144101/1980903

HAproxy簡介