初次搭建LVS時使用只有一張網卡的虛擬機,無論如何配置都不能跳轉到real server 上,總結發現與LVS的連接模式有關系,LVS主要有以下幾種模式:
- NAT模式;
NAT模型:地址轉換類型,主要是做地址轉換,類似于iptables的DNAT類型,它通過多目標地址轉換,來實現負載均衡;
特點和要求:
LVS(Director)上面需要雙網卡:DIP(內網)和VIP(外網)
內網的Real Server主機的IP必須和DIP在同一個網絡中,并且要求其網關都需要指向DIP的地址
RIP都是私有IP地址,僅用于各個節點之間的通信
Director位于client和Real Server之間,負載處理所有的進站、出站的通信
支持端口映射
-
通常應用在較大規模的應用場景中,但Director易成為整個架構的瓶頸。
相關機器信息;
LB1 eth0:192.168.244.132 (Vip) (公網)
eth1:192.168.27.128 (Dip) (內網)
rs1 eth0:192.168.27.130 (Rip) (內網)getway:192.168.27.128
rs2 eth0:192.168.27.131 (Rip) (內網)getway:192.168.27.128Paste_Image.png首先使用nginx將兩臺rs機器訪問頁面配置好,使得訪問rs1出現welcome to nginx!I'm rs 1!,訪問rs2出現welcome to nginx!I'm rs 2。
現在在LB上操作;
確定本機ip_vs模塊是否加載,也就是是否支持lvs,2.4.2后都支持了;然后安裝ipvsadm 用戶操作命令。ipvsadm安裝:
[root@LB1 ~]# yum install ipvsadm -y echo 1 > /proc/sys/net/ipv4/ip_forward ipvsadm -A -t 192.168.244.132:80 -s rr ipvsadm -a -t 192.168.244.132:80 -r 192.168.27.130-m ipvsadm -a -t 192.168.244.132:80 -r 192.168.27.131-m
測試頁面時可以訪問到 兩臺rs的 html頁面交替出現。
- DR模式:
特點和要求
各個集群節點必須和Director在同一個物理網絡中
RIP地址不能為私有地址,可以實現便捷的遠程管理和監控
Director僅僅負責處理入站請求,響應報文則由Real Server直接發往客戶端
集群節點Real Server 的網關一定不能指向DIP,而是指向外部路由
Director不支持端口映射
-
Director能夠支持比NAT多很多的Real Server
原理:
DR模型:直接路由模型,每個Real Server上都有兩個IP:VIP和RIP,但是VIP是隱藏的,就是不能提高解析等功能,只是用來做請求回復的源IP的,Director上只需要一個網卡,然后利用別名來配置兩個IP:VIP和DIP
Director在接受到外部主機的請求的時候轉發給Real Server的時候并不更改目標地址,只是通過arp解析的MAC地址進行封裝然后轉給Real Server,Real Server在接受到信息以后拆除MAC幀封裝,然后直接回復給CIP。Paste_Image.png
LB1: eth0: 192.168.182.133
vip(eth0:0): 192.168.182.200
RS1: eth0:192.168.182.130
lo:0(vip) :192.168.182.200
RS2: eth0:192.168.182.129
lo:0(vip) 192.168.182.200通信原理:
每個Real Server上都有兩個IP:VIP和RIP,但是VIP是隱藏的,就是不能提高解析等功能,只是用來做請求回復的源IP的,Director上只需要一個網卡,然后利用別名來配置兩個IP:VIP和DIPDirector在接受到外部主機的請求的時候轉發給Real Server的時候并不更改目標地址,只是通過arp解析的MAC地址進行封裝然后轉給Real Server,Real Server在接受到信息以后拆除MAC幀封裝,然后直接回復給CIP。
而此時需要關閉RS上的基于VIP的arp解析,在linux內核2.4以后,內核中都內置了這種功能,通過一些設置可以關閉其arp的功能:
arp_ignore:定義接收到ARP請求時的響應級別
0:默認,只用本地配置的有響應地址都給予響應
1:僅僅在目標IP是本地地址,并且是配置在請求進來的接口上的時候才給予響應(僅在請求的目標地址配置請求到達的接口上的時候,才給予響應)
arp_announce:定義將自己的地址向外通告時的級別
0:默認,表示使用配置在任何接口的任何地址向外通告
1:試圖僅向目標網絡通告與其網絡匹配的地址
2:僅向與本地接口上地址匹配的網絡進行通告
Ps:要想讓其功能生效,必須先設置相關設置,然后在配置IP地址等信息
1、開始在RS1操作:[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce [root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore [root@rs1 ~]# service network restart [root@rs1 ~]#ifconfig lo:0 192.168.182.200 netmask 255.255.255.255 broadcast 182.168.182.200 [root@rs1 ~]# route add -host 192.168.182.200 dev lo:0
上面的就是定義了arp響應的級別;還有就是vip的請求數據,從rs1的本地ip進行了回復;
2、在RS2上執行上面同樣的操作
3、在LB上操作:
配置eth0網卡ip;[root@LB1 ~]# ifconfig eth0:0 192.168.182.200/24 #在eth0:0配置vip
驗證RS的web服務,訪問兩天RS服務器均可正確訪問,分別出現I'm 1! 和 I'm 2!
接下來在DR上設置轉發:
[root@LB1 ~]# yum install ipvsadm -y ipvsadm -A -t 192.168.182.200:80 -s rr ipvsadm -a -t 192.168.182.200:80 -r 192.168.27.130 -g ipvsadm -a -t 192.168.182.200:80 -r 192.168.27.131 -g
訪問192.168.182.200測試結果,可交替出現兩臺RS的html頁面。
-
TUN模式;
其實數據轉發原理和上圖是一樣的,不過這個我個人認為主要是位于不同位置(不同機房);LB是通過隧道進行了信息傳輸,雖然增加了負載,可是因為地理位置不同的優勢,還是可以參考的一種方案;優點:負載均衡器只負責將請求包分發給物理服務器,而物理服務器將應答包直接發給用戶。所以,負載均衡器能處理很巨大的請求量,這種方式,一臺負載均衡能為超過100臺的物理服務器服務,負載均衡器不再是系統的瓶頸。使用VS-TUN方式,如果你的負載均衡器擁有100M的全雙工網卡的話,就能使得整個Virtual Server能達到1G的吞吐量。
不足:但是,這種方式需要所有的服務器支持"IP Tunneling"(IP Encapsulation)協議;
LB1: eth0: 192.168.182.132
vip(tunl0): 192.168.182.200
RS1: eth0:192.168.27.130
tunl0(vip) :192.168.182.200
RS2: eth0:192.168.138.131
tunl0(vip) :192.168.182.200LB1操作:
yum install ipvsadm -y ifconfig tunl0 192.168.182.200 broadcast 192.168.182.200 netmask 255.255.255.0 up route add -host $VIP dev tunl0 ipvsadm -A -t 192.168.182.200:80 -s rr ipvsadm -a -t 192.168.182.200:80 -r 192.168.27.130 -i ipvsadm -a -t 192.168.182.200:80 -r 192.168.138.131 -i