LVS的英文全稱是Linux Virtual Server,即Linux虛擬服務器。html
跨平臺:window,linux前端
實現負載均衡linux
ip_vs:linux的內核功能模塊,工做在內核,依賴該內核模塊實現負載均衡功能web
ipvsadm:應用層程序,該程序能夠和內核中的ip_vs模塊通訊,實現對負載均衡的管理和控制算法
LVS主要用於多服務器的負載均衡。它工做在網絡層,能夠實現高性能,高可用的服務器集羣技術。它廉價,可把許多低性能的服務器組合在一塊兒造成一個超級服務器。它易用,配置很是簡單,且有多種負載均衡的方法。它穩定可靠,即便在集羣的服務器中某臺服務器沒法正常工做,也不影響總體效果。另外可擴展性也很是好。後端
keepalived也能夠對ip_vs進行管理centos
1. DS:Director Server。指的是前端負載均衡器節點。
2. RS:Real Server。後端真實的工做服務器。
3. VIP:向外部直接面向用戶請求,做爲用戶請求的目標的IP地址。
4. DIP:Director Server IP,主要用於和內部主機通信的IP地址。
5. RIP:Real Server IP,後端服務器的IP地址。
6. CIP:Client IP,訪問客戶端的IP地址。瀏覽器
DR安全
NAT服務器
TUN
FULLNAT
【所謂的算法:DR按照什麼規則來從多個RS中篩選出來一個給用戶提供服務】
動態算法:DR會實時的檢測後端的RS的負載狀況,將新用戶的請求調度到一個負載較少的RS之上
靜態算法:不管後端的RS當前的服務器負載狀況怎麼樣,都安裝固定的方式來給RS分配用戶請求
rr:Round Bobin,輪詢,將客戶端的請求交替分配給RS
wrr:Weighted Round Bobin,加權輪詢,根據RS的性能不一樣,讓他們來承擔不一樣比例的用戶請求
dh:Destination Hashing,目標地址哈希調度,基於用戶所請求的地址作哈希表
做用:實現將對於相同的地址(rs)的請求調度到同一個RS之上
使用場景:適應於前端是一個DR,後端是多個cache的時候
sh:Source Hashing,源地址的哈希調度,基於用戶的ip地址作哈希表
做用:實現將同一個客戶端調度到相同的RS之上
lc:Least Connection,最小鏈接數調度,本質是調度到當前負載最低的主機上
overhead=active*256+inactive
wlc:Weighted Least Connection,加權最小鏈接數調度,本質是調度到當前負載最低的主機上
overhead=(active*256+inactive)/weight
SED:是wlc補充,爲了下降overhead出現重複的狀況
overhead=((active+1)*256+inactive))/weight
NQ:Never queue,算法基本和sed相同,爲了不性能差的RS長時間處於空閒狀態
lblc:基於目標地址的最小鏈接數調度,這種算法那是lc和dh的組合,適應於cache場景
lblcr:帶有複製功能的lblc
ipvsadm的使用格式 ipvsadm -A|E -t|u|f service-address:port [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] <<添加一個lvs服務器 ipvsadm -D -t|u|f service-address <<刪除一個lvs服務器 ipvsadm -C <<清空規則表 ipvsadm -R <<從標準輸入恢復規則表 ipvsadm -S [-n] <<使用service ipvsadm save便可 ipvsadm -a|e -t|u|f service-address -r server-address [options] <<添加一個後端web服務 ipvsadm -d -t|u|f service-address -r server-address <<刪除一個後端web服務 ipvsadm -L|l [options] << 顯示lvs中的規則表 ipvsadm -Z [-t|u|f service-address] ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid] ipvsadm --stop-daemon state ipvsadm -h
-A:添加一個虛擬服務(添加vip)[至關於負載均衡哪一個服務器] -E:編輯修改一個虛擬服務 -D:刪除虛擬服務 -C:清空規則表 -R:從標準輸入恢復規則表 --save|-S:將當前內存中的規則保存到標準輸出 -a:指定在虛擬服務中添加RS節點 [添加後端的web服務器] -e:指定在虛擬服務中編輯修改RS節點 -d:指定在虛擬服務中刪除RS節點 -L|-l:顯示lvs中的規則表 << ipvsadm -L -n --stats -Z:將計數器清零 -t service-address[:port]:該規則是對tcp協議的請求作調度 -u service-address[:port]:該規則是對udp協議的請求作調度 -f:表示這個請求是通過iptables所標記過的服務類型 -r: 指定真實服務器的地址(remote) -s scheduler:指定該規則要用的調度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq) -p [time]:指定在屢次時間之內,將相同的客戶端調度到相同的後端節點之上,默認時間300s -w:設置RS節點的權重 -g:指定用DR模式(默認) -i:指定用tunnel模式 -m:指定用nat模式
說明:lvs主要文件說明
/etc/rc.d/init.d/ipvsadm:sysV風格服務管理腳本
/etc/sysconfig/ipvsadm-config:配置文件
/sbin/ipvsadm:用於配置lvs規則的工具
/sbin/ipvsadm-restore:恢復或者讀取規則到內存的工具
/sbin/ipvsadm-save:保存內存中的規則的工具
【默認狀況下,所配置的規則都是保存在內存中的】
centos7.5
DR1 172.20.10.2/28
WEB1 172.20.10.8/28
WEB2 172.20.10.8/28
VIP 172.20.10.11/28
安裝依賴包
[root@ken ~]# yum install libnl* popt* kernel-devel -y
給安裝的內核開發庫作鏈接
[root@ken ~]# ln -s /usr/src/kernels/3.10.0-862.el7.x86_64/ /usr/src/linux/
安裝lvs
[root@ken ~]# yum install ipvsadm -y
添加一個vip
[root@ken ~]# ip a a 172.20.10.11/28 dev eth0
添加一個虛擬服務器
[root@ken ~]# ipvsadm -A -t 172.20.10.11:80 -s rr
在虛擬服務器中添加後端服務器
[root@ken ~]# ipvsadm -a -t 172.20.10.11:80 -r 172.20.10.9:80 -w 1 -g [root@ken ~]# ipvsadm -a -t 172.20.10.11:80 -r 172.20.10.8:80 -w 1 -g
查看規則
[root@ken ~]# ipvsadm -L -n --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 172.20.10.11:80 0 0 0 0 0 -> 172.20.10.8:80 0 0 0 0 0 -> 172.20.10.9:80 0 0 0 0 0
兩臺客戶端配置保持徹底相同,除了測試文件以外。
安裝配置web服務器
[root@ken ~]# yum install httpd -y [root@ken ~]# echo "this is 172.20.10.9 for test" >/var/www/html/index.html [root@ken ~]# systemctl restart http
給RS綁定虛擬IP
[root@ken ~]# ip a a 172.20.10.11/32 dev lo:0
在RS作ARP抑制
[root@ken ~]# echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore [root@ken ~]# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore [root@ken ~]# echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce [root@ken ~]# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
[root@ken ~]# setenforce 0 [root@ken ~]# iptables -F
輸入VIP地址
進行刷新測試
測試完成!
關於arp抑制
做用:設置不對某些arp請求作應答
實現原理:修改內核參數 /proc/sys/net/ipv4/conf/
控制方式1:arp_ignore
0:默認,表示的當該主機收到arp請求,只有該主機有所請求的哪一個IP地址,就會給對方作成應答
1:只對哪些請求的目標IP是當前主機的網卡接口(這個接口就是插着網線的接口)上的地址的時候,纔會作出應答
控制方式2:arp_announced
做用:限制當前主機作arp應該的條件(也就是限制當用戶所請的ip是哪一個IP的時候,才作arp應答)
0:默認值,表示在任意網絡接口上的IP均可以作arp應答
1:優先使用本地的接口作arp應答
2:優先使用子接口作arp應答