lvs–各類型的原理及實現—(原理篇)

前言:

   LVS即是linux虛擬服務器,是一個虛擬的服務器集群系統,目的是使用集群技術和linux操作系統實現一個高性能、高可用的服務器。采用IP負載均衡技術和基于內容請求分發技術,將請求負載均衡地轉移到不同的服務器上執行,從而將一組服務器構成一個高性能、高可用的虛擬服務器。此篇的內容只包含兩種較為常用的LVS技術,分別是LVS-NAT和LVS-DR。

一、Linux Cluster類型:

   Linux集群的三種類型分別是負載均衡集群,高可用集群和高性能集群,以下分別對這三種集群進行講解;

   

   LB:Load Balancing,負載均衡集群;該集群用于實現將同一種應用的大量請求分散到多臺主機;

   HA:High Availablity,高可用;當某一主機出現故障時,從服務器能夠取而代之,為服務提供冗余性;

   HP:High Performance,高性能;組合多臺計算機,可以將一個很復雜、計算量很大的問題分散到多臺主機,通過多臺主機聯合計算,減少計算的時間;

二、負載均衡集群的調度方式:

    LB集群的簡圖:

    blob.png

   lvs是基于傳輸層(目標IP和目標端口)分發請求報文,下圖是IPVS的工作原理,IPVS是工作于內核空間的netfiliter的INPUT鉤子之上的框架;

   下圖是DNAT的轉發機制圖:

 blob.png

三、LVS集群的類型詳解:

  (一)LVS-NAT

     lvs-nat是一個多目標的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和POST實現轉發:

     客戶端的請求報文發送到DIRECTOR的vip接口,此時源IP是CIP,目標IP是VIP,由于IPVS是工作于INPUT鏈的,當發現請求報文是請求某一集群服務需要向后轉發時,IPVS強行改變發送流程,通過FORWARDING鏈將報文發送至POSTROUTING鏈,經由算法算出報文發往到那一臺后端服務器,報文進入到后端服務器時,此時源IP地址是CIP,目標IP地址是RIP,后端服務器返回報文時,必須將將網關指向DIRECTOR的DIP,返回報文的源地址是RIP,目標地址是CIP,經過DIRECTOR后,源IP是VIP,目標IP是CIP,這個過程就是LVS-NAT的工作原理。

blob.png

