lvs也是一款負載均衡軟件,Linux虛擬服務器的簡稱。工做在os7層模型第4層,它是基於IP地址和端口號作轉發的,由於他工做在第4層,因此它不支持正則處理和動靜分離,nginx是工做在第7層的,支持這兩種。linux
最先來講防火牆是能夠實現負載均衡的,後來就移除掉了,爲何?由於跟lvs一比,就是小巫見大巫了。nginx
一、抗負載能力強。抗負載能力強、性能高,能達到F5硬件的60%;對內存和cpu資源消耗比較低算法
二、工做在網絡4層,經過vrrp(虛擬路由冗餘協議)協議轉發(僅做分發之用),具體的流量由linux內核處理,所以沒有流量的產生。sql
三、穩定性、可靠性好,自身有完美的熱備方案;(如:LVS+Keepalived)windows
四、應用範圍比較廣,能夠對全部應用作負載均衡;後端
五、不支持正則處理,不能作動靜分離。服務器
六、支持負載均衡算法:rr(輪循)、wrr(帶權輪循)、lc(最小鏈接)、wlc(權重最小鏈接)cookie
七、配置 複雜,對網絡依賴比較大,穩定性很高。網絡
一、工做在網絡的7層之上,能夠針對http應用作一些分流的策略,好比針對域名、目錄結構;併發
二、Nginx對網絡的依賴比較小,理論上能ping通就就能進行負載功能;
三、Nginx安裝和配置比較簡單,測試起來比較方便;
四、也能夠承擔高的負載壓力且穩定,通常能支撐超過1萬次的併發;
五、對後端服務器的健康檢查,只支持經過端口來檢測,不支持經過url來檢測。
六、Nginx對請求的異步處理能夠幫助節點服務器減輕負載;
七、Nginx僅能支持http、https和Email協議,這樣就在適用範圍較小。
八、不支持Session的直接保持,但能經過ip_hash來解決。、對Big request header的支持不是很好,
九、支持負載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權輪循)、Ip-hash(Ip哈希)
十、Nginx還能作Web服務器即Cache功能。
一、支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機;
二、可以補充Nginx的一些缺點好比Session的保持,Cookie的引導等工做
三、支持url檢測後端的服務器出問題的檢測會有很好的幫助。
四、更多的負載均衡策略好比:動態加權輪循(Dynamic Round Robin),加權源地址哈希(Weighted Source Hash),加權URL哈希和加權參數哈希(Weighted Parameter Hash)已經實現
五、單純從效率上來說HAProxy更會比Nginx有更出色的負載均衡速度。
六、HAProxy能夠對Mysql進行負載均衡,對後端的DB節點進行檢測和負載均衡。
七、支持負載均衡算法:Round-robin(輪循)、Weight-round-robin(帶權輪循)、source(原地址保持)、RI(請求URL)、rdp-cookie(根據cookie)
八、不能作Web服務器即Cache。
輪循(rr):挨個點後端節點,除非我後端節點的都點完了,再重頭來。
帶權輪循(wrr):設置權重,就是weight。
最小鏈接(lc):哪臺機器鏈接小,我給誰。
權重最小鏈接(wlc):帶權重。
ipvs(用這個去作策略,調用內核)和ipvsadm(工做在用戶空間)
工做原理:用戶發送一個請求,通過調度器,然後調度器經過自身的算法,發到後端真實的主機,然後real server數據返回給調度器,調度器返回給用戶,因此真實主機的網關必須指向調度器,調度器必需要有兩塊網卡,一塊通外網,一塊通內網,因此這就涉及到了路由轉發,還得設置ip_forward。
缺點:由於調度器即負責接收報文又負責發送報文,因此壓力很大,性能較低。
優勢:配置簡單。
工做原理:客戶端發送請求給調度器,調度器就收到請求以後,發現請求實在是在規則裏面存在的地址,那麼它將目標MAC改成了RIP的MAC地址,並將此包發送給real server。real server發現請求報文中的目的MAC是本身,就會將此報文接收下來,處理完請求報文後,將響應報文經過lo接口送給eth0網卡直接發送給客戶端。
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 多了一個權重的概念。
#兩塊網卡,一塊橋接 TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=192.168.1.9 GATEWAY=192.168.1.1 NETMASK=255.255.255.0 DNS1=8.8.8.8 DNS2=114.114.114.114 #一塊vmnet2(他的ip就是後端機器的網關) TYPE=Ethernet BOOTPROTO=static DEVICE=ens37 ONBOOT=yes IPADDR=172.16.100.1 #安裝ipvsadm包 cd /本地掛載點目錄/ Packages rpm -ivh ipvsadm-1.27-7.el7.x86_64.rpm #開啓路由轉發功能 echo 「1」 > /proc/sys/net/ipv4/ip_forward #添加通外網的ip ipvsadm –A(添加服務ip的意思) –t(指定tcp協議) 192.168.1.9:80 -s(算法)rr #添加real server ip ipvsadm –a –t 192.168.1.9:80 –r 172.16.100.2 –m(指定nat模式) ipvsadm –a –t 192.168.1.9:80 –r 172.16.100.3 –m(指定nat模式) #然後兩臺內網機器啓動httpd。
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=172.16.100.3 GATEWAY=172.16.100.1 NETMASK=255.255.255.0
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=172.16.100.2 GATEWAY=172.16.100.1 NETMASK=255.255.255.0 #查看配置 ipvsadm –L –n #使用windows訪問調度器外網ip測試便可
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=192.168.24.8 GATEWAY=192.168.24.2 NETMASK=255.255.255.0 DNS1=8.8.8.8 DNS2=114.114.114.114 #安裝ipvsadm yum install ipvsadm –y #添加對外提供服務IP ipvsadm –A –t 虛擬ip(必須是同一網段,隨便寫):80 -s rr #添加2臺real server IP ipvsadm –a –t 虛擬ip:80 –r 內網ip:80 –g(路由模式) #如今須要在網卡的配置中配置虛擬ip ifconfig命令需下載net-tools.x86_64 ifconfig ens33:0 虛擬ip地址 broadcast 虛擬ip地址 netmask 255.255.255.255 up #添加一個靜態路由(讓訪問250這個地址的時候走ens33:0這個網卡) route add –host 虛擬ip地址 dev ens33:0 #查看網關 route –n
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=192.168.24.9 GATEWAY=192.168.24.2 NETMASK=255.255.255.0 DNS1=8.8.8.8 DNS2=114.114.114.114 #添加vip ifconfig lo:0 虛擬ip地址 broadcast 虛擬ip地址 netmask 255.255.255.255 up #然後指定靜態路由 route add –host 虛擬ip地址 dev lo:0
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=192.168.24.10 GATEWAY=192.168.24.2 NETMASK=255.255.255.0 DNS1=8.8.8.8 DNS2=114.114.114.114 #添加vip ifconfig lo:0 虛擬ip地址 broadcast 虛擬ip地址 netmask 255.255.255.255 up #然後指定靜態路由 route add –host 虛擬ip地址 dev lo:0
#分別給兩臺後端寫入 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
#設置權重輪循 ipvsadm -C ipvsadm -A -t 192.168.24.250:80 -s wrr ipvsadm -a -t 192.168.24.250:80 -r 192.168.24.9:80 -w 1 -g ipvsadm -a -t 192.168.24.250:80 -r 192.168.24.10:80 -w 2 -g
0:默認,只用本地配置的有響應地址都給予響應
1:僅僅在目標IP是本地地址,而且是配置在請求進來的接口上的時候纔給予響應
(僅在請求的目標地址配置請求到達的接口上的時候,纔給予響應)
0:默認,表示使用配置在任何接口的任何地址向外通告
1:儘可能僅向目標網絡通告與其網絡匹配的地址
2:僅向與本地接口上地址匹配的網絡進行通告