千萬級高併發負載均衡軟件haproxy配置文件詳解 千萬級高併發負載均衡軟件haproxy配置文件詳解

千萬級高併發負載均衡軟件haproxy配置文件詳解php

 

 

balance roundrobin         #輪詢方式html

balance source               #將用戶IP通過hash計算後,使同一IP地址的全部請求都發送到同一固定的後端真實服務器上,與nginx的ip_hash相同,都是爲了解決haproxy與客戶端session一致性的問題前端

balance leastconn           #最小鏈接nginx

 

--------------------------------------------------------------------------------web

 10.0.3.121:8080 ----->10.0.3.122:9090redis

用haproxy作端口轉發實現以上功能:

global
maxconn 40000
#debug #調試模式,輸出啓動信息到標準輸出
#quiet     #安靜模式,啓動時無輸出
user allison
group users
nbproc 1
log 127.0.0.1 local3
spread-checks 2
defaults
option srvtcpka
option clitcpka
option tcpka
 
#如下幾個timeout值注意不能設置過短,不然客戶端和服務端鏈接容易斷掉,默認單位:毫秒
timeout server 300s
timeout connect 300s
timeout client 300s
timeout http-request 300s
timeout queue 300s
listen yuan 10.0.3.121:8080
mode tcp
option persist #強制將http請求發往已經down 掉的server
server mubiao 10.0.3.122:9090 weight 256

---------------------------------------------------------------------------------------------------------------------------------------算法

#global:參數是進程級的,一般和操做系統(OS)相關。這些參數通常只設置一次,若是配置無誤,就不須要再次配置進行修改 後端

#frontend:接收請求的前端虛擬節點,Frontend能夠根據規則直接指定具體使用後端的backend(可動態選擇)。 服務器

#HAProxy支持兩種主要的代理模式:"tcp"也即4層(大多用於郵 件服務器、內部協議通訊服務器等),和7層(HTTP)。在4層模式下,HAproxy僅在客戶端和服務器之間轉發雙向流量。7層模式下,HAProxy 會分析協議,而且能經過容許、拒絕、交換、增長、修改或者刪除請求(request)或者回應(response)裏指定內容來控制協議,這種操做要基於特定規則。cookie

maxconn 4096        #最大鏈接數
        chroot /usr/local/haproxy    #改變當前工做目錄
        uid 99                       #所屬運行的用戶uid
        gid 99                       #所屬運行的用戶組
        daemon                   #之後臺形式運行ha-proxy
        nbproc 3                 #啓動3個ha-proxy實例

        pidfile /usr/local/haproxy/run/haproxy.pid     #pid文件位置
        debug        #調試模式,輸出啓動信息到標準輸出
        #quiet     #安靜模式,啓動時無輸出

defaults                       #默認設置
        log     global
        log     127.0.0.1       local3       #日誌文件的輸出定向
        mode    http                            #所處理的類別,默認採用http模式,可配置成tcp做4層消息轉發
        option  httplog                         #日誌類別,採用httplog
        option  httpclose               #每次請求完畢後主動關閉http通道,ha-proxy不支持keep-alive,只能模擬這種模式的實現

        option  dontlognull        #保證HAProxy不記錄上級負載均衡發送過來的用於檢測狀態沒有數據的心跳包
         option  redispatch     #是否容許從新分配在session 失敗後
        retries 2                      #3次鏈接失敗就認爲服務器不可用,主要經過後面的check檢查          

        maxconn 2000             #最大鏈接數
        balance roundrobin                     #負載均衡算法
        stats   uri     /haproxy-stats        #haproxy 監控頁面的訪問地址,可經過http://ip/haproxy-stats訪問
        contimeout      5000                   #鏈接超時時間       
        clitimeout      50000                   #客戶端鏈接超時時間
        srvtimeout      50000                 #服務器端鏈接超時時間

listen app-balancer 0.0.0.0:80
        mode http
      #  log 127.0.0.1 local3
        #cookie ServerID insert nocache
        cookie ServerID prefix
        cookie JSESSIONID prefix

        capture request header Cookie len 200
        capture request header X-Forwarded-For len 15
        capture request header Host len 15
        capture request header Referrer len 15

        appsession JSESSIONID len 52 timeout 1080000
        balance roundrobin
        option httpchk GET /ok.jsp HTTP/1.0   #健康檢查
        server app_1 192.168.0.243:8080 cookie app1 minconn 100 maxconn 40960 check inter 5000 rise 2 fall 5 weight 2
        server app_2 192.168.0.242:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 2
        server app_4 192.168.0.245:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 1
        #option forwardfor except 192.168.0.159
        option forwardfor
        stats enable
        stats uri /haproxy-stat
        stats realm "test_123 monitor"
        stats auth admin:admin

 

