LVS模式一:直接路由模式DR(Direct Routing)


(一)LVS

一、LVS的了解

   LVS(Linux Virtual Server)可以理解為一個虛擬服務器系統。

   Internet的飛速發展,網絡帶寬的增長,Web服務中越來越多地使用CGI、動態主頁等CPU密集型應用,這對服務器的性能有較高要求,單台服務器已經無法滿足需要,所以集群自然的成為一種解決方案,而LVS便是其中的一種集群方案。LVS使用負載均衡技術將多台服務器組成一個虛擬服務器。它為適應快速增長的網絡訪問需求提供了一個負載能力易擴展,而價格低廉的解決方案。也可以這樣理解:lvs能夠實現在大並發的情況下,將前端調度器收到的請求分發給后端服務器處理,實現了負載均衡集群的作用

   集群(Cluster)是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用於提高可用性和可縮放性。集群系統的主要優點:高可擴展性、高可用性、高性能、高性價比。 常見的集群類型:

      LB:Load Balancing       高可拓展,伸縮集群
      HA:High Availability     高可用集群
      HP:High Performance  高性能集群

 

二、LVS結構和工作原理

   LVS由前端的負載均衡器(Load  Balance,LB)和后端的真實服務器(Real Server,RS)群組成的。RS中間可以通過局域網或廣域網來連接。LVS的這種結構是透明的,用戶只能看見一台作為LB的虛擬服務器(Virtual Server),而看不到提供服務器的RS群。當用戶的請求發往虛擬服務器時,LB將會根據設定的包轉發策略和負載均衡調度算法將用戶請求轉發給RS。然后RS根據請求內容將對應的請求結果返回給客戶,同請求包一樣,應答包的返回方式也與包轉發策略有關。

三、LVS的包轉發策略(基本為三種)

   1)NAT(Network  Address  Translation)模式:實現目標地址和目標端口的轉發;當客戶端發送一個請求到VIP中,然后VS收到數據包之后,根據調度策略選擇一個RIP(其中,LB將請求包中的虛擬服務器中的ip轉換為選定的RIP,並轉發給RS);RS將應答包發送給LB,LB將應答請求中的RIP轉換為VIP,回送給客戶端。

客戶端向VIP發送請求,進行的是將目的地址VIP地址為轉化為RIP;RS響應客戶端請求時,進行的是源地址為RIP的轉換成VIP

   2)IP隧道(IP Tunneling)模式:當LB接收到用戶請求包之后,根據IP隧道協議封裝請求包,然后傳送給某一個特定的RS,RS解析出請求的信息,直接將應答信息傳送給用戶。此時,要求LB和RS都支持IP隧道協議。

   3)DR(Direct  Routing)模式:實現的是MAC地址的轉換;LB受到數據包之后,將請求包中的MAC地址轉換為某一選定RS中目標地址的MAC地址后轉發出去,RS受到請求包之后,可直接將應答內容傳送給客戶端。但此時要求LB和RS在局域網內,且LB和RS群共享一個虛擬IP。

四、DR模式的原理圖

   

                        

           DR模式下數據傳輸過程

