lvs是一種集羣技術,採用IP負載均衡技術和基於內容請求分發技術。調度器(Director)具備很好的吞吐率,將請求均衡地轉移到不一樣的服務器上處理,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。前端
lvs的用戶空間的命令行管理工具爲ipvsadm,ipvs是工做在內核中netfilter的INPUT的鉤子函數上,對進入的報文在沒有進入用戶空間前,對這些報文進行操做。
web
lvs的工做類型有四種,分別是lvs-nat,lvs-dr,lvs-tun和lvs-fullnat。最經常使用的爲前兩種(lvs-nat,lvs-dr)。算法
lvs-nat:是一種最簡單的方式,全部的RealServer將本身的網關指向Director。客戶端請求的都是Director上的IP,而後報文到Director上之後通過DNAT轉換,把請求Director的報文從新封裝成報文,以Director的IP爲源地址,而後請求RS(RealServer),RS直接響應給Director,而後由Director把結果發給客戶端。簡單來講就是:多目標的DNAT(iptables),它經過修改請求報文的目標IP地址(同時可能會修改目標端口)至挑選出某RS的RIP地址實現轉發;後端
lvs-nat類型的結構圖:瀏覽器
lvs-nat的特色: 緩存
(1)RS應該和DIP應該使用私網地址,且RS的網關要指向DIP;服務器
(2)請求和響應報文都要經由director轉發;極高負載的場景中,director可能會成爲系統瓶頸;網絡
(3)支持端口映射;架構
(4)RS可使用任意操做系統(OS);負載均衡
(5)RS的RIP和Director的DIP必須在同一IP網絡;
優勢:實現方便簡單,也容易理解;
缺點:Director會稱爲一個優化的瓶頸,全部的報文都要通過Director,若是Director壞掉,後果很嚴重
lvs-dr:是經過修改請求中的目標MAC地址進行轉發的;
lvs-dr的特色:
(1) 保證前端路由器將目標IP爲VIP的請求報文發送給director,後端的RS要能以VIP的地址響應給客戶端;
解決方案:
靜態綁定
arptables
修改RS主機內核的參數
(2) RS的RIP可使用私有地址;但也可使用公網地址;
(3) RS跟Director必須在同一物理網絡中;
(4) 請求報文經由Director調度,但響應報文必定不能經由Director;
(5) 不支持端口映射;
(6) RS能夠大多數OS;
(7) RS的網關不能指向DIP;
爲了讓RS的不響應VIP的ARP響應,須要配置arp_ignore=1 別人來請求時,當別從哪一個接口進入,就讓那個接口的地址響應,若是不是就不響應;arp_announce=2只讓本身的物理網卡的地址通告給別人;爲了讓RS以VIP爲源地址把報文發送給客戶端,RS的RIP在物理網卡上,VIP在lo(虛擬的設備)上,報文出去時要定義走lo這個設備,就是加一條路由(route add -host VIP dev lo:0)這樣就能保證RS響應客戶端時的源IP爲VIP。
lvs-tun:就是IP隧道,就是將一個IP報文再封裝一個IP報文的首部,這樣可使得目標爲一個IP地址的數據報文能被封裝和轉發到另外一個IP地址。
lvs-fullnat:就是在報文進來時作SNAT和DNAT。
後兩種不是很常見就不詳細說了
lvs-dr的架構圖
這只是一個大概的圖,DIP,VIP,RIP同一網段的是這樣
DIP,VIP,RIP不一樣網段的架構圖爲:
下面是一個lvs-nat的示例:
用物理機做爲測試機,做爲客戶端,172.16.249.123這臺機器爲Director,它有兩塊網卡,一塊配置172.16.249.123爲外網地址,另外一塊配置爲192.168.36.1作內網地址
192.168.36.2和192.168.36.3爲web服務器即爲RealServer,這兩臺內網主機的網關指向192.168.36.1
內網的網絡類型選爲VMnet2,
作好以後測試內網之間能不能通訊,
而後爲爲其打開httpd服務,然互配置測試頁,爲了演示效果咱們把兩臺web服務器的頁面配成不一樣的,(實際中是如出一轍的資源的)
打開httpd服務,而後測試頁面內容以下:
<h1>Hello , This is 192.168.36.2</h1>
<h1>This is 192.168.36.3</h1>
爲Director安裝ipvsadm,把本地光盤掛上,而後寫好yum源的指向
yum install ipvsadm
而後在Director上測試下,可否正常訪問
保證Director的防火牆是關的
Director的核心轉發要打開
而後在Director上作ipvs規則
首先添加集羣服務 ipvsadm -A -t 172.16.249.123:80 -s rr -t 172.16.249.123:80是指這個地址(172.16.249.123)的tcp協議的80端口開啓集羣服務 –s rr 指明調度器算法爲論調
ipvsadm -A -t 172.16.249.123:80-s rr
而後添加集羣服務中的RS(RealServer)
這樣就作好了,而後測試下
而後你在刷新下,
可是你的httpd服務不能開啓長連接,要不就會出新好幾回一臺RS纔會換下一臺
在Driector中查看下,也能夠看到每一個主機響應一次服務
這些規則使用/etc/sysconfig/ipvsadm 把規則保存到/etc/sysconfig/ipvsadm中
ipvsadm –R < /etc/sysconfig/ipvsadm 重載這個規則
lvs-dr的示例:
咱們用VIP和DIP,RIP在同一網段來作一下,這樣簡單一些
首先規劃Director的網卡爲eth0,採用橋接模式,只使用一塊網卡
地址配置爲DIP:172.16.249.123網關指向172.16.0.1;VIP 放到eth0:0這個別名上172.16.249.199
RS1的網卡採用橋接,RIP1:172.16.249.115網關指向172.16.0.1;lo:0 :VIP 172.16.249.199
RS2的網卡採用橋接,RIP2:172.16.249.124 網關指向172.16.0.1;lo:0 :VIP172.16.249.199
首先把Director的另外一塊VMnet2的網卡斷開,而後配置DIP爲172.16.249.123,
RS1和RS2的網卡改成橋接,地址爲172.16.249.115和172.16.249.124,
而後從RS上測試ping172.16.0.1 ping172.16.249.123都是通的證實網絡沒問題了
而後配置Director上的VIP 爲172.16.249.199/32,掩碼使用32位,就是讓它只作負載均衡器的調度用的
這個時候RS主機ping VIP 172.16.249.199是通的
而後要限制從哪一個接口進的報文,要讓哪一個接口去響應
Diretor的這個配置沒必要須,但RS的必須配置
route add -host 172.16.249.199dev eth0:0
而後設置RS
首先要先加這兩個參數
arp_ignore=1
arp_announce=2
而後配置VIP,和限定報文從哪一個接口進就從哪一個接口出去
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 爲了禁用完全,把這一個也配上
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 爲了禁用完全,把這一個也配上
而後配置VIP地址
ifconfig lo:0 172.16.249.199/32 broadcast172.16.249.199 up
或者ifconfigeth0:0 172.16.249.199 netmask 255.255.255.255 broadcast 172.16.249.199 up
route add -host 172.16.249.199 dev lo:0
而後把另外一臺RS也這樣配置
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 爲了禁用完全,把這一個也配上
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 爲了禁用完全,把這一個也配上
而後配置VIP地址
ifconfig lo:0 172.16.249.199/32 broadcast172.16.249.199 up
route add -host 172.16.249.199dev lo:0
這樣RS就作好了,剛纔web服務已經啓動了,爲了確認查看80端口是否啓用
而後在Director上使用RIP地址請求進行測試
而後把Director上的之前作的規則清掉,
而後從新配置ipvsadm規則
ipvsadm -A -t 172.16.249.199:80 -s rr
ipvsadm -a -t 172.16.249.199:80 -r172.16.249.115 -g
ipvsadm -a -t 172.16.249.199:80 -r172.16.249.124 -g
用物理機的瀏覽器訪問出問題了不能隨時論調,隔一段時間能切換,應該是瀏覽器緩存問題;打開一個虛擬機測試沒有問題
這樣作容易出現這樣的問題,在虛擬機下測試沒有問題,證實這個實驗是成功的,就是受網絡或者瀏覽器的影響,
下面咱們用VIP和DIP,RIP在不一樣網段來作一下(在物理機和Director之間加上一個路由器)
首先規劃Director的網卡爲eth1,採用VMnet2模式
地址配置爲DIP:192.168.36.10 ;VIP 放到eth0:0這個別名上10.1.1.2
RS1的網卡VMnet2,RIP:192.168.36.8;lo:0 :VIP 10.1.1.2
RS2的網卡VMnet2,RIP:192.168.36.9;lo:0 :VIP 10.1.1.2
物理機的地址爲172.16.249.100
添加一條路由
route add 10.1.1.0 mask 255.255.255.010.1.1.1
首先要有一個路由器,打開一個虛擬機打開核心轉發功能,而後加入兩塊網卡(也能夠一塊網卡),類型爲VMnet2,地址分別爲eth1:192.168.36.1/24 ,eth1:0爲10.1.1.2/24 ;一塊爲橋接爲172.16.249.117
路由條目爲
一臺虛擬機作Director,一塊網卡,網卡類型爲VMnet2,地址eth0爲DIP192.168.36.10/24
eth0:0爲10.1.1.2/8
在 Director上要添加一條路由
route add default gw 10.1.1.1
RS的IP地址爲192.168.36.8和192.168.36.9默認網關指向192.168.36.1
這樣物理網絡就建立好了
ping測試下
在 Director上是能ping通 172.16.249.110
從物理機也能ping通10.1.1.2 ,
從RS上能ping通物理機
而後啓動RS的80服務,就能夠在Director上設置集羣服務了
從Director上測試如下web服務
而後在Director上作集羣服務配置,配置以下圖
而後在RS 配置這兩個參數
arp_ignore=1
arp_announce=2
而後配置VIP,和限定報文從哪一個接口進就從哪一個接口出去
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 爲了禁用完全,把這一個也配上
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 爲了禁用完全,把這一個也配上
而後配置VIP地址
ifconfig lo:0 10.1.1.2/32 broadcast 10.1.1.2 up
route add -host 10.1.1.2 dev lo:0
而後把另外一臺RS也這樣配置
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 爲了禁用完全,把這一個也配上
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 爲了禁用完全,把這一個也配上
而後配置VIP地址
ifconfig lo:0 10.1.1.2/32 broadcast 10.1.1.2 up
route add -host 10.1.1.2 devlo:0
能夠寫到腳本里
而後執行腳本,驗證一下
而後進行測試
在Director上看一下,能夠看到鏈接數是相同的
從這裏能夠看出來,上面DIP,VIP,RIP在同一網段時,物理機瀏覽器測不輪調,是由於MAC地址影響的,這裏面加了個路由器,隔離了一些arp的廣播報文,因此物理主機沒有受到影響。
這樣lvs的lvs-nat和lvs-dr的實驗就作完了,若有指教和建議能夠留言。