負載集羣LVS_DR模型原理:算法
客戶端CIP請求WEB資源,必須通過Director轉發給RS,而RS響應請求給客戶端CIP必定不能通過Director,因爲客戶端的請求是發給VIP的,要響應客戶端的請求,這就要求Director和RS之間要共享VIP。Director的DIP、RS1的RIP1、RS2的RIP2必須在同一網段,能夠是公網,也能夠是私網,他們之間的通訊基於MAC地址。RS上最好都有公網IP,或者出去的網關有多個,不然單網關容易成爲集羣的瓶頸。因爲Director和RS擁有一樣的VIP,因此要對RS作一些ARP限制,使它們不能應答ARP廣播,只是把VIP用來封包數據響應CIP,以保障全部對RS上的資源的請求必須通過Director的負載均衡分配。瀏覽器
模擬過程:服務器
客戶端CIP發送訪問WEB資源的請求到Director的VIP;請求到達switch時會先ARP廣播一下:who is VIP?此時因爲RS上經過一些手段做了ARP限制使之不能應答,因此只有Director做了應答:I am VIP,因而switch將數據幀發給了Directorapp
源IP負載均衡 |
目標IPide |
CIP測試 |
Director的VIP:172.16.58.1spa |
Director通過負載均衡算法挑選出RS1,由於Director的DIP和RS1的RIP1在同一網段,他們之間能夠經過MAC地址通訊,因而將數據幀的目的MAC地址改成RS1的MAC地址,這樣數據幀就發送到了RS1,源IP和目標IP並不改變ip
RS1將請求的WEB資源封裝直接響應給CIP,再也不通過Director,不過此時的源IP爲RIP1,因此須要將數據先從RS1本機的lo:0轉發一下,使源IP變爲VIP才能響應給客戶端CIPci
源IP |
目標IP |
RS1的lo:0上的VIP:172.16.58.1 |
CIP |
這樣就完成了一次通訊
實驗環境準備:
須要一個能夠與外網通訊的物理路由主機172.16.0.1。三臺虛擬機,一個Director,一個RS1,一個RS2,網卡鏈接方式都選擇橋接。
Director:負載均衡調度器 VIP:172.16.58.1 DIP:172.16.58.2 |
RS1:真實WEB服務器1 RIP1:172.16.58.7 VIP:172.16.58.1 |
RS2:真實WEB服務器2 RIP1:172.16.58.8 VIP:172.16.58.1 |
實戰配置:
RS1的配置:
#設置RIP1
ifconfig eth0 172.16.58.7 up
#設置VIP
ifconfig lo:0 172.16.58.1 netmask 255.255.255.255 broadcast172.16.58.1 up
#查看
ifconfig
#對ARP設置響應級別和通告級別
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#添加路由
route add –host 172.16.58.1 devlo:0
#從服務器上同步時間
ntpdate 172.16.0.1
RS2的配置:
#設置RIP2
ifconfig eth0 172.16.58.8 up
#設置VIP
ifconfiglo:0 172.16.58.1 netmask 255.255.255.255 broadcast172.16.58.1 up
#查看
ifconfig
#對ARP設置響應級別和通告級別
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
永久生效需修改配置文件:/etc/sysctl.conf
net.ipv4.conf.eth0.app_ignore = 1
net.ipv4.conf.eth0.app_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl –p 使配置生效
#添加路由
route add –host 172.16.58.1 devlo:0
#從服務器上同步時間
ntpdate 172.16.0.1
Director的設置:
#設置VIP
ifconfig eth0:0 172.16.58.1 gw 172.16.0.1 up
#設置DIP
ifconfig eth0 172.16.58.2 up
#清除iptables規則
iptales -F
service iptales save
#添加集羣服務
ipvsadm –A –t 172.16.58.1:80 –s wlc
#添加真實服務器RS1、RS2
ipvsadm –a –t 172.16.58.1:80–r 172.16.58.7 –g –w 2
ipvsadm –a –t 172.16.58.1:80–r 172.16.58.8 –g –w 1
#從服務器上同步時間
ntpdate 172.16.0.1
#瀏覽器訪問測試
瀏覽器訪問172.16.58.1,不斷刷新