HAPRoxy(一):HAProxy基本配置、調度算法與tcp、http、heath模式配置示例


一、HAProxy安裝

1.HAProxy簡單介紹

HAProxy雖然名字前有HA,但它並不是一款高可用軟件,而是一款用於實現負載均衡的軟件,可實現四層與七層的負載均衡。

2.yum安裝HAProxy

HAProxy已經包含在yum的base中,版本為1.15,可以直接yum安裝

~]# yum install -y haproxy

HAProxy的配置文件路徑為:/etc/haproxy/haproxy.cfg

主程序路徑為:/usr/sbin/haproxy

3.HAProxy配置

HAProxy配置段分為兩大部分:

1.全局配置段,在配置文件中的標識為global,主要功能有如下:

a.在global中可以對HAProxy的進程及安全相關參數進行配置

b.性能調整

c.Debug

2.代理配置段,在配置文件中的標識為proxyies,它還分為如下小段:

a.default:為frontend,listen,backend提供默認配置

b.frontend:前端主機配置,可類比於Nginx的server { }

c.listen:將前端和后端整合在一起配置,同時擁有前端和后端。

HAProxy簡單配置示例

HAProxy默認配置如下:

global
    local2.*                       /var/log/haproxy.log #HAProxy日志文件依賴於rsyslog,這里的log配置與rsyslog相關
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid #運行的pid文件路徑
    maxconn     4000 #設置最大可支持的並發連接數
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http #設置HAProxy默認的工作模式,有tcp,http,health三種
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    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  main *:5000
    acl url_static       path_beg       -i /static /images /javascript /styl
esheets
    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 127.0.0.1:4331 check


backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 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

簡單的代理段配置:

frontend web #自定義前端服務器名,這里為web
    bind *:80 #設置監聽的端口與IP
    default_backend     websrvs #配置默認調用的名為websrvs的后端服務器組
            
backend websrvs #定義后端服務器名
    balance roundrobin #配置算法類型
    server srv1 172.16.100.6:80 check #配置主機參數,check為健康狀態檢測
    server srv2 172.16.100.7:80 check    

說到HAProxy的調度算法,這里簡單介紹一下:

HAProxy調度算法:
HAProxy在balance中定義
格式為 balance <algorithm> [ <arguments> ] 
1.roundrobin 根據服務器權重輪詢的算法,可以自定義權重,它支持慢啟動,並能在運行時修改權重,所以是一種動態算法。最多支持4095台后端主機。
2.static-rr 與roundrobin類似,static-rr也是一種輪詢算法,但它是靜態的,對后端主機數量無限制。
3.leastconn 最小連接數算法,一種可以根據后端主機連接數情況進行調度的動態算法,支持慢啟動和運行時調整,可將新的請求調度至連接數較少的后端主機。與LVS中lc算法類似。
4.first 根據服務器標識順序選擇服務器,當服務器承載的連接數達到maxconn的值后便將新情求調度至下一台服務器。此算法只在一些特殊場景下使用。
5.source 對請求的源IP地址進行hash處理,根據hash運算處理結果調度至后端服務器。可使固定IP的請求始終調度至統一服務器。
6.uri 根據請求的uri進行hash處理並調度之后端主機。
7.url_param 將URL的參數進行判斷並進行hash計算,參數可以自定義,任何的URL參數都可以。
8.hdr <name>根據請求中的HTTP報文首部的值進行hash計算並調度。name可以是GET、USERAGENT等首部名。
HAProxy可以選擇普通hash算法也可以選擇一致性hash算法。可用參數hash_type配置。

4.HAProxy中四層負載與七層負載的簡單演示

mode參數可設置HAProxy工作在四層還是七層,在HAProxy中mode有三種工作模式:

1.tcp:基於layer4實現代理;可代理mysql, pgsql, ssh, ssl等協議;
2.http:僅當代理的協議為http時使用;
3.health:工作為健康狀態檢查的響應模式,當連接請求到達時回應“OK”后即斷開連接;

1.tcp模式下負載均衡簡單示例

IP分配如下:

HAProxy主機:192.168.29.101

后端主機1:192.168.29.102  后端主機2:192.168.29.103

客戶端主機:192.168.29.104

將默認配置/etc/haproxy/haproxy.cfg中默認的frontend、backend注釋掉,重新添加如下配置:

listen sshd
    mode tcp bind
*:8080 balance leastconn server sshd1 192.168.29.102:22 check server sshd2 192.168.29.103:22 check

啟動HAProxysy

~]# stemctl start haproxy

注:所有服務器都關閉了firewall和selinux

用客戶端做測試,看ssh請求是否由HAProxy負載均衡至后端,如下圖:

2.http模式下負載均衡簡單示例

a.在兩台后端服務器上yum安裝Nginx服務

b.設置默認主頁index.html,將主頁內容設置分別設置為B1和B2。

c.開啟Nginx服務,檢查80端口是否在監聽狀態。

d.配置HAProxy服務,注釋掉上例中的listen配置,添加配置文件如下(本示例的配置也可在listen中配置,這里為不與上例重復,分別在frontend和backend中配置):

frontend myweb
        bind *:80
        default_backend app

backend app
        balance roundrobin
        server app1 192.168.29.102:80 check
        server app2 192.168.29.103:80 check

 重啟HAProxy后在客戶端訪問HAProxy主機並刷新,可看到內容不斷切換,說明http請求被負載均衡代理至后端主機,調度算法為roundrobin:

5.HAProxy的cookie配置基礎

1.什么是cookie?

由於HTTP是一種無狀態的協議,服務器單從網絡連接上無從知道客戶身份。怎么辦呢?就給客戶端們頒發一個通行證吧,每人一個,無論誰訪問都必須攜帶自己通行證。這樣服務器就能從通行證上確認客戶身份了。這就是Cookie的工作原理。Cookie實際上是一小段的文本信息。客戶端請求服務器,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie保存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶狀態。服務器還可以根據需要修改Cookie的內容。

2.為什么需要cookie?

舉一個大家都在舉的例子:客戶端第一次訪問某購物網站時,集群中負載均衡會根據設置好的算法分配至后端某服務器A,若負載均衡開啟了cookie機制,則負載均衡會給客戶端一個身份標識,以后只要是該客戶訪問網站,都會將請求發送至后端服務器A。這就綁定了用戶和后端服務器。與ip_hash不同的是,這種方式的綁定更精細,設置更靈活,就算用戶換IP也不會影響綁定。

3.cookie簡單配置

基本格式:cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ] [ postonly ] [ preserve ] [ httponly ] [ secure ] [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]

<name>:is the name of the cookie which will be monitored, modified or inserted in order to bring persistence.

在上例配置中添加cookie配置,使客戶端綁定至后端某台主機

frontend myweb
        bind *:80
        default_backend app
        stats enable #開啟HAProxy的狀態頁功能
        stats auth admin:asd12345 #設置狀態頁登入密碼

backend app
        balance leastconn
        cookie server insert nocache #在nocache中插入名為server的cookie鍵
        server app1 192.168.29.102:80 check cookie svr1 #server app1的鍵值為svr1
        server app2 192.168.29.103:80 check cookie svr2 #server app1的鍵值為svr2

重啟HAProxy后無論怎么刷新都不會切換內容了。查看網頁的cookie內容:

說明綁定在了svr1上了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM