天天看點

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

LVS的背景:

Internet的快速增長使多媒體網絡伺服器面對的通路數量快速增加,伺服器需要具備提供大量并發通路服務的能力,是以對于大負載的伺服器來講,CPU、I/O處理能力很快會成為瓶頸。由于單台伺服器的性能總是有限的,簡單的提高硬體性能并不能真正解決這個問題。為此,必須采用多伺服器和負載均衡技術才能滿足大量并發通路的需要。Linux虛拟伺服器(Linux Virtual Servers,LVS)使用負載均衡技術将多台伺服器組成一個虛拟伺服器。它為适應快速增長的網絡通路需求提供了一個負載能力易于擴充,而價格低廉的解決方案。

LVS結構與工作原理

 LVS由前端的負載均衡器(Load Balancer,LB)和後端的真實伺服器(Real Server,RS)群組成。RS間可通過區域網路或廣域網連接配接。LVS的這種結構對使用者是透明的,使用者隻能看見一台作為LB的虛拟伺服器(Virtual Server),而看不到提供服務的RS群。當使用者的請求發往虛拟伺服器,LB根據設定的包轉發政策和負載均衡排程算法将使用者請求轉發給RS。RS再将使用者請求結果傳回給使用者。同請求包一樣,應答包的傳回方式也與包轉發政策有關。

LVS的包轉發政策:

  1. NAT (Network Address Translation)模式。LB收到使用者請求包後,LB将請求包中虛拟伺服器的IP位址轉換為某個標明RS的IP位址,轉發給RS;RS将應答包發給LB,LB将應答包中RS的IP轉為虛拟伺服器的IP位址,回送給使用者。
  2. IP隧道 (IP Tunneling)模式。LB收到使用者請求包後,根據IP隧道協定封裝該包,然後傳給某個標明的RS;RS解出請求資訊,直接将應答内容傳給使用者。此時要求RS和LB都要支援IP隧道協定。
  3. DR(Direct Routing)模式。LB收到請求包後,将請求包中目标MAC位址轉換為某個標明RS的MAC位址後将包轉發出去,RS收到請求包後,可直接将應答内容傳給使用者。此時要求LB和所有RS都必須在一個實體段内,且LB與RS群共享一個虛拟IP。

我們先來試試DR模式的LVS

DR模式下排程器和伺服器組都必須在實體上有一個網卡通過不分段的區域網路相連,即通過交換機或者高速的HUB相連,中間沒有隔有路由器。VIP位址為排程器和伺服器組共享,排程器配置的VIP位址是對外可見的,用于接收虛拟服務的請求封包;所有的伺服器把VIP位址配置在各自的Non-ARP網絡裝置上,它對外面是不可見的,隻是用于處理目标位址為VIP的網絡請求。

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

一.搭建DR模式的LVS

1.在虛拟伺服器上配置更進階yum源

cd /var/www/html/source6.5

LVS模式一:DR(Direct Routing)直接路由模式
vim /etc/yum.repos.d/rhel-source.repo 
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/source6.5
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]    #高可用性
name=HighAvailability
baseurl=http://172.25.1.250/source6.5/HighAvailability
gpgcheck=0

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

> LoadBalancer:
> 可以将來自用戶端的請求分發到不同的伺服器,通過将一系列的請求轉發到不同的
> 伺服器可以提高伺服器的性能,并可以自動地尋找最優的伺服器轉發請求,
> 這樣不僅提高了系統性能,同時達到了負載均衡的目的,滿足了使用者需求,是以
> LoadBalancer 在應用場景中一般處于 web 伺服器的前端,用來均衡發到 web
> 伺服器的請求量,均衡負載,提高系統性能。LoadBalancer 可以連接配接多個 
> web server,進而将多個 web server組成一個叢集(cluster),
> 叢集中負載的配置設定通過 loadBalancer進行控制和管理。
> 當然為了更好地進行負載均衡,LoadBalancer 也可以建構為一個叢集,
> 使用 LoadBalancer 建構的 web  server cluster


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

[ScalableFileSystem]    #可擴充檔案系統
name=ScalableFileSystem
baseurl=http://172.25.1.250/source6.5/ScalableFileSystem
gpgcheck=0
           

2.yum repolist檢視生成的yum包包括之前的還有新加進去的

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

3.在server1(虛拟伺服器)上安裝ipvsadm(排程器)

ipvsadm是管理叢集服務的指令行工具,用于管理LVS的政策規則

