1. 程式人生 > >LVS的NAT模式和TUN模式

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 實驗步驟

1)在排程器上開啟地址轉發功能 編輯 vim /etc/sysctl.conf

# 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通外網 這裡寫圖片描述

2 )排程器安裝ldirectord-3.9.5-3.1.x86_64.rpm yum install ldirectord-3.9.5-3.1.x86_64.rpm -y rpm -ql ldirectord 這裡寫圖片描述 cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/ vim /etc/ha.d/ldirectord.cf

# 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)客戶端測試 這裡寫圖片描述