解析負載均衡集羣—LVS

集羣(Cluster)

集羣就是按照某種方式把服務器連起來來完成一種特定的任務。集羣的目的是共享和高效地利用資源,提供大型運算,提供負載均衡分配請求壓力以及出現故障時能夠進行切換實現高可用性。

在集羣服務中有幾個常用簡稱,後文介紹中會使用到。在此做一下簡單的描述。
Director:調度器,接收請求並轉發請求的服務器。
RealServer:後端服務器,真正實現某種服務並響應客戶端請求的服務器。
VIP:在調度器上,接收用戶請求的IP。
DIP:在調度器上與集羣節點通信的IP。
RIP:集羣節點的IP地址

集羣的種類

負載均衡集羣(LB:Load  Balancing):前端有個調度器(Director)負責接收客戶端的請求以輪詢的方式分發服務到後端的RealServer上
高可用集羣(HA:High Avalibility):爲避免業務終止設置多個調度器,其中一個時時在線的提供服務,其他的做備份
高性能集羣(HP:High Performance):把任務分片發給集羣服務器,然後把結果收集,計算速度非常快

在負載均衡的實現過程中,調度器至關重要。而能實現負載均衡調度作用的既有硬件也有軟件。在此重點講述軟件的種類。
靠軟件實現的調度器有二種:基於OSI模型四層和七層交換。四層交換的負載均衡是通過IP和端口判斷用戶請求實現不同的服務訪問,用LVS軟件實現。七層交換實的現負載均衡是nginx的反向代理(squid,反向代理)負載均衡技術,需要特定的協議。

LVS

LVS(Linux Virtual Server)基於OSI模型的四層交換(L4 Switch),工作在防火牆的INPUT鏈上,根據地址和端口判斷用戶請求,可併發響應400w個用戶請求。它有三種類型,如下所述。
LVS-NAT:LVS地址轉換。其實就是目標地址轉換,它的實現要求所有的集羣節點都必須在同一個網絡內,且節點的默認網關應該指向DIP;支持端口映射;進棧和出棧的數據包都由Director處理,也正是這一點使得Director壓力過大。因此Director也是LVS-NAT模型的瓶頸。
LVS-DR:直接路由類型。這是一種最常用的類型,它解決了Director成爲瓶頸的問題。它要求所有的集羣節點全部都與Director在同一個物理網絡中;RIP不要求全部是私有地址,且網關一定不能指向DIP;VIP必須是公有地址。而且Director只處理進棧數據,不處理出棧數據。不能實現端口映射。
LVS-TUN:LVS隧道模式。和DR模型一樣,但Director和RealServer可以不在同一個網絡內,實現了異地容災的功能。RIP必須是公網地址,因爲RealServer直接響應客戶請求。

LVS調度方法

當客戶端請求時,Director要根據算法把請求重定向到後臺服務器上響應。前四種爲靜態算法,後六種爲動態算法。靜態的固定算法不考慮Realserver上實際存活的數目
1、Round-robin RR(輪詢)當一個新的連接請求到達時,director只是順序的選擇一個下realserver上
2、Weighted Round-Robin WRR:加權輪詢,給每一個realserver一個權重來確定下一個請求給誰,權重越大分到請求越多
3、Destination Hashing  DH(目標散列)相當於DNAT,來自同一個ip的請求都重定向到同一個Realserver上去,保證目標地址不變
4、Source hashing SH(源散列)相當於SNAT,算法正好與目標地址散列調度算法相反,當來自同一個服務器的響應。還通過同一個路由器出去響應給客戶端,保證源地址不變,在實際應用中,源地址散列調度和目標地址散列調度可以結合使用在防火牆集羣中,它們可以保證整個系統的唯一出入口 動態調度算法(通過檢查服務器當前連接的活動狀態決定如何進行調度)
5、LC(最少連接)新的連接請求將被分配至當前連接數最少的RealServer上;最小連接調度是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。
6、WLC(加權最少連接)在原有的最少連接的基礎上給realserver一個權重,是比較理想的算法,也是默認的調度算法。
7、SED:最短期望延遲,是對wlc的改進,
8、NQ :永不排隊,對sed簡單改進,還檢查當前服務器有沒有連接。當不考慮非活動連接時此算法比較理想。
9、LBLC:基於本地的最少連接,動態的DH,不僅檢查是不是請求是不是同一個ip還檢查當前有沒有連接
10、LBLCR:帶複製的最少連接,對LBLC的改進,當第二個realserver上的全部請求斷開,允許第一個realserver上的請求複製到第二個realserver上響應,減輕第一個realserver上的負擔

定義集羣規則的工具是ipvsadm。

ipvsadm -Lcn 查看當前的所有連接,或者cat /proc/net/ip_vs_conn 查看虛擬服務和RealServer上當前的連接數
數據包數和字節數的統計值,則可以使用下面的命令實現:
ipvsadm -l --stats
查看包傳遞速率的近似精確值,可以使用下面的命令:
ipvsadm -l --rate
  
ipvsadm -Ln 查看定義的服務
ipvsadm
 -A 定義服務,
 -a 加入realserver
 -s指定算法
 -t IP:port 服務類型爲tcp
 -u IP:port 服務類型爲udp
 -f防火牆標記 
 -r 實際服務器 
 -m指定lvm類型爲nat,
 -g指定lvm類型爲路由,默認的
 -i 表示隧道
 -p定義持久連接
 -w指定權重 
 -E 更改算法類型
ipvsadm -D 刪除服務
ipvsadm –d 刪除某一個realserver
ipvsadm -Z 清空計數器
ipvsadm -C 清空規則
ipvsadm -S >/root.a.ipvs 保存規則到一個位置
ipvsadm –S> /etc/sysconfig/ipvs-config =ipvsadm-save保存規則
ipvsadm –R </etc/sysconfig/ipvsadm-config = ipvsadm-restore恢復規則
redhat默認在/etc/init.d/ipvsadm 有一個ipvsadm的腳本

下面通過一個的例子簡單說明ipvsadm的用法:

  1. 在Director上  
  2. #ipvsadm -A -t 172.16.19.1:80 -s rr -p 1800   
  3. #ipvsadm -a -t 172.16.19.1:80 -r 192.168.0.11 -g  
  4. #ipvsadm -a -t 172.16.19.1:80 -r 192.168.0.22 -g  

此時就定義了一個端口爲80的集羣。VIP爲172.16.19.1,使用輪詢的算法,定義了超時時間爲1800s的持久連接。LVS的類型爲直接路由。RealServer爲192.168.0.11和192.168.0.22。
 

 

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