LVS中nat和dr的原理與用法簡述
lvs-nat:
多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發;
(1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP;
(2)請求報文和響應報文都必須經由Director轉發;Director易于成為系統瓶頸;
(3)支持端口映射,可修改請求報文的目標PORT;
(4)vs必須是Linux系統,rs可以是任意系統;
請求和響應過程:
當cip向rip請求時,先是cip作為源,vip作為目標,當請求到達VIP時,源還是cip,但是
目標變成了rip,并通過dip到rip。源ip始終不變。
當rip響應請求時,rip作為源ip,cip作為目標ip,經由dip轉發。轉發完成后,vip為源ip,cip為目標。目標ip始終不變。
Ivs-nat示例:
實驗環境:
1、一臺director;安裝ipvsadm;
內網ip:192.168.1.1 外網ip:10.1.64.1
2、兩臺后端服務器,分別部署httpd服務。將網關指向192.168.1.1,并且打開核心轉
發功能。echo 1 > /proc/sys/net/ipv4/ip_forward 。并提供測試頁。并且三臺機器
的時間同步。
實驗步驟:
1、搭建好實驗環境。
2、部署ipvsadm策略
ipvsadm -A -t 10.1.64.1 -s rr
ipvsadm -a -t 10.1.64.1 -r 192.168.1.2 -m
ipvsadm -a -t 10.1.64.1 -r 192.168.1.3 -m
3、測試
For i in {1..9}; do curl http://10.1.64.1; done
lvs-dr:
Direct Routing,直接路由;
通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變;
Director和各RS都得配置使用VIP;
(1) 確保前端路由器將目標IP為VIP的請求報文發往Director:
(a) 在前端網關做靜態綁定;
(b) 在RS上使用arptables;
(c) 在RS上修改內核參數以限制arp通告及應答級別;
arp_announce
arp_ignore
(2) RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director;
(3) RS跟Director要在同一個物理網絡;
(4) 請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client;
(5) 不支持端口映射;
請求和響應的具體過程:
任何本地通信,都是通過Mac地址進行的,IP僅僅是實現網絡間通信的。當路由器的網絡
接口到real server或director的網絡接口都是有Mac地址封裝轉發的。
當路由器收到來自客戶端的請求報文時,路由發現Mac地址是自己的,就將其報文拆解,
發現目標IP不是自己,需要轉發,就會在網路中進行ARP廣播,尋找VIP的Mac地址,然后
Director和real server 都會響應路由的廣播,但是不能讓real server響應路由的廣播。否則將造
成路由混亂,可能路由會直接將報文發送給real server而不經過director。
為了避免路由混亂問題:
1、不讓路由發廣播,直接將director的Mac地址綁定。但是若以后對director做冗余
的時候,Mac地址就不能綁定了。
2、對real server的物理網卡上做ARPtables,在Mac層做防火墻,用來限制ARP廣播,
明確說明那些廣播通告可以出去(進入),哪些不可以出去(進入)。
3、在RS上修改內核參數以限制arp通告及應答級別;
arp_announce
arp_ignore
當客戶端的請求到達前端路由時,路由向全網發廣播,但是由于對real server做了策略限
制,因此只有director響應路由的廣播,因此所有的請求都會到達director,director通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變;然后通過交
換機發送給real server。
響應時,源目標是RIP,目標ip是CIP,但是cip并未訪問rip,所以得強行限制該響應報文
先到lo的vip,通過vip到達cip。
IVS-dr實驗示例:
示例一:
①客戶端一臺(192.268.249.148) director(dip 10.1.64.1.1)主機一臺。
Real server主機2臺。(rip1:10.1.64.2 rip2:10.1.64.3)
VIP:10.1.64.10
②在real server主機中分別部署兩臺httpd服務。在生產環境中兩臺httpd服務的內容應該是一
樣的,以達到負載均衡的目的。在該實驗中為了達到實驗效果可以將兩臺httpd服務的網頁
內容稍加區別。
Rip1 :測試頁內容RS1 rip2:測試頁內容RS2
③在director主機的物理網卡上設定別名,ip地址指向VIP:10.1.64.10
Ifconfig eth0:0 10.1.64.10 netmask 255.255.255.255 broadcast 10.1.64.10 up
④在director主機上設定ipvsadm策略。
Ipvsadm -A -t 10.1.64.10:80 -s rr
Ipvsadm -a -t 10.1.64.10:80 -r 10.1.64.2 -g -w 1
Ipvsadm -a -t 10.1.64.10:80 -r 10.1.64.3 -g -w 1
⑤在兩臺real server主機中設置響應和通告級別
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
⑥在客戶端主機中用curl測試,如圖所示,在不斷的請求時兩臺httpd服務會以輪循的方式響
應客戶端。
⑦在實驗過程中注意防火墻和SElinux的設置。建議清空防火墻和關閉SElinux。
示例二:
①在上述實驗原有的基礎上,在real server主機上部署MySQL服務。對MySQL做負載均衡。
②為兩臺MySQL服務添加可以遠程連接的用戶,兩臺MySQL服務的用戶名要相同。
Real server1
mysql
GRANT ALL ON *.* TO ‘test’@’10.1.%.%’ IDENTIFIED BY ‘testpass’;
FLUSH PRIVILEGES;
Real server2
mysql
GRANT ALL ON *.* TO ‘test’@’10.1.%.%’ IDENTIFIED BY ‘testpass’;
FLUSH PRIVILEGES;
為了顯示實驗效果,在real server2中添加一張表;
CREATE DATABASE zhangzhide;
③在director主機上添加ipvsadm策略
Ipvsadm -A -t 10.1.64.10:3306 -s rr
Ipvsadm -a -t 10.1.64.10:3306 -r 10.1.64.2 -g -w 1
Ipvsadm -a -t 10.1.64.10:3306 -r 10.1.64.2 -g -w 1
④在客戶機上測試MySQL的負載均衡
示例三、
FWM:FireWall Mark
通過在director主機上的防火墻上打標記的方式將MySQL和httpd服務放在同一個集群中。
為了不受上述實驗的ipvsadm策略的影響,建議將其清空ipvsadm -C。
①在director主機防火墻上打標記。
iptables -t mangle -A PREROUTING -d 10.1.64.10 -p tcp -m multiport –dports 80,3306 -j MARK
–set-mark 11
②在director主機上寫ipvsadm策略
ipvsadm -A -f 11 -s rr
ipvsadm -a -f 11 -r 10.1.64.2 -g -w 1
ipvsadm -a -f 11 -r 10.1.64.3 -g -w 2
③在客戶機上分別測試httpd服務和MySQL服務。
測試MySQL
測試httpd服務
示例四、
Prot affinity
借助于FireWall Mark,能夠完成將多個端口綁定在一起,并使用持久連接來實現統一調度
之效用。
原創文章,作者:zzd,如若轉載,請注明出處:http://www.www58058.com/56240