一、LVS簡介
一組服務器通過高速的局域網或者地理分佈的廣域網相互連接,在它們的前端有一個負載調度器(Load Balancer)。負載調度器能無縫地將網絡請求調度到真實服務器上,從而使得服務器集羣的結構對客戶是透明的,客戶訪問集羣系統提供的網絡服務就像訪 問一臺高性能、高可用的服務器一樣。客戶程序不受服務器集羣的影響不需作任何修改。系統的伸縮性通過在服務機羣中透明地加入和刪除一個節點來達到,通過檢 測節點或服務進程故障和正確地重置系統達到高可用性。由於我們的負載調度技術是在Linux內核中實現的,我們稱之爲Linux虛擬服務器(Linux Virtual Server)。
二、LVS的分類
LVS-DR: 直接路由
LVS-DR模式:
1.客戶端將訪問vip報文發送給LVS服務器;
2.LVS服務器將請求報文的mac地址改爲後端真實服務器的mac地址;
3.後端真實服務器得到訪問報文後進行ip查看,再確認自己有vip之後進行請求處理;
4.後端真實服務器在處理完數據請求後,直接響應客戶端。
要求:
1.LVS服務器和後端真實的服務器要處在同一vlan中。
2.LVS和後端服務器上都要有vip,並且後端真實服務器上的vip不能對外進行廣播。
優點:
1.LVS服務器只是修改了mac地址,所以非常快速,並且LVS不會成爲瓶頸。
缺點:
1.要求較高,LVS服務器必須和後端真實服務器處於同一vlan中;
2.後端真實服務器直接響應客戶端,對於後端真實服務器來說,並不安全。
LVS-TUN:隧道
LVS-TUNNEL模式:
1.客戶端將訪問vip報文發送給LVS服務器;
2.LVS服務器將請求報文重新封裝,發送給後端真實服務器;
3.後端真實服務器將請求報文解封,在確認自身有vip之後進行請求處理;
4.後端真實服務器在處理完數據請求後,直接響應客戶端。
要求:
1.lvs和後端真實服務器上都要有vip。
2.不會成爲瓶頸。
3.請求的報文不能太大。
優點:
1.快速
2.不安全,不能抵抗DOS攻擊
LVS-NAT:地址轉換
LVS-NAT模式:
1.客戶端將訪問vip報文發送給LVS服務器;
2.LVS服務器將請求報文的目的地址修改爲後端真實服務器(DNAT),發送給後端真實服務器;
3.後端服務器在處理完之後要將響應的報文返回給客戶端,但是卻不在同一網段;
4.LVS根據自己的追蹤技術將後端真實服務響應客戶端的報文原地址改爲自己的ip地址(SNAT),發送給客戶端。
要求:
1.LVS服務器需要有不同的網段。
2.真實服務器的網關必須設置爲LVS的ip地址。
優點:
1.安全
2.可以實現不同網段的數據請求。
缺點:
因爲在 VS/NAT 中請求和響應報文都需要通過負載調度器,伸縮能力有限, 當服務器結點數目升到 20 時,調度器本身
有可能成爲系統的新瓶頸。
LVS-FULLNAT模式:
1.客戶端將訪問vip報文發送給LVS服務器;
2.LVS服務器將請求報文的目的地址修改爲後端真實服務器(DNAT),源地址改爲自己的ip地址(SNAT),發送給後端真實服務器;
3.後端服務器在處理完之後要將響應的報文返回給lvs;
4.LVS將返回的數據包源地址改爲自己(SNAT),目的地址改爲客戶端(DNAT),發送給客戶端。
。
三.
實驗環境:
物理機:172.25.254.68
vip:172.25.254.100
server2(VS):172.25.254.2
server5(VS):172.25.254.5
server3(RS):172.25.254.3
server4(RS):172.25.254.4
server2:
1.配置yum庫,安裝【Load Balancer】組包:
vim /etc/yum.repos.d/rhel-source.repo
yum cLean all
yum repolist
2、配置虛擬VIP
yum install ipvsadm -y
ip addr add 172.25.254.100/24 dev eth0 #添加虛擬ip爲172.25.2.100
ip addr
ipvsadm -A -t 172.25.254.100:80 -s rr #使用的調度算法,算法爲rr(Round Robin)
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -g #給vip添加rip,-g指定LVS 的工作模式爲直接路由模式(默認模式)
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.4:80 -g
ipvsadm -ln
-m #--masquerading 指定LVS 的工作模式爲NAT 模式
-t #--tcp-service service-address 說明虛擬服務器提供的是tcp 的服務
server3:
ip:172.25.254.3
/etc/init.d/httpd start #開啓http服務
ip addr add 172.25.254.100/32 dev eth0
yum install arptables_jf -y
arptables -L
arptables -A IN -d 172.25.254.100 -j DROP
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.3
/etc/init.d/arptables_jf save #保存策略
server4:
ip:172.25.254.4
/etc/init.d/httpd start
ip addr add 172.25.254.100/32 dev eth0
yum install arptables_jf -y
arptables -L
arptables -A IN -d 172.25.254.100 -j DROP
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.4
/etc/init.d/arptables_jf save
真機裏測試:
curl 172.25.254.100