LVS的NAT模式和TUN模式
**
一 LVS的NAT模式
注意:VS/NAT 的優點是伺服器可以執行任何支援 TCP/IP 的作業系統,它只需要一個 IP 地址配置在排程器上,伺服器組可以用私有的 IP 地址。缺點是它的伸縮能力有限, 當伺服器結點數目升到 20 時,排程器本身有可能成為系統的新瓶頸,因為在 VS/NAT 中請求和響應報文都需要通過負載排程器。
1 LVS+ldiectord的環境 Load Balance 雙網絡卡 eth0: 172.25.1.2/24(對內) eth1: 172.25.254.200/24 (對外) Virtual IP: 172.25.254.1/24
Realserver1: 172.25.1.3 rw 172.25.1.2 Realserver1: 172.25.1.4 rw 172.25.1.2 ldirectord-3.9.5-3.1.x86_64.rpm 安裝包 2 實驗步驟
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 1 #開啟路由引數
........
測試 real server2可以ping通外網
# Sample for an http virtual service
virtual=172.25.254.1:80 #VIP
real=172.25.1.3:80 masq #masp表示NAT模式
real=172.25.1.4:80 masq
fallback=127.0.0.1:80 masq
service=http
scheduler=rr #排程策略為輪詢
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
#receive="Test Page"
#virtualhost=www.x.y.z
# Sample configuration for a fwmark based service For an explanation of
40,1 3%
/etc/init.d/ldirectord reload /etc/init.d/ldirectord restart 3)檢視排程器策略 4 ) 配置real server2 和 real server3 安裝httpd服務配置預設釋出檔案 /etc/init.d/httpd start /etc/init.d/httpd start 5)客戶端測試 6)假如其中一個real server2宕機 這裡就可以看出ldirectord有健康檢查
二 LVS的TUN模式
** 注意: VS/TUN 技術對伺服器有要求,即所有的伺服器必須支援 “ IP Tunneling” 或者 “ IP Encapsulation”協議。目前,VS/TUN 的後端伺服器主要執行 Linux 作業系統。 在 VS/TUN 的集群系統中,負載排程器只將請求排程到不同的後端伺服器,後端伺服器將應答的資料直接返回給使用者。這樣,負載排程器就可以處理大量的請求,它甚至可以調 度百臺以上的伺服器(同等規模的伺服器),而它不會成為系統的瓶頸。即使負載排程器只有 100Mbps的全雙工網絡卡,整個系統的最大吞吐量可超過 1Gbps。所以,VS/TUN 可以極大地增加負載排程器排程的伺服器數量。VS/TUN 排程器可以排程上百臺伺服器,而它本身不會成為系統的瓶頸,可以 用來構建高效能的超級伺服器。 1 實驗環境 Load Balance:172.25.1.2/24 Virtual IP: 172.25.1.100/24 Realserver1: 172.25.1.3/24 tunl0: 172.25.1.100/16 Realserver2: 172.25.1.4/24 tunl0:172.25.1.100/16
2 實驗步驟 1) 排程器上新增策略 ipvsadm -A -t 172.25.1.100:80 -s rr ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.3 -i ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.4 -i ipvsadm -ln
2)Rs1配置 新增tunl0 ipip隧道
[[email protected] network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-tunl0
NAME=tunl0
DEVICE=tunl0
IPADDR=172.25.1.100
PREIPX=24
ONBOOT=yes
[[email protected] network-scripts]#
3 )編輯/etc/sysctl.conf 進行arp包傳輸 vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
4)開啟httpd服務 5)RS2進行一樣的配置
注:
arp_ignore=1 表示對於網路上發來的arp廣播包,realserver的lo埠將會丟棄,因為如果做出應答,根據arp協議,相當於通告網路上其它主機VIP對應的Mac地址是realserver的Mac地址,而不是LB的Mac地址,這樣客戶端上就會繞過lvs,直接與後端的realserver通訊,負載排程就失去了意義;
arp_announce: realserver 一般至少兩個埠 兩個ip,eth0 有ip,lo:0也綁定了一個vip,根據arp協議,arp請求包中必須包含源主機的IP地址和Mac地址,對方收到請求包後,記錄下該源地址和Mac地址,建立一對一的對映,那麼對於這種多IP的情況,realserver傳送arp請求報的時候該如何取捨,將哪個ip作為源地址?
引數arp_anonunce 正好是用來解決這個問題的,arp_announce=2 官方表述為使用最適當的本地地址,其實就是將eth0上的ip作為源地址,如果將vip作為源地址,對方就會將vip與realserver的mac地址對映起來,導致請求包都發給realserver,而不經過lvs.
6)客戶端測試