HAProxy

1 關於HAProxy

1.1 介紹:

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。

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

1.2 衡量負責均衡器性能的因素:

Session rate 會話率:每秒鐘產生的會話數

Session concurrency 併發會話數:服務器處理會話的時間越長,併發會話數越多

Data rate 數據速率:高會話數,高數據速率要求更多的內存

1.3 HAProxy工作模式:

mode http:客戶端請求被深度分析後再發往服務器

mode tcp: 客戶端與服務器之間建立會話,不檢查第七層信息

mode health: 僅做健康狀態檢查,已經不建議使用

1.4 配置文件說明:

global部分:全局設置進程級別參數

default:爲後續的其它部分設置缺省參數    缺省參數可以被後續部分重置

frontend:描述接收客戶端偵聽套字節集

backend:描述轉發鏈接的服務器集

listen:把frontend和backend結合到一起的完整聲明

 

vim /etc/haproxy/haproxy.cfg

###########全局配置#########

global

    log            127.0.0.1 local2         #日誌輸出配置,所有日誌都記錄在本機,通過local2輸出

    chroot      /var/lib/haproxy          #chroot運行路徑

    pidfile      /var/run/haproxy.pid    #pid存放的路徑

    maxconn     4000                      #最大的連接數

    user             haproxy

    group           haproxy

    daemon                                    #以守護進程運行


###########默認配置#########

defaults

    mode           http                  #默認的模式mode {  tcp|http|health },tcp是4層,http是7層,health只返回OK

    log               global

    option          httplog             #日誌類別,採用httplog

    option         dontlognull       #不記錄健康檢查日誌信息

    option         http-server-close            #每次請求完畢後主動關閉http通道,haproxy不支持keep-alive,只能模擬這種模式實現

    option   forwardfor   except 127.0.0.0/8

    option         redispatch     

    retries        3                              #3次連接失敗就認爲服務器不可用

    timeout http-request    10s        #默認http請求超時時間

    timeout queue             1m         #默認隊列超時時間

    timeout connect           10s       #連接超時

    timeout client               1m        #客戶端超時

    timeout server             1m        #服務器超時

    timeout http-keep-alive 10s      #默認持久連接超時時間

    timeout check             10s        #心跳監測超時

    maxconn                     3000     #最大連接數

 

###########統計頁面配置#########

listen stats

   bind 0.0.0.0:1080  #監聽端口

   stats refresh 30s   #統計頁面自動刷新時間

   stats uri  /stats      #統計頁面url

   stats realm Haproxy Manager #統計頁面密碼框上提示文本

   stats auth admin:admin   #統計頁面用戶名和密碼設置,可以設置多個

   stats hide-version            #隱藏統計頁面上HAProxy的版本信息




###########frontend前端配置#########

#原配置文件說明

frontend  main *:5000

    acl url_static       path_beg       -i /static /images /javascript /stylesheets    #acl後面是規則名稱,-i爲忽略大小寫,後面跟的是要訪問的域名,如果訪問這個域名就觸發images等規則

    acl url_static       path_end       -i .jpg .gif .png .css .js

    #path_beg 匹配路徑的開頭,path_end 匹配路徑的結尾

   use_backend static          if url_static  

   default_backend              app


#自定義配置文件

frontend  web 192.168.4.100:80               #定義前端的名稱

   acl url_html      path_end      -i .html       #匹配url的結尾

   acl url_php       path_end      -i .php       #匹配.php的結尾

 

   use_backend  html-group     if url_html    #定義後端服務組(以html結尾)

   use_backend  php-group      if url_php     #定義後端服務組(以php結尾)

   default_backend         html-group             #默認後端服務組(僅IP)

backend html-group                    #後端服務組的具體的信息

    balance     roundrobin             #輪詢調度算

    server  app101 192.168.4.101:80 check  

    server  app102 192.168.4.102:80 check

backend php-group

    balance     roundrobin

    server  app103 192.168.4.103:80 check

    server  app104 192.168.4.104:80 check

