Linux學習(第十八週)

第十八週學習內容:haproxy

第十八週作業:

1、簡述四層和七層負載均衡的特點及Haproxy與LVS之間的對比 。

      四層負載均衡工作在OSI模型中的四層,即傳輸層。四層負載均衡只能根據報文中目標地址和源地址對請求進行轉發,而無法修改或判斷所請求資源的具體類型,然後經過負載均衡內部的調度算法轉發至要處理請求的服務器。四層負載均衡單純的提供了終端到終端的可靠連接,並將請求轉發至後端,連接至始至終都是同一個。LVS就是很典型的四層負載均衡。

      七層負載均衡工作在OSI模型的第七層應用層,所以七層負載均衡可以基於請求的應用層信息進行負載均衡,例如根據請求的資源類型分配到後端服務器,而不再是根據IP和端口選擇。七層負載均衡的功能更豐富更靈活,也能使整個網絡更智能。如上圖所示,在七層負載均衡兩端(面向用戶端和服務器端)的連接都是獨立的。

      總之,四層負載均衡就是基於IP+端口實現的,七層負載均衡就是通過應用層資源實現的。

      LVS優點:(1)抗負載能力強,因爲是工作在四層之上,沒有流量的產生,這個特點也決定了其性能是最強的,對內存和cpu資源消耗比較低。(2)工作穩定,因其本身抗負載能力很強,自身有完整的雙機熱備方案如LVS+Keepalived等。(3)應用範圍比較廣,因爲LVS工作在四層,所以它幾乎可以對所有應用做負載均衡。

      LVS缺點:(1)不支持正則表達式。(2)面對大型應用,排錯困難。

      HAproxy優點:(1)支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機。(2)負載均衡策略比較多。(3)支持會話保持,Cookie引導,同時支持通過獲取指定的url來檢測後端服務器的狀態。

      HAproxy缺點:(1)性能不及LVS。(2)多進程模式支持不夠好。

2、簡述Haproxy常見的負載均衡調度算法及應用場景詳解 。

      準備實驗環境:一臺主機xiaomao1運行HAproxy,後端兩臺主機xiaomao2和xiaomao3運行httpd,提供簡單的web服務。

      image.png

      HAproxy安裝完成後核心程序是/usr/sbin/haproxy,主配置文件是/etc/haproxy/haproxy.cfg。

      主配置文件分成兩部分:全局配置和代理配置。前者用來描述程序自身的運行參數,安全參數,性能參數等,後者包含了defaults,frontend,backend,listen四塊配置內容。其中frontend用來定義前端,即面向客戶的配置;banckend用來定義後端,即面向真實服務器的配置,在frontend中可以調用backend;listen是可以在一個配置中包含前端和後端,以上三種配置有些參數是公用的,就可以在defaults段中定義了。

      先定義前端:frontend+名字,給前端起一個名字,haproxy的所有配置都需要起名字;bind表示綁定的端口,也就是監聽的端口;default_backend+名字,表示調用的後端的主機

      image.png

      再定義後端:backend+名字,爲後端起一個名字;server表示後端主機的真實地址,當然也要有一個名字;balance表示調度算法,這裏是最基礎的調度算法,輪詢。

      image.png

      這樣最簡單的haproxy配置就完成了,可以啓動服務實驗了。

      image.png

      加權輪詢:balance還是選擇roundrobin,在server後加上weight+權重。

      image.png

      image.png

      靜態輪詢(static-rr):輪詢的靜態版,不支持權重運行時調整,也不支持慢啓動,優勢在於對後端服務器的數量無限制,而普通的輪詢最多支持4095個。

      最少連接(leastconn):計算後端負載,分配給負載最小的,也可以加上權重。

      first:表示按順序依次把服務器打滿,只有在某些特殊環境下才會使用。

      源地址哈希(source):工作原理和lvs、nginx的源地址哈希輪詢規則一樣,只是要靠hash-type參數來設定具體的哈希方式,consistent是一致性哈希,map-based是取模法。在需要保持會話的情況下,可以使用。

      image.png

      image.png

      uri:綁定uri,特別能提高緩存命中率,童謠可以由hash-type參數調整哈希算法。

      url-param:通過url中的某個參數進行調度,只要這個參數相同就會被調往同一臺服務器,這個參數必須跟在配置命令之後。

      hdr:根據首部名稱進行調度,首部名稱必須跟在配置命令之後,也有hash-type可調。

3、通過Haproxy的ACL規劃實現智能負載均衡,並簡述tcp、http、health的配置示例。

      ACL:訪問控制列表,此爲haproxy的核心組件,功能十分強大。基本格式:acl+名字+檢查項+[標記]+[條件判斷]+[值],比如acl xiaomao src 10.0.0.8,表示抓取或叫匹配源地址爲10.0.0.8的數據包。

      值:有布爾型、整數、IP地址、字符串、正則表達式、十六進制數據塊等。

      標記:有-i忽略大小寫;-n禁止主機名反解;-u不可重名,默認是可以的,重名的acl做或運算;--表示結束標記位。

      條件難斷:有eq,ge,gt,le,lt,exact match,substring match,prefix match,suffix match等。

      檢查項:有dst,目標地址;dst-port,目標端口;src,源地址;src-port,源端口;dst-conn,目標套接字連接數量;path,相對路徑,在path下還有許多變種,path-beg表示前綴匹配,path-end表示後綴匹配,path-sub表示子串匹配等;url,匹配url,也有各種變種;hdr,請求報文的指定首部等。

      當定義好ACL,可以調用他們了,調用相關的指令有use_bakcend+後端名字+if或unless+ACL名字,表示僅當匹配到此ACL才啓用此後端;block+if或unless+ACL名字,表示組織匹配到的報文;http_request+allow或deny+if或unless+ACL名字表示基於7層的訪問控制;tcp_request+allow或deny+if或unless+ACL名字表示基於4層的訪問控制。

      上面的例子,在配置段中添加上ACL和訪問控制列表就可以阻止某臺設備的訪問。

      image.png

      image.png

      image.png    

      haproxy的工作模式:tcp:基於layer4實現代理;可代理mysql, pgsql, ssh, ssl等協議;http:僅當代理的協議爲http時使用;health:只做健康狀態檢查。默認是tcp,但如果使用編譯好的包進行安裝,會發現在default段的默認配置中把工作模式又定義成爲了http。

      image.png

4、LNMT實現動靜分離實戰。

      準備實驗環境:一臺主機xiaomao1運行HAproxy,後端兩臺主機xiaomao2和xiaomao3,一臺運行httpd提供靜態web服務,一臺運行httpd-php提供動態web服務。

      image.png

      image.png

      配置HAproxy配置文件

      image.png

      重啓服務後可以測試

      image.png

      image.png

      動靜分離實現,生產環境中一般動和靜的後端都將多部署幾臺主機,並做合理的調度算法,在測試環境下就是用一臺設備代替了。

      

      



      



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