1. 程式人生 > >LVS模式一:DR(Direct Routing)直接路由模式

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的網路請求。
這裡寫圖片描述

一.搭建DR模式的LVS

1.在虛擬伺服器上配置更高階yum源
cd /var/www/html/source6.5
這裡寫圖片描述

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包包括之前的還有新加進去的
這裡寫圖片描述
3.在server1(虛擬伺服器)上安裝ipvsadm(排程器)
ipvsadm是管理叢集服務的命令列工具,用於管理LVS的策略規則
顯示排程次數ipvsadm -L (-n不解析)
4.新增一臺虛擬裝置

 ipvsadm -A -t 172.25.1.100:80 -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 172.25.1.100:80 -r 172.25.1.2:80 -g
 ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.3:80 -g
 給server1(虛擬伺服器)新增ip172.25.1.100  ip addr add 172.25.1.100/24 dev eth0

這裡寫圖片描述
6.在物理機端(測試端)arp -an | grep 100 ,應該是來自server1

 給server2和server3新增ip  ip addr add 172.25.77.100/24 dev eth0 
  在物理機端:arp -d 172.25.1.100  刪除現有繫結MAC地址
             ping 172.25.1.100    重新獲得ip和MAC地址
             arp -an | grep 100    檢視繫結的MAC地址

這裡寫圖片描述
這裡寫圖片描述
如果繫結的MAC地址是sever2或sever3的,那麼我們會發現,在測試端根本不會形成輪叫,而是直接去了MAC繫結的後端伺服器
這裡寫圖片描述
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 172.25.1.100 -j DROP   
# 當網內廣播需要172.25.1.100這個ip時,它丟棄所有網內的請求
arptables -A OUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.2
# 當它自身需要在網內發包時,偽裝為自己原本的ip172.25.1.2
/etc/init.d/arptables_jf save   #儲存新增的兩條策略
/etc/init.d/arptables_jf start  #開啟arptables服務
在server3中也做相同處理

這裡寫圖片描述
8.在測試端測試curl 172.25.1.100(出現輪叫,且資料經過排程器)

這裡寫圖片描述
排程器(虛擬伺服器servere1)
這裡寫圖片描述

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

在做完上邊的配置後,我們發現,如果後端真實伺服器出現問題,那麼在測試端測試的時候,會返回給我們一個錯誤的頁面,那麼我們需要對後端伺服器做健康檢查,只返回正確的頁面。
這裡寫圖片描述
1.安裝一個軟體ldirectord-3.9.5-3.1.x86_64.rpm用來對後端伺服器做健康檢查
將配置檔案的母板拷到/etc/ha.d/

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

3.編輯 ldirectord的配置檔案

vim ldirectord.cf
   # Sample for an http virtual service
   virtual=172.25.1.100:80       #網內向外暴露的vip(虛擬ip)
        real=172.25.1.2:80 gate  # 後端真實伺服器server1
        real=172.25.1.3:80 gate  # 後端真實伺服器server2
        fallback=127.0.0.1:80 gate  # 如果後端真實伺服器全部掛掉,只剩本機提醒使用者在維護
        service=http
        scheduler=rr   # 採用round-robin輪叫演算法
        #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
6.重新顯示策略 ipvsadm -ln
這裡寫圖片描述
7.編寫本機的Apach預設釋出檔案

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

8..關掉server2和server3的httpd,在測試端curl 172.25.1.100
策略:
這裡寫圖片描述
測試:
這裡寫圖片描述