###########backend後端配置#########

backend static                     #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


listen webserver 0.0.0.0:80             #webserver:名稱,允許所有通過80端口訪問

    cookie SERVERID rewrite           #記錄客戶端訪問網站服務器的cookie信息

    balance roundrobin                      #調度算法

    server  server44 192.168.4.44:80 cookie app44 check inter 2000 rise 2 fall 5

    server  server45 192.168.4.45:80 cookie app45 check inter 2000 rise 2 fall 5

    #後端服務器命名server44     cookie 爲cookie命名app44

2 案例1普通LB集羣

HAProxy服務器:RHEL7.2   IP:192.168.4.41

web:192.168.4.44 192.168.40.45

2.1 配置

[root@ser100 ~]# yum -y install haproxy

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

#刪除default以下的其它配置,添加如下配置

listen webserver 0.0.0.0:80     #webserver:名稱  允許所有通過80端口訪問

  cookie SERVERID rewrite    #記錄客戶端訪問網站服務器的cookie信息

  balance roundrobin              #調度算法

  server web101 192.168.4.44:80 cookie app101 check inter 2000 rise 2 fall 5

  server web102 192.168.4.45:80 cookie app102 check inter 2000 rise 2 fall 5

  #後端服務器  cookie app101 爲cookie命名

 

在defaults 最後一行添加  stats  uri  /admin

http://192.168.4.41/admin  是URL

去掉http://192.168.4.41 剩下的就是uri

也可以單獨添加:

listen stats

   bind 0.0.0.0:1080  #監聽端口

   stats refresh 30s   #統計頁面自動刷新時間

   stats uri  /admin      #統計頁面url

   stats realm Haproxy Manager #統計頁面密碼框上提示文本

   stats auth admin:admin          #統計頁面用戶名和密碼設置

   stats hide-version                   #隱藏統計頁面上HAProxy的版本信息

2.2 啓動服務

[root@ser41 ~]# systemctl start haproxy

[root@ser41 ~]# systemctl enable haproxy

2.3 訪問

http://192.168.4.41/admin  (根據配置文件)


3 案例2區分業務的LB集羣

做普通LB集羣對配置文件做了備份,現在對配置文件重新配置

區分不同的業務:在應用層區分

準備4臺web服務器,4臺web服務器的/var/www/html路徑下都存放 .html和.php結尾的文件

3.1 配置

在web服務器上:

yum -y install php           #解釋php代碼

systemctl restart httpd    #重新加載php模塊

vim /var/www/html/a.php

<?php

echo “web42”;

?>

vim /var/www/html/a.html

i am web42

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

frontend  webgroup 192.168.4.41:80     #定義前端的名稱webgroup,允許只能通過某個ip的某個端口訪問

  # acl url_static     path_beg      -i /static  

    acl url_html      path_end      -i .html     #匹配url以html的結尾

    acl url_php       path_end      -i .php     #匹配url以php的結尾

 

    use_backend  html-group     if url_html   #定義後端服務組(以html結尾)

    use_backend  php-group      if url_php    #定義後端服務組(以php結尾)

    default_backend         html-group           #默認後端服務組(僅IP)

    backend html-group           #後端服務組的具體的信息

        balance     roundrobin    #輪詢調度算法

        server  web44 192.168.4.44:80 check   #後端真正的服務器,check:做健康性檢查

        server  web45 192.168.4.45:80 check

    backend php-group

        balance     roundrobin

        server  web42 192.168.4.42:80 check

        server  web43 192.168.4.43:80 check

[root@ser41 ~]# systemctl start haproxy

3.2 客戶端測試

elinks -dump  http://192.168.4.41/a.html   #結果:輪詢只出現在web44,web45

elinks -dump  http://192.168.4.41/a.php   #結果:輪詢只出現在web42,web43

elinks -dump  http://192.168.4.41             #結果都出現

網頁監控信息查看:firefox http://192.168.4.41/admin


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