端口映射其實就是常說的NAT的一種,其功能就是把在公網的地址轉翻譯成私有地址(目標地址轉換DNET)
LVS集羣中實現的三種IP負載均衡技術:
VS/NAT:在已有的IP負載均衡技術中,主要有通過網絡地址轉換NAT(Network Address Translation)將一組服務器構成一個高性能的、高可用的虛擬服務器
VS/TUN:通過IP隧道實現虛擬服務器。(Virtual Server via IP Tunneling)
VS/DR:通過直接路由實現虛擬服務器的方法
LVS DR模型:
CIP進入Director中目標IP(VIP)沒改變,只是改變了目標IP 的mac。
當響應返回時,源IP是VIP,目標IP是CIP。
都處於同一物理網絡,不要跨越路由器
拒絕realserver上VIP對前端路由上的VIP的arp請求:
在LVS DR模型中:
Realserver中有eth0和lo接口,lo接口上配置的是VIP地址,要設置來自 director向後端realserver轉發請求時,通過lo接口接進來,它還要從lo出去,lo又沒辦法出去,所以lo就將響應通過eth0轉發出去,能通過eth0轉發出去的條件是,eth0(DIP)必須指向一個網關,這個網關可以連向互聯網。Eth0必須把網關指向能夠到達CIP的網關。
CIP -- VIP --- DIP --- RS(lo -->eth0)--router --CIP
LVS-DR模型:
Director兩個地址:VIP, DIP
RS有兩個地址:VIP, RIP
禁止RS響應對VIP的ARP廣播請求:
1、在前端路由上實現靜態MAC地址VIP的綁定;
前提:得有路由器的配置權限;
缺點:Directory故障轉時,無法更新此綁定;
2、arptables
前提:在各RS在安裝arptables程序,並編寫arptables規則
缺點:依賴於獨特功能的應用程序
3、修改Linux內核參數
前提:RS必須是Linux;
缺點:適用性差;
兩個參數:
arp_announce:定義通告模式
arp_ignore:定義收到arp請求的時響應模式
配置專用路由,以使得響應報文首先通過vip所配置的lo上的別名接口
Linux的工作特性:IP地址是屬於主機,而非某特定網卡;
LVS-DR配置架構根據其VIP與RIP是否在同一樣網絡上有兩種模型:
在Directory和RS上配置VIP,要使用如下格式:
# ifconfig ALIAS VIP netmask 255.255.255.255 broadcast VIP up
# route add -host VIP dev ALIAS
LVS-DR的配置:
Director: 最好打開路由轉發
# iptables -t filter -F
# ifconfig eth0:0 VIP up 不加broadcast和netmask
# route add -host VIP dev eth0:0
RSs:
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# ifconfig lo:0 VIP netmask 255.255.255.255 broadcast VIP up
# route add -host VIP dev lo:0
Director:
# ipvsadm -A -t IP:PORT -s SCHEDULER(調度方法) 定義集羣服務
/proc/sys/net/ipv4/conf/etho
proc/sys/net/ipv4/conf/all
先配置參數,再去配置IP地址。
arp_announce :arp主動通告(只當有arp請求時,主機主動的通告)
arp_announce=0(默認) B網卡上的所以網卡地址都去通過
arp_announce=1 儘量只讓B上和A在同一物理網絡的網卡去通告
arp_announce=2 只讓B上和A在同一物理網絡的網卡去通告(假設A爲172.16網絡, 那就只讓m去向A通告)
arp_ignore :arp 響應
arp_ignore=0 只要主機上有地址,就去響應arp請求
arp_ignore=1 對方請求的本地IP地址,並且配置在響應報文的接口上(A去請求m, 只有m剛好在與它連接的端口上,才響應)
arp_ignore=2 同上,跟請求的一方必須在一個子網內
arp_ignore=3 同上,並且某一網卡的作用域是本地(localhost)的話,不予響應
arp_ignore=8 同上,並且全部的請求都不響應