LVS的NAT與DR模式的簡單介紹與配置
阿新 • • 發佈:2019-02-14
LVS簡單介紹:
LVS是Linux Virtual Server的簡稱,也就是Linux虛擬伺服器, 是一個由章文嵩博士發起的自由軟體專案,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是 Linux標準核心的一部分,在Linux2.4核心以前,使用LVS時必須要重新編譯核心以支援LVS功能模組,但是從Linux2.4核心以後,已經完全內建了LVS的各個功能模組,無需給核心打任何補丁,可以直接使用LVS提供的各種功能。 LVS自從1998年開始,發展到現在已經是一個比較成熟的技術專案了。可以利用LVS技術實現高可伸縮的、高可用的網路服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視訊/音訊點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集群系統,例如:Linux的入口網站(www.linux.com)、向RealPlayer提供音訊視訊服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。 LVS軟體作用:通過LVS提供的負載均衡技術和Linux作業系統實現一個高效能、高可用的伺服器群集,它具有良好可靠性、可擴充套件性和可操作性。從而以低廉的成本實現最優的服務效能。
LVS的特性:
優點: 高併發連線:LVS基於核心網路層面工作,有超強的承載能力和併發處理能力。單臺LVS負載均衡器,可支援上萬併發連線。 穩定性強:是工作在網路4層之上僅作分發之用,這個特點也決定了它在負載均衡軟體裡的效能最強,穩定性最好,對記憶體和cpu資源消耗極低。 成本低廉:硬體負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一臺伺服器和就能免費部署使用,價效比極高。 配置簡單:LVS配置非常簡單,僅需幾行命令即可完成配置,也可寫成指令碼進行管理。 支援多種演算法:支援多種論調演算法,可根據業務場景靈活調配進行使用 支援多種工作模型:可根據業務場景,使用不同的工作模式來解決生產環境請求處理問題。 應用範圍廣:因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、資料庫、DNS、ftp服務等等 缺點: 工作在4層,不支援7層規則修改,機制過於龐大,不適合小規模應用。
LVS核心元件和專業術語
核心元件: LVS的管理工具和核心模組ipvsadm/ipvs ipvsadm:使用者空間的命令列工具,用於管理叢集服務及叢集服務上的RS等; ipvs:工作於核心上的netfilter INPUT鉤子之上的程式,可根據使用者定義的叢集實現請求轉發; 專業術語: VS:Virtual Server #虛擬服務 Director, Balancer #負載均衡器、分發器 RS:Real Server #後端請求處理伺服器 CIP: Client IP #使用者端IP Director Virtual IP: VIP #負載均衡器虛擬IP Director IP: DIP #負載均衡器IP Real Server IP: RIP #後端請求處理伺服器IP
LVS工作流程
LVS的核心工作模型
由上圖可知:
1.當客戶端的請求到達負載均衡器的核心空間時,首先會到達PREROUTING鏈。
2.當核心發現請求資料包的目的地址是本機時,將資料包送往INPUT鏈。
3.LVS由使用者空間的ipvsadm和核心空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當資料包到達INPUT鏈時,首先會被IPVS檢查,如果資料包裡面的目的地址及埠沒有在規則裡面,那麼這條資料包將被放行至使用者空間。
4.如果資料包裡面的目的地址及埠在規則裡面,那麼這條資料報文將被修改目的地址為事先定義好的後端伺服器,並送往POSTROUTING鏈。
5.最後經由POSTROUTING鏈發往後端伺服器。
LVS負載均衡NAT工作模式
Virtual Server via NAT(VS-NAT):用地址翻譯實現虛擬伺服器。地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網路的流出包的地址。外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點。
優點是節省IP 地址,能對內部進行偽裝;缺點是效率低,因為返回給請求方的流量經過轉換器。
LVS負載均衡NAT工作流程
(a). 當用戶請求到達Director Server,此時請求的資料報文會先到核心空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP;
(b). PREROUTING檢查發現數據包的目標IP是本機,將資料包送至INPUT鏈;
(c). IPVS比對資料包請求的服務是否為叢集服務,若是,修改資料包的目標IP地址為後端伺服器IP,然後將資料包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP;
(d). POSTROUTING鏈通過選路,將資料包傳送給Real Server;
(e). Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP;
(f). Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP。
以下兩個指令碼為LVS在NAT模式下的Director端與RS端的配置指令碼
LVS-NAT-Real Server端:
#!/bin/bash
#配置本地迴環網絡卡路由
route add default gw 172.17.254.22
iptables -F
setenforce 0
systemctl start php-fpm mariadb nginx
LVS-NAT-Server端:
#!/bin/bash
if grep -i -C 100 "ipvs" /boot/config-`uname -r` > /dev/null ; then
#grep 檢視核心是否支援ipvs模組
#支援,執行以下指令
yum -y install ipvsadm
#lvs-server配置:
#開啟一個基於80埠的虛擬服務,排程方式為wrr
ipvsadm -A -t 172.17.254.22:80 -s wrr
#配置web服務後端real server 為DR工作方式 權重為1
ipvsadm -a -t 172.17.254.22:80 -r 172.17.254.180:80 -m -w 1
#配置web服務後端real server 為DR工作方式 權重為1
ipvsadm -a -t 172.17.254.22:80 -r 172.17.254.165:80 -m -w 1
#修改核心配置,開啟路由轉發
sed -i '/ip_forward/s/0/1/p' /etc/sysctl.conf
#使其生效
sysctl -p
iptables -F
setenforce 0
else
echo "核心不支援ipvs模組"
exit
fi
LVS負載均衡DR工作模式
Virtual Server via Direct Routing(VS-DR):用直接路由技術實現虛擬伺服器。當參與叢集的計算機和作為控制管理的計算機在同一個網段時可以用此方法,控制管理的計算機接收到請求包時直接送到參與叢集的節點。直接路由模式比較特別,很難說和什麼方面相似,前種模式基本上都是工作在網路層上(三層),而直接路由模式則應該是工作在資料鏈路層上(二層)。
工作原理 :DR和REAL SERVER都使用同一個IP對外服務。但只有DR對ARP請求進行響應,所有REAL SERVER對本身這個IP的ARP請求保持靜默。也就是說,閘道器會把對這個服務IP的請求全部定向給DR,而DR收到資料包後根據排程演算法,找出對應的 REAL SERVER,把目的MAC地址改為REAL SERVER的MAC併發給這臺REAL SERVER。這時REAL SERVER收到這個資料包,則等於直接從客戶端收到這個資料包無異,處理後直接返回給客戶端。由於DR要對二層包頭進行改換,所以DR和REAL SERVER之間必須在一個廣播域,也可以簡單的理解為在同一臺交換機上。
LVS負載均衡DR工作流程
(a) 當用戶請求到達Director Server,此時請求的資料報文會先到核心空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP;
(b) PREROUTING檢查發現數據包的目標IP是本機,將資料包送至INPUT鏈;
(c) IPVS比對資料包請求的服務是否為叢集服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將資料包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址;
(d) 由亍DS和RS在同一個網路中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那舉此時資料包將會發至Real Server;
(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成乀後,將響應報文通過lo介面傳送給eth0網絡卡然後吐外發出。 此時的源IP地址為VIP,目標IP為CIP;
(f) 響應報文最終送達至客戶端。
LVS負載均衡D模式的特點
1、保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS;
2、RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過虧聯網對RIP迕行直接訪問;
3、RS跟Director Server必項在同一個物理網路中;
4、所有的請求報文經由Director Server,但響應報文必項丌能迕過Director Server;
5、不支援地址轉換,也不支援埠對映;
6、RS可以是大多數常見的作業系統;
7、RS的閘道器絕不允許指吐DIP(因為我們不允許他經過director);
8、RS上的lo介面配置VIP的IP地址。
以下兩個指令碼為LVS在NAT模式下的Director端與RS端的配置指令碼
LVS—Real Server端
#!/bin/bash
ifconfig lo:0 172.17.254.22 broadcast 172.17.254.22 netmask 255.255.255.255 up
#配置本地迴環網絡卡路由
route add -host 172.17.254.22 lo:0
#1 只回答目標IP地址是來訪網路介面本地地址的ARP查詢請求
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
#2 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP資料包的
#源地址並嘗試選擇與能與該地址通訊的本地地址.
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
#關閉arp應答
#1: 僅在請求的目標IP配置在本地主機的接收到請求報文的介面上時,才給予響應.
#2:必須避免將介面資訊向非本網路進行通告
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
iptables -F
setenforce 0
systemctl start php-fpm mariadb nginx
LVS—Server端:
#!/bin/bash
#配置VIP到本地網絡卡eth0:0上,並只廣播自己
ifconfig eth0:0 172.17.254.22 broadcast 172.17.254.22 netmask 255.255.255.255 up
#配置VIP路由
route add -host 172.17.254.22 dev eth0:0
if grep -i -C 100 "ipvs" /boot/config-`uname -r` > /dev/null ; then
#grep 檢視核心是否支援ipvs模組
#支援,則執行以下指令
yum -y install ipvsadm
#lvs-server配置:
#開啟一個基於80埠的虛擬服務,排程方式為wrr
ipvsadm -A -t 172.17.254.22:80 -s wrr
#配置web服務後端real server 為DR工作方式 權重為1
ipvsadm -a -t 172.17.254.22:80 -r 172.17.254.180:80 -g -w 1
#配置web服務後端real server 為DR工作方式 權重為1
ipvsadm -a -t 172.17.254.22:80 -r 172.17.254.165:80 -g -w 1
#修改核心配置,開啟路由轉發
sed -i '/ip_forward/s/0/1/p' /etc/sysctl.conf
#使其生效
sysctl -p
iptables -F
setenforce 0
else
echo "核心不支援ipvs模組"
exit
fi