LVS(Linux Virtual Server)
一、lvs的組成
LVS 由2部分程序組成,包括 ipvs 和 ipvsadm。
1. ipvs(ip virtual server):一段代碼工作在內核空間,叫ipvs,是真正生效實現調度的代碼。
2. ipvsadm:另外一段是工作在用戶空間,叫ipvsadm,負責為ipvs內核框架編寫規則,定義誰是集群服務,而誰是後端真實的服務器(Real Server)
二、lvs的三種模式
VS/DR
【路由模式】
環境配置:
調度器LB ,RealServer1.RealServer2都改為nat模式
執行命令:
調度器 :
yum install ipvsadm -y
ipvsadm -C
#添加對外提供的服務ip ipvsadm -A -t 192.168.254.250:80 -s rr #-A為ADD -t為tcp -s rr為設置算法為輪叫算法 #添加2臺real_server主機 ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18:80 -g #-a為add -t為tcp -r為realserver -g為DR路由模式 ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19:80 -g #-a為add -t為tcp -r為realserver -g為DR路由模式 #配置網卡的子網口為vip,ip地址為192.168.254.250 ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up #添加路由(訪問192.168.254.250都走ens33:0這個網卡) route add -host 192.168.254.250 dev ens33:0
#查看
route -n
RealServer1/RealServer2 :
#在回環地址的子網口上配置服務ip(vip) ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up #添加路由 route add -host 192.168.254.250 dev lo:0 echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
VS/TUN
VS/NAT
【nat模式】
環境配置:
調度器LB :一個橋接模式(192.168.1.120),一個vmnat2(192.168.254.1不設置網關)
RealServer1 :192.168.254.2 192.168.254.1 255.255.255.0
RealServer2 :192.168.254.3 192.168.254.1 255.255.255.0
執行命令:
調度器LB :vim /etc/sysctl.conf(net.ipv4.ip_forward=1) #開啟路由轉發
sysctl -p #生效
yum install ipvsadm -y #下載ipvsadm
ipvsadm -A -t 192.168.31.100:80 -s rr #-A Add server -t tcp -s 算法
ipvsadm -a -t 192.168.31.100:80 -r 192.168.250.2 -m -m nat -t 對外宣稱的ip地址 -r 真實的ip
ipvsadm -a -t 192.168.31.100:80 -r 192.168.250.3 -m
curl 192.168.1.120
三、LVS的八種調度方法
1. 輪叫調度 rr
這種算法是最簡單的,就是按依次循環的方式將請求調度到不同的服務器上,該算法最大的特點就是簡單。輪詢算法假設所有的服務器處理請求的能力都是一樣的,調度器會將所有的請求平均分配給每個真實服務器,不管後端 RS 配置和處理能力,非常均衡地分發下去。
2. 加權輪叫 wrr
這種算法比 rr 的算法多了一個權重的概念,可以給 RS 設置權重,權重越高,那麽分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr算法的一種優化和補充, LVS 會考慮每臺服務器的性能,並給每臺服務器添加要給權值,如果服務器A的權值為1,服務器B的權值為2,則調度到服務器B的請求會是服務器A的2倍。權值越高的服務器,處理的請求越多。
3. 最少鏈接 lc
這個算法會根據後端 RS 的連接數來決定把請求分發給誰,比如 RS1 連接數比 RS2 連接數少,那麽請求就優先發給 RS1
4. 加權最少鏈接 wlc
這個算法比 lc 多了一個權重的概念。
5. 基於局部性的最少連接調度算法 lblc
這個算法是請求數據包的目標 IP 地址的一種調度算法,該算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的服務器,如果這臺服務器依然可用,並且有能力處理該請求,調度器會盡量選擇相同的服務器,否則會繼續選擇其它可行的服務器
6. 復雜的基於局部性最少的連接算法 lblcr
記錄的不是要給目標 IP 與一臺服務器之間的連接記錄,它會維護一個目標 IP 到一組服務器之間的映射關系,防止單點服務器負載過高。
7. 目標地址散列調度算法 dh
該算法是根據目標 IP 地址通過散列函數將目標 IP 與服務器建立映射關系,出現服務器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該服務器。
8. 源地址散列調度算法 sh
與目標地址散列調度算法類似,但它是根據源地址散列算法進行靜態分配固定的服務器資源。
LVS(Linux Virtual Server)