LVS 負載均衡

     首先,瞭解下LVS的工做原理,LVS有三種工做模式,分別是NAT, TUN和DR,調度算法上LVS有十種調度算法,分別是rr, wrr, lc, wlc, lblc, lblcr, dh, sh, sed, nq,工做模式和調度算法能夠根據本身需求進行設置。

LVS三種工做模式:算法

  1. NAT 地址轉換
    原理:就是把客戶端發來的數據包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,併發至此RS來處理,RS處理完成後把數據交給通過負載均衡器,負載均衡器再把數據包的原IP地址改成本身的IP,將目的地址改成客戶端IP地址便可。期間,不管是進來的流量,仍是出去的流量,都必須通過負載均衡器。優勢:集羣中的物理服務器可使用任何支持TCP/IP操做系統,只有負載均衡器須要一個合法的IP地址。
    缺點:擴展性有限。當服務器節點(普通PC服務器)增加過多時,負載均衡器將成爲整個系統的瓶頸,由於全部一的請求包和應答包的流向都通過負載均衡器。當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢。
     
  2. TUN 隧道
    原理:隧道模式就是,把客戶端發來的數據包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到後,先把數據包的頭解開,還原數據包,處理後接返回給客戶端,不須要再通過負載均衡器。注意,因爲RS須要對負載均衡器發過來的數據包進行還原,因此說必須支持IP Tunneling協議。因此,在RS的內核中,必須編譯支持IPTUNNEL這個選項。
    優勢:負載均衡器只負責將請求包分發給後端節點服務器,而RS將應答包直接發給用戶。因此,減小了負載均衡器的大量數據流動,負載均衡器再也不是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器可以爲不少RS進行分發。並且跑在公網上就能進行不一樣地域的分發。
    缺點:隧道模式的RS節點須要合法IP,這種方式須要全部的服務器支持IP Tunneling(IP Encapsulation)協議,服務器可能只侷限在部分Linux系統上。
     
  3. DR 直接路由
    原理:負載均衡器和RS都使用同一個IP對外服務。但只有DR對ARP請求(根據IP獲取Mac地址請求)進行響應,全部RS對自己這個IP的ARP請求保持靜默。也就是說,網關會把對這個服務IP的請求所有定向給DR,而DR收到數據包後根據調度算法,找出對應的RS,把目的MAC地址改成RS的MAC(由於IP一致)並將請求分發給這臺RS。這時RS收到這個數據包,處理完成以後,因爲IP一致,能夠直接將數據返給客戶,則等於直接從客戶端收到這個數據包無異,處理後直接返回給客戶端。因爲負載均衡器要對二層包頭進行改換,因此負載均衡器和RS之間必須在一個廣播域,也能夠簡單的理解爲在同一臺交換機上。
    優勢:和TUN(隧道模式)同樣,負載均衡器也只是分發請求,應答包經過單獨的路由方法返回給客戶端。與TUN相比,DR這種實現方式不須要隧道結構,所以可使用大多數操做系統作爲物理服務器。
    缺點:要求負載均衡器的網卡必須與物理網卡在一個物理段上。

     三種工做模式中,NAT限制最小,同時效率也是最低的,TUN和DR兩種效率比較高,DR效率最高,不過DR要求在局域網中,通常推薦使用DR模式。

LVS提供和十種調度算法:後端

  1. rr 輪詢(Round Robin)
    調度器經過「輪詢」調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。
     
  2. wrr 加權輪詢(Weighted Round Robin)
    調度器經過「 加權輪詢」調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
     
  3. lc 最少連接(Least Connections)
    調度器經過「最少鏈接」調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。
     
  4. wlc 加權最少連接(Weighted Least Connections)
    在集羣系統中的服務器性能差別較大的狀況下,調度器採用「加權最少連接」調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
     
  5. lblc 於局部性的最少連接(Locality-Based Least Connections)
    「基於局部性的最少連接」 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務器,將請求發送到該服務器。
     
  6. lblcr 帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)
    「帶複製的基於局部性最少連接」調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按"最小鏈接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的程度。
     
  7. dh 目標地址散列(Destination Hashing)
    「目標地址散列」調度算法根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
     
  8. sh 源地址散列(Source Hashing)
    「源地址散列」調度算法根據請求的源IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
     
  9. sed 最短時間望延遲 (Shortest Expected Delay)
    sed算法基於wlc算法,只是在wlc上作了微調,(活動鏈接數 + 1)x 256 / 權重。
     
  10. nq 永不排隊(never queue)
    無需隊列,若是有臺realserver的鏈接數=0就直接分配過去,不須要在進行sed運算。


管理集羣服務:服務器

  1. 添加或者修改配置
    -A|E -t|u|f service-address [-s scheduler]
    -t:tcp協議的集羣服務 -u:udp協議的集羣  -f:FWM:防火牆標記
    -s: rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
    ipvsadm -A t 192.168.1.100:80  –s  rr
    ipvsadm -E t 192.168.1.100:80  –s  rr
     
  2. 刪除配置
    -D -t|u|f service-address
    ipvsadm -D -t 192.168.100:80
     
  3. 清除配置
    ipvsadm -C
     
  4. 保存配置
    ipvsadm -S > file
     
  5. 載入配置
    ipvsadm -R < file
     
  6. 查看配置
    ipvsadm -L


管理集羣服務中的RS:網絡

  1. 添加或者修改RS
    -a|e virtual-service -r server-address   [-g|i|m] [-w weight] [-x upper] [-y lower]
    -g: DR  -i: TUN  -m: NAT
    ipvsadm -a -t 192.168.1.100 -r 192.168.1.101 -g
    ipvsadm -a -t 192.168.1.100 -r 192.168.1.102 -g
     
  2. 刪除RS
    -d -t|u|f service-address -r server-address
    ipvsadm -d -t 192.168.1.100 -r 192.168.1.101


搭建過程:併發

     首先,咱們選擇DR工做模式和rr調度算法。Linux內核從2.6.x起已經支持LVS,因此只須要安裝ipvsadm管理便可,具體步驟以下:負載均衡

  1. 安裝配置ipvsadm
    apt-get install ipvsadm
    dpkg–reconfigure ipvsadm
     
  2. 建立vip進行廣播
    vip = 192.168.100 (用於廣播)
    dip = 192.168.101 (用於實現HA)
    rip = 192.168.1.102
    ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0
    // 配置虛擬外網網卡,並設置vip和netmask,正常對外工做
     
  3. 建立集羣
    ipvsadm -A -t 192.168.1.100:80  –s  rr
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.103:80 -g
    ipvsadm -S
     
  4. 修改sysctl.conf
    net.ipv4.ip_forward=0
    net.ipv4.conf.all.send_redirects=1
    net.ipv4.conf.default.send_redirects=1
    net.ipv4.conf.eth0.send_redirects=1
    sysctl -p 生效
     
  5. RS配置 sudo ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 // 配置虛擬網卡,網卡必須是lo,netmask必須爲255.255.255.255,不然會響應客戶端的arp  修改/etc/sysctl.conf // DR的原理就是限制RS ARP響應,ARP用到就是廣播 net.ipv4.conf.all.arp_ignore=1       // 只對本身網卡地址作ARP響應 net.ipv4.conf.all.arp_announce=2  // 只攜帶外網網卡地址做爲原地址發送ARP請求 sysctl –p 生效
相關文章
相關標籤/搜索