LVS的NAT模式搭建

架構圖:

多目標的DNAT(iptables):它通過修改請求報文的目標IP地址(同時可能會修改目標端口 )至挑選出某RS的RIP地址實現轉發。
(1)RS和DIP應該使用私網地址,且RS的網關要指向DIP;
(2)請求和響應報文都要經由director轉發,極高負載場景中,director可能成爲系統瓶頸。
(3)支持端口映射
(4)RS可以使用任意OS
(5)RS的RIP和Director的DIP必須在同一網段。

NAT模式的使用流程:       

 1.用戶請求VIP(也可以說是CIP請求VIP)

 2.Director Server 收到用戶的請求後,發現源地址爲CIP請求的目標地址爲VIP,那麼Director Server會認爲用戶請求的是一個集羣服務,那麼Director Server 會根據此前設定好的調度算法將用戶請求負載給某臺Real Server。
  假如說此時Director Server 根據調度的結果會將請求分攤到RealServer1上去,那麼Director Server 會將用戶的請求報文中的目標地址,從原來的VIP改爲RealServer1的IP,然後再轉發給RealServer1

 3.此時RealServer1收到一個源地址爲CIP目標地址爲自己的請求,那麼RealServer1處理好請求後會將一個源地址爲自己目標地址爲CIP的數據包通過Director Server 發出去,

 4.當Driector Server收到一個源地址爲RealServer1 的IP 目標地址爲CIP的數據包,此時Driector Server 會將源地址修改爲VIP,然後再將數據包發送給用戶

LVS-NAT的性能瓶頸:

在LVS/NAT的集羣系統中,請求和響應的數據報文都需要通過負載調度器(Director),當真實服務器(RealServer)的數目在10臺和20臺之間時,負載調度器(Director)將成爲整個集羣系統的新瓶頸。

大多數Internet服務都有這樣的特點:請求報文較短而響應報文往往包含大量的數據。如果能將請求和響應分開處理,即在負載調度器(Director)中只負責調度請求而響應直接(RealServer)返回給客戶,將極大地提高整個集羣系統的吞吐量。

機器規劃:     

lvs服務器:100.64.227.86(ens33,外網地址),192.168.20.1(ens37,內網地址)

後端服務器1:192.168.20.11(ens33,內網地址)

後端服務器2:192.168.20.12(ens33,內網地址)

部署步驟: 

在RealServer上部署httpd服務並測試,兩個節點一致,將頁面內容設置的不一樣,分別爲web1和web2

#安裝nginx服務
yum install nginx -y
echo "web1" > /usr/share/nginx/html/index.html
systemctl start nginx

#測試nginx服務
curl http://lcoalhost
web1

在Director上部署ipvs服務並測試:

[root@LVS ~]# ipvsadm -A -t 100.64.227.86:80 -s rr #定義一個集羣服務
[root@LVS ~]# ipvsadm -a -t 100.64.227.86:80 -r 192.168.20.11 -m #添加RealServer並指派調度算法爲NAT
[root@LVS ~]# ipvsadm -a -t 100.64.227.86:80 -r 192.168.20.11 -m #添加RealServer並指派調度算法爲NAT
[root@LVS ~]# ipvsadm -L -n #查看ipvs定義的規則列表
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 100.64.227.86:80 rr
-> 192.168.20.11:80 Masq 1 0 0 
-> 192.168.20.12:80 Masq 1 0 0 
[root@LVS ~]# cat /proc/sys/net/ipv4/ip_forward #查看Linux是否開啓路由轉發功能

[root@LVS ~]# echo 1 > /proc/sys/net/ipv4/ip_forward #啓動Linux的路由轉發功能
[root@LVS ~]# cat /proc/sys/net/ipv4/ip_forward 

測試訪問http頁面:

[root@LVS ~]# curl http://100.64.227.86/index.html
web1 #第一次是web2
[root@LVS ~]# curl http://100.64.227.86/index.html
web2 #第二次是web1
[root@LVS ~]# curl http://100.64.227.86/index.html
web1 #第三次是web1
[root@LVS ~]# curl http://100.64.227.86/index.html
web2 #第四次是web2

永久保存LVS規則並恢復:

[root@LVS ~]# ipvsadm -S > /etc/sysconfig/ipvsadm.s1

模擬清空ipvsadm規則來恢復:

[root@LVS ~]# ipvsadm -C
[root@LVS ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@LVS ~]# ipvsadm -R < /etc/sysconfig/ipvsadm.s1 
[root@LVS ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 100.64.227.86:80 wrr
-> 192.168.20.11:80 Masq 3 0 0 
-> 192.168.20.12:80 Masq 1 0 0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章