lvs初探

LVS


  • 簡述

  • HA基礎知識

  • lvs配置


簡述

什么是lvs?

lvs是linux virtual server linux虛擬服務的縮寫,通過一臺調度服務器來調度收到的請求并分發給后端的real server。

lvs的功能是什么?

lvs能夠實現在大并發的情況下,將前端調度器收到的請求分發給后端服務器處理,實現了負載均衡集群的作用。

lb基礎知識

lb集群的基本架構

LB集群架構

lb常見的調度算法

靜態:
RR:round robin,輪詢,你一個我一個。
WRR:weighted round robin,加權輪詢,按照事先設置好的比例的前提下的輪詢。 
DH:Destination hashing,目標地址哈希,對目標地址做hash,將對同一個資源的訪問都指向同一臺服務器。
SH:source hashing,源地址地址哈希,對源地址做hash,將同一個來源ip的請求都發送到同一臺服務器上,實現session保持。

動態:
LC:least connected,最小連接,inactive+active*256
WLC:weighted least connected,加權最小連接,(inactive+active*256)*weight
SED:Shortest Expected Delay,最短期望延遲,(inactive+active*256+1)*weight
NQ:never queue,永不排隊,第一次不按照SED的算法來計算,之后的按照(inactive+active*256+1)*weight來計算。
LBLC:Locality-Based Least Connection,基于局部性的最少連接,基于請求目標ip的負載均衡度來計算。
LBLCR:Locality-Based Least Connections withReplication,帶復制的基于局部性最少鏈接,基于請求目標ip的負載均衡度來計算,并且帶復制,也就是說當一方即將超負載就會復制信息到另外一臺rs服務器上保證用戶的緩存信息不會丟失。

lb會遇到的難點和一般解決方案

  1. 在整個負載均衡集群架構中,可以看見所有的請求的都會先發送到director上,當并發量達到一定程度的時候,這個單一節點就有可能成為整個系統的性能瓶頸,并且當這個節點故障后就會導致整個集群的失效,所以我們可以采用對這個節點做高可用和負載均衡。

  2. lb還需要考慮的一個問題就是seesion保持的問題,當調度器分發請求到后端服務器上,可是每一個連接的緩存內容只會在一個主機上,這就會導致,用戶在訪問時,會有可能丟失seesion,為了解決這個問題可以采用三種方式,session與后端主機綁定,session集群,session服務器來解決。

lvs

lvs的負載均衡模型


NAT

LVS-NAT
dip與sip需要在一個網絡內,當director收到請求報文后,會將請求調度根據算法轉發調度至real server,然后real server返回資源,director再構建響應報文響應,但是也會產生問題,由于是所有的請求和響應都要經過director,所以這個節點極易成為瓶頸所在。

  1. director需要開啟內核的路由轉發功能。

     echo 1 > /proc/sys/net/ipv4/ip_forward
  2. dip與rip遇到在一個網絡內。

  3. rip的網關需要指向dip。

    route add default gw 192.168.1.20

DR

LVS-DR
dip與sip需要在一個物理網絡內,需要接收arp廣播,當director收到請求報文后,會通過arp廣播的方式調度至rs,rs上也配置了vip,所以當rs收到了報文后,解開后發現訪問地址就是本機上的vip,所以就會獲取資源構建響應報文直接通過路由互聯網去送達給用戶,這個方式可以看見,我們的director只需要接收請求報文并且調度廣播出去,響應報文不會像nat一樣還要經由director來響應,這樣提高了director的承載量與性能。

  1. rs需要在lo上配置vip。

    ifconfig lo:0 192.168.1.200/32 broadcast 192.168.1.200 up
  2. rs需要調整核心的arp功能。

    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  3. real server 將lo上的vip都路由至lo:0。

    route add -host 192.168.1.200 dev lo:0

TUN

TUN
當我們的director和rs各自在不同的網絡中,并且位于不同地區,我們就可以采用tun,也就是隧道的方式來解決,tun方式,是在director收到請求報文后,會在原報文的基礎上再構建請求報文,也就是嵌套兩兩層,director與rs建立tcp連接,當rs收到后就會先拆開外面的一層獲得原先的請求報文,之后再拆,就能得到原先的請求內容,然后又發現vip是本機上的地址,然后就直接構建響應報文通過互聯網響應給用戶端。

lvs的配置與規則設置

格式

ipvsadm -[parm [value]]

參數詳解:

-L:列出信息。
-n:以數字的形式顯示。
-c:顯示現在的連接。
--stats 顯示統計信息。
--rate 顯示速率信息。