LVS-NAT的特性:   

      多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某跳出的RS的RIP的DPORT實現轉發

           (1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關指向DIP;

           (2)請求報文和響應報文必須經由Director轉發;Director易于成為系統瓶頸;

           (3)支持端口映射,可修改請求報文的目標PORT;

           (4)VS必須是linux系統,RS可以是任意系統;

(二)LVS-DR

      LVS-DR是直接路由的方式,通過將請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變

     下圖是LVS-DR的工作原理圖:

blob.png

     客戶端的請求報文通過路由器、交換機將請求報文發送到DIRECTOR上,DIRECTOR通過算法將請求報文發往某一臺REAL SERVER上,REAL SERVER的回應報文不再經由DIRECTOR,而是將報文直接返回到CLient上,此時回應報文的源地址為VIP,目標地址是CIP。DIRECTOR、兩臺REAL SERVER的IP地址都需要配置VIP地址,由于三臺主機使用同一個VIP地址會發生地址沖突,所以需要將VIP地址做隱藏,DIRECTOR的VIP地址需要配置在DIRECTOR的網卡別名上,由于地址不屬于網卡而是屬于內核,所以無論將VIP配置在REAL SERVER的哪個網卡上,內核都會知道IP地址,從而將IP地址通告給路由器。首先需要將REAL SERVER的VIP地址配置在LO網卡的別名上,為之后隱藏VIP地址做準備。同時需要調整內核參數arp_announce和arp_ignore,從而達到隱藏VIP地址的目的。客戶端此時只能將請求報文直接發往DIRECTOR,DIRECTOR對請求報文重新封裝MAC,通過MAC將報文發往其中一臺REAL SERVER,REAL SERVER的回應報文不經由DIRECTOR,而是直接發送到客戶端。

  LVS-DR的特性:

    

  Director和各RS都得配置使用VIP;

             (1)確保前端路由器將目標IP為VIP的請求報文發往DIrector:

                    (a)在前端網關做靜態綁定;

                    (b)在RS上使用arptables;

                    (c)在RS上修改內核參數以限制ARP通告及應答級別;

                           arp_announce

                           arp_ignore

             (2)RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director;

             (3)RS跟Director要在同一個物理網絡;

             (4)請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client;

             (5)不支持端口映射;

    

四、IPVS的調度算法

     根據其調度時是否考慮各RS當前的負載狀態,可分為靜態方法和動態方法兩種,靜態方法是僅根據算法本身進行調度,動態方法主要根據每RS當前的負載狀態及調度算法進行調度。

     靜態方法:

          (1)RR:roundrobin,輪詢;               

          (2)WRR:weighted RR,加權輪詢;

          (3)SH:source hashing,源IP地址哈希,用于實現session sticy;

          (4)DH:destination hashing,目標IP地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS;

      動態方法:

          (1)LC:least connections:最少連接

          (2)WLC:weight LC 加權最少連接

          (3)SED:shortest expection delay

          (4)NQ:never queue

          (5)LBLC:locality-based LC,動態DH算法

          (6)LBLCR:LBLC with replication,帶復制功能的LBLC;

   

 

原創文章,作者:因為有你,如若轉載,請注明出處:http://www.www58058.com/54645

(0)
因為有你因為有你
上一篇 2016-10-27
下一篇 2016-10-27

相關推薦

  • 用shell腳本實現每天定時收集全網日志到一臺服務器

    需求 現在公司有這樣一個需求,需要收集每天全網運行業務的設備上的某個特定目錄底下的日志到一臺服務器(這臺服務器我們簡稱logserver),這并在這臺logserver上生成以日期為名字的目錄 解決思路: 在logserver的crontab里設置兩個腳本,在當日晚上23:30執行腳本1收集當日即將被刪除的全網腳本;在并在早上8:30執行腳本2,收集昨日全網…

    Linux干貨 2015-07-27
  • N26-第三周作業

    N26-第三周作業 一、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@promote ~]# who root     tty1         2017-03-10 22:36 lxk…

    Linux干貨 2017-03-11
  • 網絡管理之路由實現

    一.概述 跨網絡通信:路由     路由分類:         主機路由         網絡路由      …

    Linux干貨 2016-09-19
  • linux 文件管理類命令及功能用法

    第一題:Linux上的文件管理類命令都有哪些,其常用的使用方法及相關示例演示。 文件管理類的命令有: cd,ls,touch,mldir,cp,mv,rm,rmdir,pwd,tree 使用方法 (1),cd命令用來切換工作目錄至dirname。其中dirName表示法可為絕對路徑或相對路徑。 常用格式: cd #進入用戶家目錄 cd~ #進入用戶家目錄 c…

    Linux干貨 2017-07-09
  • 2016-10-18作業

    2016-10-17 課后作業  1. 生產環境發現一臺服務器系統時間產生偏差,造成服務異常,請幫忙校正。     1)首先,查看本地硬件時間是否正確,命令如下:       hwclock       如果該時間是正確的,使用該時間來更新系統時間。命令如下: &nbs…

    Linux干貨 2016-10-20
  • tcp socket文件句柄泄漏

    今天發現有臺redis機器上出現socket個數告警,這是很奇怪的現象。因為一臺redis服務器上就部署了幾個redis實例,打開的端口應該是有限。 1、netstat顯示的tcp連接數正常 netstat -n | awk '/^tcp/ {++state[$NF]} END …

    Linux干貨 2016-04-13

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-10-30 20:49

    文章內容上比較完整地,但是整體排版是不是太亂了點?建議多看看別人寫的博客,來提升自己的寫作能力哦。

欧美性久久久久