五、LVS模式下的DR模式的搭建

   1、在虛擬服務器上配置更高級的yum源

   --->  ls  /var/www/html/rhel6.5      # 此時,我的鏡像在真機中掛載,所以在真機中查看鏡像的信息

  

   --->  vim /etc/yum.repos.d/rhel-source.repo     # 在虛擬服務器上配置所有的yum源,如下所示

 [rhel-source]
 name=Red Hat Enterprise Linux $releasever - $basearch - Source
 baseurl=http://172.25.2.250/rhel6.5
 enabled=1
 gpgcheck=0

 [HighAvailability]             # 高可用
 name=HighAvailability
 baseurl=http://172.25.2.250/rhel6.5/HighAvailability
 gpgcheck=0

 [LoadBalancer]                 # 負載均衡
 name=LoadBalancer
 baseurl=http://172.25.2.250/rhel6.5/LoadBalancer
 gpgcheck=0
  

 # LoadBancer:可以將來自客戶端的請求分發到不同的服務器,提高服務器的性能,並可以自動尋找最優服務器轉發請求。

 # 這樣不僅提高系統性能,也達到了負載均衡的目的,滿足了用戶的需求。

 # 故LoadBalancer一般應用與web服務器前端,來均衡發到web服務器的請求量,提高系統性能。

 # LoadBalacer可連接多個web server,從而將其組成一個集群(cluster)。集群中負載的分配通過LoadBalancer來控制和管理。

 # 當然也可以更好的負載均衡,LoadBalancer可構建為一個集群。

 

 [ResilientStorage]               # 彈性存儲
 name=ResilientStorage
 baseurl=http://172.25.2.250/rhel6.5/ResilientStorage
 gpgcheck=0

 [ScalableFileSystem]             # 可擴展文件系統
 name=ScalableFileSystem
 baseurl=http://172.25.2.250/rhel6.5/ScalableFileSystem
 gpgcheck=0

   ---> yum clean  all           # 清空yum源中的緩存

   ---> yum  repolist            # 顯示yum倉庫的信息

  

   2、在server1服務器上安裝ipvsadm(調度器),並添加規則。(ipvsadm時管理集群服務的命令行工具,用於管理LVS策略規則)

   ---> yum  install  ipvsadm  -y

   ---> ipvsadm  -A  -t  172.25.2.100:80  -s  rr     # -A 添加一個虛擬機設備;-t 添加tcp服務和ip;-s 調度算法(rr|wrr|wlc|等)

   ---> ipvsadm  -a  -t  172.25.2.100:80  -r 172.25.2.2:80 -g    # -a 添加rs服務器;-t 調度器ip;-r RS的ip; -g dr模式(直接路由)

   ---> ipvsadm  -a  -t  172.25.2.100:80  -r 172.25.2.3:80 -g    # 添加另一台rs服務器

   ---> ip  addr  add 172.25.2.100/24  dev eth0                  # 給調度器添加一個虛擬ip

   3、給后端服務器172.25.2.2添加ip:

   ---> ip  addr  add  172.25.2.100/24  dev  eth0

   ---> ip  addr 

  

   4、給后端服務器172.25.2.3添加ip:

   ---> ip  addr  add  172.25.2.100/24  dev  eth0

   ---> ip  addr 

  

   5、在物理機中測試結果如下:

   ---> arp  -an | grep 100               # 查看100主機的地址解析結果(為MAC地址)

  

   ---> arp  -d  172.25.2.100            # 清空arp中緩存的mac地址

   ---> ping 172.25.2.100                # 重新獲取mac地址,並緩存

   ---> arp  -an | grep 100              # 再次查看(此時,與第一次結果不同;分別為server2和server3中對應的100的MAC地址)

  

   注釋:我們發現,測試端沒有經過調度器,而是直接到達后端(沒有形成輪叫)此時,我們需要在server2和server3下載arptables_jf,防止客戶端直接訪問后端。

   6、下載arptables_jf   # 由與server2和server3執行操作一樣,所以以server2為例。

 arptables:

    基本思路和iptables一樣,不過,arptables處理arp協議有關的包,這些包在iptables中並不會處理·arptables可用於靈活的arp管理,如果善於運用的話,不失為一個優秀的arp防火牆.既能防止別的機器對自己進行arp欺騙,又能防止本機病毒或錯誤程序向其他機器發起arp攻擊。

 

    arptables用於建立、獲取、修改內核的arp包處理表.有幾個不同的表,每個表分別含有幾條內建的處理鏈,同時允許用戶自定義處理鏈。每條鏈是一些規則的列表,每條規則匹配特定的包.每條規則指定一個對匹配的包的操作.這個操作也叫做‘目標’,這個目標也可是跳轉到同一個表中的另外的鏈。
    內建目標:ACCEPT, DROP, QUEUE, RETURN.是幾個最基本的目標,ACCEPT指接受這個包,DORP指丟掉這個包,QUEUE指把包傳到用戶空間(如果內核指定了的話), RETURN指返回到上一條鏈,接着執行上一條鏈跳轉過來哪條規則的下一個規則.每條鏈都有一個默認目標,當包經過所有規則都沒被匹配,則發給默認目標
    表:一邊至少有一個內建的表(filter表)-t常常用於指定要操作的表.filter表有兩個內建的鏈,IN和OUT,IN用於處理目標為發給本機目標為本機的包,OUT處理本機發出去的包。

 

   --->  yum  install  arptables_jf  -y   # 當啟動arptables時,火牆也會啟動。(且先經過火牆)

 

   --->  arptables  -A  IN  -d 172.25.2.100 -j DROP      # 在網內接收包時,拒絕172.25.2.100為目的地址的請求

   --->  arptables  -A  OUT -s 172.25.2.100 -j mangle --mangle-ip-s  172.25.2.2    # 當自身需要在網內發包把原來包含虛擬ip的arp請求做地址偽裝

   --->  /etc/init.d/arptables_jf  save    # 保存寫進去的策略

   --->  /etc/init.d/arptables_jf  start   # 啟動arptables服務

   --->  arptables -L      # 查看arp策略

  

   注意:server3中和server2中做相同的處理

   7、在測試端進行測試:(此時,有輪詢情況。並且查看訪問100的MAC地址的時候,顯示的是調度器的MAC地址)

  

   ---> ipvsadm  -Ln     # 有n的時候,表示有顯示ip和端口號;L 表示顯示ipvsadm的規則。

  