從新打開配置文件haproxy.cfg,留意最下部分的均衡主機選項
listen  localhost 0.0.0.0:1080                   #運行的端口及主機名
   mode    http
   option  httpchk GET /index.htm              #用於健康檢測的後端頁面
   server  s1 127.0.0.1:3121 weight 3 check    #後端的主機 IP &權衡
   server  s2 127.0.0.1:3122 weight 3 check    #後端的主機 IP &權衡

在實驗中,咱們的的後端是 squid 分開了2個端口在同一臺服務器上。
以其中一項爲例:

server  s1 127.0.0.1:3121 weight 3 check

s1                     是可本身定義的服務器別名
127.0.0.1:3121   服務器的IP地址以及端口號
weight 3        所能分配到請求的高低權衡,數字越大分配到的請求數就越高
check          接受 haproxy 的定時檢查,以肯定後端服務器的健康狀況。

如需配置虛擬主機,至關簡單,緊需修改 localhost 爲你虛擬主機的的域名,加到haproxy配置中, 再爲其分配後端服務器的參數便可。

 例:

listen  www.x1.com 0.0.0.0:1080                    #運行的端口及主機名
   mode    http
   option  httpchk GET /index.htm              #用於健康檢測的後端頁面
   server  s1 127.0.0.1:3121 weight 3 check  #後端的主機 IP &權衡
   server  s2 127.0.0.1:3122 weight 3 check  #後端的主機 IP &權衡

listen  www.x2.com 0.0.0.0:1080                     #運行的端口及主機名
   mode    http
   option  httpchk GET /index.htm                     #用於健康檢測的後端頁面
   server  s1 127.0.0.1:3121 weight 3 check       #後端的主機 IP &權衡
   server  s2 127.0.0.1:3122 weight 3 check       #後端的主機 IP &權衡

保存配置後從新加載,便可生效,刷新管理頁面也可看到新的虛擬主機。

 

 

反覆測試,得出其結果:
Haproxy 單獨進行均衡負載的性能最強,超過了Nginx。
然而 Nginx + Haproxy 的搭配性能最弱,應該是跟經過了2層反向代理有關。
因此想用 Haproxy 替代 Nginx 所自帶的均衡負載功能將會令性能打折。
但雖然如此 Haproxy 對均衡負載功能遠比 Nginx 成熟,例如session粘貼,cookies 引導等都是 nginx 所沒有的。
可根據須要而選擇搭配。

 

相關啓動參數介紹 

   #./haproxy –help //haproxy相關命令參數介紹.

   haproxy  -f  <配置文件>  

[-n 最大併發鏈接總數] [-N 每一個偵聽的最大併發數] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]

       [-ds] [-de] [-dp] [-db] [-m <內存限制M>] [{-sf|-st} pidlist...]

       -d     前臺,debug模式 

       -D     daemon模式啓動 

       -q     安靜模式,不輸出信息

       -V     詳細模式

       -c     對配置文件進行語法檢查

       -s     顯示統計數據

       -l     顯示詳細統計數據

       -dk    不使用kqueue

       -ds    不使用speculative epoll

       -de    不使用epoll

       -dp    不使用poll

       -db    禁用後臺模式,程序跑在前臺

       -sf <pidlist>      程序啓動後向pidlist裏的進程發送FINISH信號,這個參數放在命令行的最後

       -st <pidlist>      程序啓動後向pidlist裏的進程發送TERMINATE信號,這個參數放在命令行的最後

附:一個比較簡單的配置文件內容

global  
        log 127.0.0.1   local0
        maxconn 4096
        chroot /usr/local/haproxy
        uid 99
        gid 99
        daemon
        nbproc 1
        pidfile /usr/local/haproxy/haproxy.pid          
        debug #quiet
defaults  
        log     127.0.0.1       local3
        mode    http
        option httplog
        option httpclose
        option dontlognull
        option forwardfor
        option redispatch
        retries 2
        maxconn 2000
        balance roundrobin
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000 
  
listen webinfo :1080  
       mode http  
       balance roundrobin  
       option httpclose  
       option forwardfor  
server phpinfo1 192.168.18.2:10000 check weight 1 minconn 1 maxconn 3 check inter 40000  
server phpinfo2 127.0.0.1:80 check weight 1 minconn 1 maxconn 3 check inter 40000  
  
listen webmb :1081  
       mode http  
       balance roundrobin  
       option httpclose  
       option forwardfor  
server webmb1 192.168.1.91:10000 weight 1 minconn 1 maxconn 3 check inter 40000  
server webmb2 127.0.0.1:10000 weight 1 minconn 1 maxconn 3 check inter 40000  
  
listen stats :8888  
       mode http  
       transparent  
       stats uri / haproxy-stats  
       stats realm Haproxy \ statistic  
       stats auth admin:admin

------------------------------------------------------------------------------------------------

acl(關鍵字) 定義acl(名稱)  方法           -i (忽略大小寫)  [匹配的路徑或文件]
                           hdr_beg(host)
                          hdr_reg(host)
                          path_beg
                          path_end
 
 
 
