一,簡介
LVS(Linux Virtual Server) 是Unix-like系統中的一個虛擬服務器,是國內貢獻給開源組織的一個最優秀的項目之一。LVS在Unix-like系統中
是作為一個前端(Director)存在的,又稱為調度器,它本身不提供任何的服務,只是將通過互聯網進來的請求接受後再轉發給後台運行的真正的
服務器(RealServer)進行處理,然後響應給客戶端。
LVS有兩個重要的組件:一個是IPVS,一個是IPVSADM。ipvs是LVS的核心組件,它本身只是一個框架,類似於iptables,工作於內核空間中。
ipvsadm 是用來定義LVS的轉發規則的,工作於用戶空間中。
LVS有三種轉發類型:
1.LVS-NAT模型,稱為網絡地址轉換,實現起來比較簡單。
2.LVS-DR模型,稱為直接路由模型,應用比較廣泛。
3.LVS-TUN模型,稱為隧道模型。
二、LVS的三種模型的工作屬性:
1.LVS-NAT模型的工作屬性或特:
(1).所有的RealServer集群節點和前端調度器Director都要在同一個子網中
(2).通常情況下RealServer的IP地址(以下簡成RIP)為私有地址,便於RealServer集群節點之間進行通信
(3).通常情況下前端的Director有兩個IP地址,一個為VIP,是虛擬的IP地址,客戶端向此IP地址發起請求。
一個是DIP,是真正的Director的IP地址,RIP的網關要指向Director的DIP。
(4).這種模型可以實現端口映射
(5).RealServer的操作系統可以是任意操作系統
(6).前端的Director既要處理客戶端發起的請求,又要處理後台RealServer的響應信息,將RealServer響應的信息再轉發給客戶端
(7).前端Director很容易成為整個集群系統性能的瓶頸。
2.LVS-DR模型的工作屬性或特征:此種模型通過MAC地址轉發工作,如何轉發後面將會介紹。
(1).所有的RealServer集群節點和前端調度器Director都要在同一個物理網絡中
(2).RIP可以使用公網的IP
(3).RIP的網關不能指向DIP
(4).前端的Director只處理客戶端的請求,然後將請求轉發給RealServer,由後台的RealServer直接響應客戶端,不再經過Director
(5).此種模型不支持端口映射
(6).RealServer可以使用大多數的操作系統
(7).此種模型的性能要優於LVS-NAT
3.LVS-TUN模型的基本工作屬性或特征
(1).RealServer服務器與前端的Director可以在不同的網絡中
(2).RIP一定不能是私有IP
(3).前端的Director只處理客戶端的請求,然後將請求轉發給RealServer,由後台的RealServer直接響應客戶端,不再經過Director
(4).此種模型也不支持端口映射
(5).RealServer只能使用哪些支持IP隧道的操作系統
三。LVS Scheduling Method LVS的調度方法:
1.Fixed Scheduling Method 靜態調服方法
(1).RR 輪詢
(2).WRR 加權輪詢
(3).DH 目標地址hash
(4).SH 源地址hash
2.Dynamic Scheduling Method 動態調服方法
(1).LC 最少連接
(2).WLC 加權最少連接
(3).SED 最少期望延遲
(4).NQ 從不排隊調度方法
(5).LBLC 基於本地的最少連接
(6).LBLCR 帶復制的基於本地的最少連接
四、ipvsadm組件定義規則的格式:
1.定義集群服務格式:
(1).添加集群服務:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
[-p [timeout]] [-M netmask]
-A: 表示添加一個新的集群服務
-E: 編輯一個集群服務
-t: 表示tcp協議
-u: 表示udp協議
-f: 表示firewall-Mark,防火牆標記
service-address: 集群服務的IP地址,即VIP
-s 指定調度算法
-p 持久連接時長,如#ipvsadm -Lcn ,查看持久連接狀態
-M 定義掩碼
ipvsadm -D -t|u|f service-address 刪除一個集群服務
ipvsadm -C 清空所有的規則
ipvsadm -R 重新載入規則
ipvsadm -S [-n] 保存規則
2.向集群服務添加RealServer規則:
(1).添加RealServer規則
ipvsadm -a|e -t|u|f service-address -r server-address
[-g|i|m] [-w weight]
-a 添加一個新的realserver規則
-e 編輯realserver規則
-t tcp協議
-u udp協議
-f firewall-Mark,防火牆標記
service-address realserver的IP地址
-g 表示定義為LVS-DR模型
-i 表示定義為LVS-TUN模型
-m 表示定義為LVS-NAT模型
-w 定義權重,後面跟具體的權值
ipvsadm -d -t|u|f service-address -r server-address --刪除一個realserver
ipvsadm -L|l [options] --查看定義的規則
如:#ipvsadm -L -n
ipvsadm -Z [-t|u|f service-address] --清空計數器
五、LVS-NAT模型實例 1。先配置好網絡環境,要三個虛擬機(本次實驗在虛擬機上完成),一台用作Director,其他兩台分別為RealServer1 和RealServer2
其中Director要兩個網卡,Eth0網卡為橋接(Birdged),Eth1網卡為僅主機(Host-only),RealServer1 和RealServer2的網卡也都是僅主機
類型的。
2.為了演示效果,將Director的兩塊網卡配置成不在同一個網段的IP地址,RealServer1 和RealServer2的IP地址為同一網段,規劃如下圖:
要注意的是:要將本地物理機的Vmnet1的IP地址配置成和Director的Eth1網卡的IP地址在同一個網段中,同時將RealServer1和RealServer2的網關指向Director主機的Eth1網卡的地址,如下圖所示:
3.配置好網絡環境之後就開始配置ipvsadm,確保在物理機上能ping通Eth0的IP地址,如下圖所示:
能Ping通,說明物理主機已經可以和Director虛擬主機通信了。
4.在Director虛擬主機上配置:
#echo 1 > /proc/sys/net/ipv4/ip_forward --開啟IP轉發功能
#rpm -qa ipvsadm --查看ipvsadm是否安裝,如果沒有安裝則安裝之,直接使用yum安裝即可
#yum install ipvsadm -y
定義LVS-NAT模型規則
此處使用的是web服務器進行的演示,在192.168.24.44和192.168.24.45上都提供了nginx服務,其中
192.168.24.44提供的網頁信息為“welcome realserver 1”,192.168.24.45提供的網頁信息為“welcome realserver 2”
#ipvsadm -A -t 172.16.100.24:80 -s rr
#ipvsadm -a -t 172.16.100.24:80 -r 192.168.24.44 -m
#ipvsadm -a -t 172.16.100.24:80 -r 192.168.24.45 -m
#ipvsadm -L -n --查看定義的規則
這些規則都是臨時規則,不會永久生效的,要想永久生效可以保存規則,命令如下:
#service ipvsadm save
5.在Internet Explorer浏覽器中訪問172.16.100.24,會顯示如下圖所示信息:
而在google浏覽器中訪問172.16.100.24,會顯示如下圖所示信息:
如果刷新頁面或者使用不同的浏覽器,會輪流顯示頁面,這就是最簡單的服務器負載均衡啦!
六、LVS-DR模型的實現過程:
1.首先規劃集群和網路環境,需要三台虛擬機,如下圖所示:
此時Director可以只有一個網卡Eth0,連接類型為橋接(Birdged),RealServer1和RealServer2 的網卡連接類型也都為橋接(Birdged):
2.配置集群服務
(1).在Director服務器上配置:
#ifconfig eth0:1 172.16.100.100 broadcast 172.16.100.100 netmask 255.255.255.255 up
#route add -host 172.16.100.100 dev eth0:1
#echo 1 > /proc/sys/net/ipv4/ip_forward --開啟IP轉發功能
(2).在realserve1服務器上進行配置:
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#ifconfig lo:0 172.16.100.100 broadcast 172.16.100.100 netmask 255.255.255.255 up
#route add -host 172.16.100.100 dev lo:0
(3).在realserver2 服務器上進行配置
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#ifconfig lo:0 172.16.100.100 broadcast 172.16.100.100 netmask 255.255.255.255 up
#route add -host 172.16.100.100 dev lo:0
(4).再在Director上配置ipvsadm規則:
#ipvsadm -A -t 172.16.100.100:80 -s rr -g
#ipvsadm -a -t 172.16.100.100:80 -r 172.16.24.34
#ipvsadm -a -t 172.16.100.100:80 -r 172.16.24.44
(5).在浏覽器中進行驗證:
進行第一次訪問,如下圖所示:
進行第二次訪問,如下圖所示:
3.基於ssl的訪問
[root@mail ~]# ipvsadm -A -t 172.16.100.100:443 -s rr
[root@mail ~]# ipvsadm -a -t 172.16.100.100:443 -r 172.16.24.2 -g
[root@mail ~]# ipvsadm -a -t 172.16.100.100:443 -r 172.16.24.3 -g
二、LVS Persistence ,lvs的持久連接性
持久連接類型:
(1).Persistent Client Connections(PCC),持久客戶端連接:就是不管客戶端發起什麼樣的服
務(如80端口的web服務,3306端口的mysql服務)請求,都將經過Director被定位到同一個特定的real server上,
只要此real server 提供了這種服務,並且會持續連接,如果客戶端連接超時,real server允許一定范圍內的
持久連接時長,默認持久連接時長為300m
#ipvsadm -A -t 172.16.100.100:0 -p 1200
#ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.34 -g -w 10
#ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.44 -g -w 5
驗證效果如下圖:
(2).Persistent Port Connections(PPC),持續端口連接:就是不管客戶端發起什麼樣的端口請求(如80端口,是提供web服務的,23端口,是提供telnet服務的....),
都會經過Director將請求轉發到同一個real server上,並持續連接。假如一個客戶端請求的是web服務,相應的是realserver1 ,當此用戶退出後再次發起請求web服務的時候
依然是realserver1 提供的web服務。
iptables:
[root@mail ~]# iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.100.100 --dport 80 -j MARK --set-mark 20
[root@mail ~]# iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.100.100 --dport 443 -j MARK --set-mark 20
[root@mail ~]# iptables -t mangle -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
MARK tcp -- 0.0.0.0/0 172.16.100.100 tcp dpt:80 MARK set 0x14
MARK tcp -- 0.0.0.0/0 172.16.100.100 tcp dpt:443 MARK set 0x14
把80端口和443 端口做成一個持久防火牆標記,同時定向到同一個realserver上,即在訪問80服務的時候是realserver1,
然後改為訪問443服務的時候依然定向到realserver1上
基於防火牆標記來定義集群服務,也稱為端口的姻親關系。
ipvsadm:
[root@mail ~]# ipvsadm -A -f 20 -s wlc -p 1200
[root@mail ~]# ipvsadm -a -f 20 -r 172.16.24.2 -g -w 3
[root@mail ~]# ipvsadm -a -f 20 -r 172.16.24.3 -g -w 2
[root@mail ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 20 wlc persistent 1200
-> 172.16.24.3:0 Route 2 0 0
-> 172.16.24.2:0 Route 3 0
本文出自 “知識體系” 博客