高負載叢集實戰之lvs負載均衡-技術流ken
LVS的英文全稱是Linux Virtual Server,即Linux虛擬伺服器。
特點
跨平臺:window,linux
作用
實現負載均衡
核心元件
ip_vs:linux的核心功能模組,工作在核心,依賴該核心模組實現負載均衡功能
ipvsadm:應用層程式,該程式可以和核心中的ip_vs模組通訊,實現對負載均衡的管理和控制
優點
LVS主要用於多伺服器的負載均衡。它工作在網路層,可以實現高效能,高可用的伺服器叢集技術。它廉價,可把許多低效能的伺服器組合在一起形成一個超級伺服器。它易用,配置非常簡單,且有多種負載均衡的方法。它穩定可靠,即使在叢集的伺服器中某臺伺服器無法正常工作,也不影響整體效果。另外可擴充套件性也非常好。
補充
keepalived也可以對ip_vs進行管理
2.相關術語
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地址。
3.LVS的工作模式
DR
NAT
TUN
FULLNAT
4.LVS的排程演算法
【所謂的演算法:DR按照什麼規則來從多個
動態演算法:DR會實時的檢測後端的RS的負載情況,將新使用者的請求排程到一個負載較少的RS之上
靜態演算法:無論後端的RS當前的伺服器負載情況怎麼樣,都安裝固定的方式來給RS分配使用者請求
靜態演算法
rr:Round Bobin,輪詢,將客戶端的請求交替分配給RS
wrr:Weighted Round Bobin,加權輪詢,根據RS的效能不同,讓他們來承擔不同比例的使用者請求
dh:Destination Hashing,目標地址雜湊排程,基於使用者所請求的地址做雜湊表
作用:實現將對於相同的地址(rs)的請求排程到同一個RS之上
使用場景:適應於前端是一個
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
5.ipvsadm的使用格式
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
6.ipvsad的選項引數
-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模式
7.ipvsadm主要配置檔案
說明:lvs主要檔案說明
/etc/rc.d/init.d/ipvsadm:sysV風格服務管理指令碼
/etc/sysconfig/ipvsadm-config:配置檔案
/sbin/ipvsadm:用於配置lvs規則的工具
/sbin/ipvsadm-restore:恢復或者讀取規則到記憶體的工具
/sbin/ipvsadm-save:儲存記憶體中的規則的工具
【預設情況下,所配置的規則都是儲存在記憶體中的】
8.LVS的DR模式實戰
1.準備環境
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
2.配置伺服器端
安裝依賴包
[[email protected] ~]# yum install libnl* popt* kernel-devel -y
給安裝的核心開發庫做連線
[[email protected] ~]# ln -s /usr/src/kernels/3.10.0-862.el7.x86_64/ /usr/src/linux/
安裝lvs
[[email protected] ~]# yum install ipvsadm -y
新增一個vip
[[email protected] ~]# ip a a 172.20.10.11/28 dev eth0
新增一個虛擬伺服器
[[email protected] ~]# ipvsadm -A -t 172.20.10.11:80 -s rr
在虛擬伺服器中國新增後端伺服器
[[email protected] ~]# ipvsadm -a -t 172.20.10.11:80 -r 172.20.10.9:80 -w 1 -g [[email protected] ~]# ipvsadm -a -t 172.20.10.11:80 -r 172.20.10.8:80 -w 1 -g
檢視規則
[[email protected] ~]# 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
3.配置客戶端
兩臺客戶端配置保持完全相同,除了測試檔案之外。
安裝配置web伺服器
[[email protected] ~]# yum install httpd -y [[email protected] ~]# echo "this is 172.20.10.9 for test" >/var/www/html/index.html [[email protected] ~]# systemctl restart http
給RS繫結虛擬IP
[[email protected] ~]# ip a a 172.20.10.11/32 dev lo:0
在RS做ARP抑制
[[email protected] ~]# echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore [[email protected] ~]# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore [[email protected] ~]# echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce [[email protected] ~]# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
9.瀏覽器測試
輸入VIP地址
進行重新整理測試
測試完成!
10.補充
關於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應答