另附一我本身的實例: 
複製代碼
複製代碼
  1 global
  2         log 127.0.0.1 local3 debug
  3         maxconn 50000   
  4         chroot /usr/local/haproxy
  5         uid 99   
  6         gid 99   
  7         daemon  
  8         nbproc 4
  9         pidfile /usr/local/haproxy/haproxy.pid  
 10 #######
 11 defaults
 12         log     global
 13         mode    http
 14         option  dontlognull
 15         retries 3
 16         option redispatch
 17         maxconn 50000
 18         timeout connect    5000
 19         timeout client     50000
 20         timeout server     50000
 21 ######
 22 
 23 
 24 frontend http-in
 25          bind *:80   
 26          acl push dst 10.2.1.106
 27          acl match  dst 10.2.1.107
 28          acl social dst  10.2.1.108
 29          acl promotion dst  10.2.1.109
 30          acl cms dst  10.2.1.111
 31          acl cms-web dst 10.2.1.119
 32          #acl cms dst  10.2.1.111
 33          #errorfile 404 /usr/local/haproxy/html/404.html
 34 
 35          use_backend Push if push    
 36          use_backend Match if match
 37          use_backend Social if social
 38          use_backend Promotion  if promotion 
 39          use_backend CMS  if cms
 40          
 41 backend  Push    
 42          balance roundrobin    
 43          cookie SERVERID insert nocache indirect 
 44          option httpclose    
 45          option forwardfor   header X-Forwarded-For      
 46          #若是服務器上的應用程序想記錄發起請求的客戶端的IP地址,須要在HAProxy上配置此選項,這樣HAProxy會把客戶端的IP信息發送給服務器,在HTTP請求中添加"X-Forwarded-For"字段
 47          server 10.2.1.53-PS 10.2.1.53:8094 backup check inter 5000 fall 1 rise 2 
 48          server 10.2.1.54-PS 10.2.1.54:8094  check inter 5000 fall 1 rise 2   
 49          #check inter 5000 是檢測心跳頻率,rise 2是2次正確認爲服務器可用,fall 1是1次失敗認爲服務器不可用,weight表明權重
 50          timeout server     50000 
 51          
 52 backend  Match    
 53          balance roundrobin    
 54          cookie SERVERID insert nocache indirect 
 55          option httpclose    
 56          option forwardfor   header X-Forwarded-For 
 57          server 10.2.1.53-MC 10.2.1.53:8992 backup check inter 5000 fall 1 rise 2
 58          server 10.2.1.54-MC 10.2.1.54:8992  check inter 5000 fall 1 rise 2 59  
   timeout server 50000 60 61 backend Social 62 balance roundrobin 63 cookie SERVERID insert nocache indirect 64 option httpclose 65 option forwardfor header X-Forwarded-For 66 server 10.2.1.53-weibo 10.2.1.53:25100 check inter 5000 fall 1 rise 2 67 server 10.2.1.54-weibo 10.2.1.54:25100 backup check inter 5000 fall 1 rise 2 68 timeout server 50000 69 70 backend CMS 71 balance roundrobin 72 cookie SERVERID insert nocache indirect 73 option httpclose 74 option forwardfor header X-Forwarded-For 75 server 10.2.1.53-CMS 10.2.1.53:9981 check inter 5000 fall 1 rise 2 76 server 10.2.1.54-CMS 10.2.1.54:9981 backup check inter 5000 fall 1 rise 2 79 timeout server 50000 80 81 backend Promotion 82 balance roundrobin 83 cookie SERVERID insert nocache indirect 84 option httpclose 85 option forwardfor header X-Forwarded-For 86 server 10.2.1.53-PRO 10.2.1.53:8982 check inter 5000 fall 1 rise 2 87 server 10.2.1.54-PRO 10.2.1.54:8982 backup check inter 5000 fall 1 rise 2 88 timeout server 50000 89 90 91 92 ####### 93 listen localhost 10.2.1.53:18888 94 mode http 95 stats refresh 30s #統計頁面的自動刷新時間 96 stats uri /haproxy-stats #統計頁面的url 97 stats realm Haproxy \ statistic #統計頁面密碼框上提示的文本 98 stats auth admin:uuzz@123 #統計頁面用戶名和密碼設置 99 stats hide-version #隱藏統計頁面上HAProxy的版本信息 100 stats admin if TRUE #手工啓用/禁用,後端服務器
複製代碼
複製代碼

 

 

另:

COOKIE 選項:

cookie JSESSIONID prefix :若是客戶端只支持一個cookie,而且服務器上的應用程序已經對返回設置了cookie,HAProxy設置此選項能夠改寫應用程序設置的cookie信息,把服務器的信息添加到原cookie中去。

cookie SERVERID indirect :HAProxy會刪除添加的cookie信息,避免此cookie信息發送到服務器。

cookie SERVERID rewrite :

cookie SERVERID insert :

cookie SERVERID insert nocache :

cookie SERVERID insert postonly :

 

cookie參數設置:  http://dngood.blog.51cto.com/446195/1098105/

相關文章
相關標籤/搜索