-A:新增一個虛擬服務。
-E:修改一個虛擬服務。
-D:刪除一個虛擬服務,注意如果直接刪除虛擬服務,設定的real server也會直接全部刪除。
-C:清空所有規則與服務。 
-Z:清空所有的計數器。
-s [rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq]:指定調度算法。

-S [file]:保存ipvsadm規則到一個文件。
-R [file]:從一個文件讀取ipvsadm規則。

-a:新增一個real server
-e:修改一個real server
-d:刪除一個real server
-t|u|f [host[:port]]:設置tcp|udp|fwmark服務。
-m|g|i:設定為masquerading|gatewaying|ipip方式,m為nat方式,g為dr方式,i為tun方式。    
-w [num]:指定權重。
-r [ip[:port]]:指定real server。
-p [timeout]:持久連接,即一個cilent的多個請求都由一個rs處理。

常用命令組合示例:

ipvsadm -L -n
ipvsadm -L -c

ipvsadm -A -t 192.168.1.1:80 -s rr 
ipvsadm -a -t 192.168.1.1:80 -r 192.168.1.2 -g -w 1
ipvsadm -a -t 192.168.1.1:80 -r 192.168.1.3 -g -w 2

iptables -t mangle -d 192.168.1.1 -m mutilport --dports 22,80 -j mark --mark 1 
ipvsadm -A -f 1 -s rr 
ipvsadm -a -f 1 -r 192.168.1.2 -g -w 1 -p 300
ipvsadm -a -f 1 -r 192.168.1.3 -g -w 2 -p 300

原創文章,作者:Net18_肖肖,如若轉載,請注明出處:http://www.www58058.com/17188

(0)
Net18_肖肖Net18_肖肖
上一篇 2016-05-31 20:22
下一篇 2016-05-31 23:32

相關推薦

  • LVM練習題

    創建一個至少有兩個PV組成的大小為20G的名為testvg的 VG;要求PE大小為16MB, 而后在卷組中創建大小為5G的邏 輯卷testlv;掛載至/users目錄 第一步!首先準備足夠大的硬盤來實驗 [root@Cloud /]#lsblk  #添加了/dev/sdb/c硬盤  NAME  &n…

    Linux干貨 2017-08-26
  • 實現CenOS7網卡名傳統方式

    網卡命令:理念 CentOS 6之前,網絡接口使用連續號碼命名:eth0、eth1等,當 增加或刪除網卡時,名稱可能會發生變化 CentOS 7使用基于硬件,設備拓撲和設置類型命名: (1) 網卡命名機制 systemd對網絡設備的命名方式 (a) 如果Firmware或BIOS為主板上集成的設備提供的索引信 息可用,且可預測則根據此索引進行命名, 例如en…

    Linux干貨 2017-12-19
  • Python函數式編程指南(四):生成器

    生成器是迭代器,同時也并不僅僅是迭代器,不過迭代器之外的用途實在是不多,所以我們可以大聲地說:生成器提供了非常方便的自定義迭代器的途徑。 這是函數式編程指南的最后一篇,似乎拖了一個星期才寫好,嗯…… 轉載請注明原作者和原文地址:) 4. 生成器(generator) 4.1. 生成器簡介 首先請確信,生成器就是一種迭代器。生成器擁有next方法并且行為與迭代…

    Linux干貨 2015-03-11
  • shell腳本編程和位置變量

    編程基礎 程序:指令+數據    程序編程風格:       過程式:以指令為中心,數據服務于指令       對象式:以數據為中心,指令服務于數據    shell:提供了編程能…

    Linux干貨 2016-08-16
  • 7.22_Linux入門和幫助文件的使用

    Linux系統登錄的兩種方式 GUI:圖形界面 Graphic User Interface 默認在Linux下面有三種可用的圖形界面程序可選,分別為 1.gnome(c,圖形庫gtk) 2.kde(c++,圖形庫qt) 3.xface(輕量級桌面) 每一種圖形界面下面開發的軟件并不兼容,因為它們開發時候所用的開發語言也各不相同 啟動方式:cli?!?/p>

    Linux干貨 2016-08-04
  • HA Cluster—Keepalived

    HA Cluster 集群類型:LB(lvs/nginx(http/upstream, stream/upstream))、HA、HP 系統可用性的公式:A=MTBF/(MTBF+MTTR) 系統故障: 硬件故障:設計缺陷、wear out、自然災害 軟件故障:設計缺陷 提升系統高用性的解決方案之降低MTTR: 解決方案:冗余(redundant) acti…

    Linux干貨 2017-10-30
欧美性久久久久