顯示排程次數ipvsadm -L (-n不解析)

4.添加一台虛拟裝置

ipvsadm -A -t : -s rr
  -A 增加一台虛拟裝置
  -t --tcp-service  service-address
  -s scheduler      one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq 
  為了實驗效果明顯,我們采用rr算法 (輪叫)
           

5.添加後端實際伺服器

ipvsadm -a -t : -r : -g
 ipvsadm -a -t : -r : -g
 給server1(虛拟伺服器)添加ip172  ip addr add / dev eth0
           
LVS模式一:DR(Direct Routing)直接路由模式

6.在實體機端(測試端)arp -an | grep 100 ,應該是來自server1

給server2和server3添加ip  ip addr add / dev eth0 
  在實體機端:arp -d   删除現有綁定MAC位址
             ping     重新獲得ip和MAC位址
             arp -an | grep     檢視綁定的MAC位址
           
LVS模式一:DR(Direct Routing)直接路由模式
LVS模式一:DR(Direct Routing)直接路由模式

如果綁定的MAC位址是sever2或sever3的,那麼我們會發現,在測試端根本不會形成輪叫,而是直接去了MAC綁定的後端伺服器

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

7.在server2和server3中下載下傳yum install -y arptables_jf,防止在實體機中測試時直接通路server2和server3

什麼是arptables:(可類比與iptables防火牆的用法)

arptables用于建立、擷取、修改核心的arp包處理表.有幾個不同的表,每個表分别含有幾條内建的處理鍊,同時允許使用者自定義處理鍊, 每條鍊是一些規則的清單,每條規則比對特定的包.每條規則指定一個對比對的包的操作.這個操作也叫做‘目标’,這個目标也可是跳轉到同一個表中的另外的鍊

1.内建目标: ACCEPT, DROP, QUEUE,

RETURN.是幾個最基本的目标,ACCEPT指接受這個包,DORP指丢掉這個包,QUEUE指把包傳到使用者空間(如果核心指定了的話),RETURN指傳回到上一條鍊,接着執行上一條鍊跳轉過來哪條規則的下一個規則.每條鍊都有一個預設目标,當包經過所有規則都沒被比對,則發給預設目标

2.表:

一邊至少有一個内建的表(filter表)-t常常用于指定要操作的表.filter表有兩個内建的鍊,IN和OUT,IN用于處理目标為發給本機目标為本機的包,OUT處理本機發出去的包.

arptables -A IN -d  -j DROP   
# 當網内廣播需要172.25.1.100這個ip時,它丢棄所有網内的請求
arptables -A OUT -s  -j mangle --mangle-ip-s 
# 當它自身需要在網内發包時,僞裝為自己原本的ip172.25.1.2
/etc/init.d/arptables_jf save   #儲存添加的兩條政策
/etc/init.d/arptables_jf start  #打開arptables服務
在server3中也做相同處理
           
LVS模式一:DR(Direct Routing)直接路由模式

8.在測試端測試curl 172.25.1.100(出現輪叫,且資料經過排程器)

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

排程器(虛拟伺服器servere1)

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

二.DR模式下LVS的健康檢查

在做完上邊的配置後,我們發現,如果後端真實伺服器出現問題,那麼在測試端測試的時候,會傳回給我們一個錯誤的頁面,那麼我們需要對後端伺服器做健康檢查,隻傳回正确的頁面。

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

1.安裝一個軟體ldirectord-3.9.5-3.1.x86_64.rpm用來對後端伺服器做健康檢查

将配置檔案的主機闆拷到/etc/ha.d/

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

3.編輯 ldirectord的配置檔案

vim ldirectord.cf
   # Sample for an http virtual service
   virtual=       #網内向外暴露的vip(虛拟ip)
        real= gate  # 後端真實伺服器server1
        real= gate  # 後端真實伺服器server2
        fallback= gate  # 如果後端真實伺服器全部挂掉,隻剩本機提醒使用者在維護
        service=http
        scheduler=rr   # 采用round-robin輪叫算法
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=
        request="index.html"   
        #receive="Test Page"
        #virtualhost=www.x.y.z
           

4.打開健康檢查服務

5.清除之前的後端伺服器政策 ipvsadm -C

6.重新顯示政策 ipvsadm -ln

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

7.編寫本機的Apach預設釋出檔案

vim /var/www/html/index.html
   本站點正在維護
           

8..關掉server2和server3的httpd,在測試端curl 172.25.1.100

政策:

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

測試:

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