(二)DR模式下LVS的健康檢查

   我們需要的情況是這樣的,當后端的服務器發生出現錯誤時, 在測試端測試時會提示出錯誤的信息。此時,我們需要對后端服務器做健康檢查。具體操作步驟如下

   在以上操作的基礎上,若server2和server3的httpd服務器關閉之后,測試端的結果為:

  

   1、在server1中,安裝軟件 ldirectord-3.9.5-3.1.x86_64.rpm 。(對后端服務器做檢查)

   --->  yum  install ldirectord-3.9.5-3.1.x86_64.rpm   -y

   2、將配置文件的母板拷貝到/etc/ha.d/目錄下

   ---> cp  /usr/share/doc/ldirectord-3.9.5/ldirectord.cf  /etc/ha.d/

 

   3、編輯ldirectord的配置文件

   --->  vim  /etc/ha.d/ldirectord

   # Sample for an http virtual service

 virtual=172.25.2.100:80               # 網內向網外暴露的VIP
        real=172.25.2.2:80 gate        # 后端真實服務器server2的ip
        real=172.25.2.3:80 gate        # 后端真實服務器server3的ip
        fallback=127.0.0.1:80 gate     # 當后端服務器都有問題時,本機進行維護
        service=http
        scheduler=rr                   # 采用輪詢算法
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"
        #receive="Test Page"
        #virtualhost=www.x.y.z
   4、打開健康檢查服務

 

   ---> /etc/init.d/ldirectord   start

   5、清除之前的后端服策略,並重新添加策略顯示

   --->  ipvsadm  -C

   --->  ipvsadm  -Ln

  

   6、在本機安裝httpd服務,並修改配置文件的端口號為80。同時添加默認發布目錄

   ---> vim  /var/www/html/index.html    

        <h1>該站點正在維護。。。</h1>

   --->  /etc/init.d/httpd  restart

   7、關閉server2和server3的httpd服務

   8、在客戶端測試結果如下:

   --->  curl  172.25.2.100

  

   9、在調度器主機上查看策略的執行此次數

   --->  ipvsadm  -Ln

  

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM