Linux實戰教學筆記33:lvs+keepalived集群架構服務
一,LVS功能詳解
1.1 LVS(Linux Virtual Server)介紹
LVS是Linux Virtual Server 的簡寫(也叫做IPVS),意即Linux虛擬服務器,是一個虛擬的服務器集群系統,可以在UNIX/LINUX平臺下實現負載均衡集群功能。
1.2 企業網站LVS集群架構圖
1.3 IPVS軟件工作層次圖
從上圖我們看出,LVS負載均衡調度技術是在Linux內核中實現的,因此,被稱之為Linux虛擬服務器(Linux Virtual Server)。我們使用該軟件配置LVS時候,不能直接配置內核中的ipbs,而需要使用ipvs管理工具ipvsadm進行管理,或者通過Keepalived軟件直接管理ipvs。
1.4 LVS體系結構與工作原理簡單描述
- LVS集群負載均衡器接受服務的所有入站客戶端計算機請求,並根據調度算法決定哪個集群節點應該處理回復請求。負載均衡器(簡稱LB)有時也被稱為LVS Director(簡稱Director)。
- LVS虛擬服務器的體系結構如下圖所示,一組服務器通過高速的局域網或者地理分布的廣域網相互連接,在他們的前端有一個負載調度器(Load Balancer)。 負載調度器能無縫地將網絡請求調度到真實服務器上,從而使得服務器集群的結構對客戶是透明的,客戶訪問集群系統提供的網絡服務就像訪問一臺高性能,高可用的服務器一樣。客戶程序不受服務器集群的影響不需要作任何修改。系統的伸縮性通過在服務集群中透明地加入和刪除一個節點來達到,通過檢測節點或服務進程故障和正確地重置系統達到高可用性。由於我們的負載調度技術是在Linux內核中實現的,我們稱之為Linux虛擬服務器(Linux Virtual Server)。
1.5 LVS 基本工作過程圖
LVS基本工作過程如下圖所示:
為了方便大家探討LVS技術,LVS社區提供了一個命名的約定,內容如下表:
名稱 | 縮寫 | 說明 |
---|---|---|
虛擬IP | VIP | VIP為Director用於向客戶端計算機提供服務的IP地址。比如:www.yunjisuan.com域名就要解析到vip上提供服務 |
真實IP地址 | RIP | 在集群下面節點上使用的IP地址,物理IP地址 |
Dirctor的IP地址 | DIP | Director用於連接內外網絡的IP地址,物理網卡上的IP地址。是負載均衡器上的IP |
客戶端主機IP地址 | CIP | 客戶端用戶計算機請求集群服務器的IP地址,該地址用作發送給集群的請求的源IP地址 |
LVS集群內部的節點稱為真實服務器(Real Server),也叫做集群節點。請求集群服務的計算機稱為客戶端計算機。
與計算機通常在網上交換數據包的方式相同,客戶端計算機,Director和真實服務器使用IP地址彼此進行通信。
不同架構角色命名情況如下圖:
1.6 LVS集群的3種常見工作模式介紹與原理講解
IP虛擬服務器軟件IPVS
- 在調度器的實現技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有通過網絡地址轉換(Network Address Translation)將一組服務器構成一個高性能的,高可用的虛擬服務器,我們稱之為VS/NAT技術(Virtual Server via Network Address Translation),大多數商業化的IP負載均衡調度器產品都是使用NAT的方法,如Cisco的額LocalDirector,F5,Netscaler的Big/IP和Alteon的ACEDirector。
- 在分析VS/NAT 的缺點和網絡服務的非對稱性的基礎上,我們提出通過IP隧道實現虛擬服務器的方法VS/TUN(Virtual Server via IP Tunneling)和通過直接路由實現虛擬服務器的方法VS/DR(Virtual Server via Direct Routing),他們可以極大地提高系統的伸縮性。所以,IPVS軟件實現了這三種IP負載均衡技術。淘寶開源的模式FULLNAT.
LVS的四種工作模式
- NAT(Network Address Translation)
- TUN(Tunneling)
- DR(Direct Routing)
- FULLNAT(Full Network Address Translation)
1.6.1 NAT模式-網絡地址轉換<==收費站模式(了解即可)
Virtual Server via Network Address Translation(VS/NAT)
調度時:目的IP改成RIP(DNAT)
返回時:源IP改成VIP(SNAT)
NAT模式特點小結:
- NAT技術將請求的報文(DNAT)和響應的報文(SNAT),通過調度器地址重寫然後在轉發發給內部的服務器,報文返回時在改寫成原來的用戶請求的地址。
- 只需要在調度器LB上配置WAN公網IP即可,調度器也要有私有LAN IP和內部RS節點通信。
- 每臺內部RS節點的網關地址,必須要配成調度器LB的私有LAN內物理網卡地址(LDIP),這樣才能確保數據報文返回時仍然經過調度器LB。
- 由於請求與響應的數據報文都經過調度器LB,因此,網站訪問量大時調度器LB有較大瓶頸,一般要求最多10-20臺節點。
- NAT模式支持對IP及端口的轉換,即用戶請求10.0.0.1:80,可以通過調度器轉換到RS節點的10.0.0.2:8080(DR和TUN模式不具備的)
- 所有NAT內部RS節點只需要配置私有LAN IP即可。
- 由於數據包來回都需要經過調度器,因此,要開啟內核轉發net.ipv4.ip_forward=1,當然也包括iptables防火墻的forward功能(DR和TUN模式不需要)。
1.6.2 TUN模式-(了解即可)
增加一個IP頭部。通過IP隧道進行通信(可以跨網段找到RS節點)
TUN模式特點小結:
- 負載均衡器通過把請求的報文通過IP隧道的方式轉發至真實服務器,而真實服務器將響應處理後直接返回給客戶端用戶。
- 由於真實服務器將響應處理後的報文直接返回給客戶端用戶,因此,最好RS有一個外網IP地址,這樣效率才會更高。理論上:只要能出網即可,無需外網IP地址。
- 由於調度器LB只處理入站請求的報文。因此,此集群系統的吞吐量可以提高10倍以上,但隧道模式也會帶來一定得系統開銷。TUN模式適合LAN/WAN。
- TUN模式的LAN環境轉發不如DR模式效率高,而且還要考慮系統對IP隧道的支持問題。
- 所有的RS服務器都要綁定VIP,抑制ARP,配置復雜。
- LAN環境一般多采用DR模式,WAN環境可以用TUN模式,但是當前在WAN環境下,請求轉發更多的被haproxy/nginx/DNS調度等代理取代。因此,TUN模式在國內公司實際應用的已經很少。跨機房應用要麽拉光纖成局域網,要麽DNS調度,底層數據還得同步。
- 直接對外的訪問業務,例如:Web服務做RS節點,最好用公網IP地址。不直接對外的業務,例如:MySQL,存儲系統RS節點,最好用內部IP地址。
1.6.3 DR模式-直接路由模式(重點)
Virtual Server via Direct Routing(VS/DR)
VS/DR模式是通過改寫請求報文的目標MAC地址,將請求發給真實服務器的,而真實服務器將響應後的處理結果直接返回給客戶端用戶。同VS/TUN技術一樣,VS/DR技術可極大地提高集群系統的伸縮性。而且,這種DR模式沒有IP隧道的開銷,對集群中的真實服務器也沒有必須支持IP隧道協議的要求,但是要求調度器LB與正式服務器RS節點都有一塊網卡連在同一物理網段上,即必須在同一個局域網環境。
只修改目標MAC地址,通過MAC找到RS節點(無法跨網段找到RS節點)
DR模式特點小結:
- 通過在調度器LB上修改數據包的目的MAC地址實現轉發。(源IP地址仍然是CIP,目的IP地址仍然是VIP)
- 請求的報文經過調度器,而RS響應處理後的報文無需經過調度器LB,因此,並發訪問量大時使用效率很高(和NAT模式相比)
- 因DR模式是通過MAC地址的改寫機制實現的轉發,因此,所有RS節點和調度器LB只能在一個局域網LAN中(缺點)
- RS節點的默認網關不需要是調度器LB的DIP,而直接是IDC機房分配的上級路由器的IP(這是RS帶有外網IP地址的情況),理論講:只要RS可以出網即可,不是必須要配置外網IP
- 由於DR模式的調度器僅進行了目的MAC地址的改寫,因此,調度器LB無法改變請求的報文的目的端口(缺點)
- 當前,調度器LB支持幾乎所有的UNIX,LINUX系統,但目前不支持WINDOWS系統。真實服務器RS節點可以是WINDOWS系統。
- 總的來說DR模式效率很高,但是配置也較麻煩,因此,訪問量不是特別大的公司可以用haproxy/nginx取代之。這符合運維的原則:簡單,易用,高效。日2000W PV或並發請求1萬以下都可以考慮用haproxy/nginx(LVS NAT模式)
- 直接對外的訪問業務,例如:Web服務做RS節點,RS最好用公網IP地址。如果不直接對外的業務,例如:MySQl,存儲系統RS節點,最好只用內部IP地址。
1.6.4 FULLNAT模式-(了解即可)
淘寶的LVS應用模式
FULLANT特點:
1,源IP改成不同的VIP和目的IP改成RIP
2,RS處理完畢返回時,返回給不同的LVS調度器
3,所有LVS調度器之間通過session表進行Client Address的共享
1.7 LVS的調度算法
- LVS的調度算法決定了如何在集群節點之間分布工作負荷。
- 當Director調度器收到來自客戶端計算機訪問它的VIP上的集群服務的入站請求時,Director調度器必須決定哪個集群節點應該處理請求。Director調度器可用於做出該決定的調度方法分成兩個基本類別:
固定調度方法:rr,wrr,dh,sh
動態調度算法:wlc,lc,lblc,lblcr,SED,NQ
10種調度算法見如下表格(rr,wrr,wlc重點):
算法 | 說明 |
---|---|
rr | 輪循調度,它將請求依次分配不同的RS節點,也就是在RS節點中均攤請求。這種算法簡單,但是只適合於RS節點處理性能相差不大的情況 |
wrr | 權重輪循,它將依據不同RS節點的權值分配任務。權值較高的RS將優先獲得任務,並且分配到的連接數將比權值較低的RS節點更多。相同權值的RS得到相同數目的連接數 |
dh | 目的地址哈希調度,以目的地址為關鍵字查找一個靜態hash表來獲得需要的RS |
sh | 源地址哈希調度,以源地址為關鍵字查找一個靜態hash表來獲得需要的RS |
wlc | 加權最小連接數調度,實際連接數除以權值,最小的RS作為分配的RS |
lc | 最小連接數調度,連接數最小的RS作為分配的RS |
lblc | 基於地址的最小連接數調度,將來自同一目的地址的請求分配給同一臺RS節點 |
lblcr | 基於地址帶重復最小連接數調度。(略) |
SED | 最短的期望的延遲(不成熟) |
NQ | 最小隊列調度(不成熟) |
1.8 LVS的調度算法的生產環境選型
- [x] :一般的網絡服務,如Http,Mail,MySQL等,常用的LVS調度算法為:
- 基本輪叫調度rr算法
- 加權最小連接調度wlc
- 加權輪叫調度wrr算法
- [x] :基於局部性的最少鏈接LBLC和帶復制的基於局部性最少鏈接LBLCR主要適用於Web Cache和Db Cache集群,但是我們很少這樣用。(都是一致性哈希算法)
- [x] :源地址散列調度SH和目標地址散列調度DH可以結合使用在防火墻集群中,它們可以保證整個系統的唯一出入口。
- [x] :最短預期延時調度SED和不排隊調度NQ主要是對處理時間相對比較長的網絡服務。
實際使用中,這些算法的適用範圍不限於這些。我們最好參考內核中的連接調度算法的實現原理,根據具體業務需求合理的選型。
1.9 LVS集群的特點
LVS集群的特點可以歸結如下:
(1)功能:
實現三種IP負載均衡技術和10種連接調度算法的IPVS軟件。在IPVS內部實現上,采用了高效的Hash函數和垃圾回收機制,能正確處理所調度報文相關的ICMP消息(有些商品化的系統反而不能)。虛擬服務的設置數目沒有限制,每個虛擬服務都有自己的服務器集。它支持持久的虛擬服務(如HTTP Cookie 和HTTPS等需要該功能的支持),並提供詳盡的統計數據,如連接的處理速率和報文的流量等。針對大規模拒絕服務(Deny of service)攻擊,實現了三種防衛策略:有基於內容請求分發的應用層交換軟件KTCPVS,它也是在Linux內核中實現。有相關的集群管理軟件對資源進行檢測,能及時將故障屏蔽,實現系統的高可用性。主,從調度器能周期性地進行狀態同步,從而實現更高的可用性。
(2)適用性
1)後端真實服務器可運行任何支持TCP/IP的操作系統,包括Linux,各種Unix(如FreeBSD,Sun Solaris,HP Unix等),Mac/OS和windows NT/2000等。
2)負載均衡調度器LB能夠支持絕大多數的TCP和UDP協議:
協議 | 內容 |
---|---|
TCP | HTTP,FTP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等 |
UDP | DNS,NTP,TCP,視頻,音頻流播放協議等 |
無需對客戶機和服務作任何修改,可適用大多數Internet服務。
3)調度器本身當前不支持windows系統。支持大多數的Linux和UINIX系統。
(3)性能
LVS服務器集群系統具有良好的伸縮性,可支持幾百萬個並發連接。配置100M網卡,采用VS/TUN或VS/DR調度技術,集群系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s
(4)可靠性
LVS服務器集群軟件已經在很多大型的,關鍵性的站點得到很好的應用,所以它的可靠性在真實應用得到很好的證實。
(5)軟件許可證
LVS集群軟件是按GPL(GNU Public License)許可證發行的自由軟件,這意味著你可以得到軟件的源代碼,有權對其進行修改,但必須保證你的修改也是以GPL方式發行。
1.10 LVS的官方中文閱讀資料
標題 | 地址 |
---|---|
LVS項目介紹 | http://www.linuxvirtualserver.org/zh/lvs1.html |
LVS集群的體系結構 | http://www.linuxvirtualserver.org/zh/lvs2.html |
LVS集群中的IP負載均衡技術 | http://www.linuxvirtualserver.org/zh/lvs3.html |
LVS集群的負載調度 | http://www.linuxvirtualserver.org/zh/lvs4.html |
二,手動實現LVS的負載均衡功能(DR模式)
2.1 安裝LVS軟件
2.1.1 LVS應用場景說明
1)數據庫及memcache等對內業務的負載均衡環境
管理IP地址 | 角色 | 備註 |
---|---|---|
192.168.0.210 | LVS調度器(Director) | 對外提供服務的VIP為192.168.0.240 |
192.168.0.223 | RS1(真實服務器) | |
192.168.0.224 | RS2(真實服務器) |
特別提示:上面的環境為內部環境的負載均衡模式,即LVS服務是對內部業務的,如數據庫及memcache等的負載均衡
2)web服務或web cache等負載均衡環境
外部IP地址 | 內部IP地址 | 角色 | 備註 |
---|---|---|---|
192.168.200.210 | 192.168.0.210 | LVS調度器(Director) | 對外提供服務的VIP為192.168.0.240 |
192.168.200.223 | 192.168.0.223 | RS1(真實服務器) | |
192.168.200.224 | 192.168.0.224 | RS2(真實服務器) |
提示:
這個表格一般是提供Web或Web cache負載均衡的情況,此種情況特點為雙網卡環境。這裏把192.168.0.0/24假設為內網卡,192.168.200.0/24假設為外網卡。
2.1.2 實驗一概述(同學們開始做)
內部IP(eth0) | 外部IP(eth1) | 角色 | 備註 |
---|---|---|---|
192.168.0.210 | 無 | LVS負載均衡器 | VIP:192.168.0.240網關為:192.168.0.100 |
192.168.0.223 | 無 | Web01節點 | 網關為:192.168.0.100 |
192.168.0.224 | 無 | Web02節點 | 網關為:192.168.0.100 |
192.168.0.220 | 無 | 內網客戶端 | 網關為:192.168.0.100 |
無 | 192.168.200.200 | 外網客戶端 | 不配網關 |
192.168.0.100 | 192.168.200.100 | 網關型防火墻 | 雙網卡均無網關 |
2.1.3 兩臺Web配置簡單的http服務
為了方便,我們可以用yum簡單裝一個apache提供httpd服務進行測試,過程略。
2.1.4 開始安裝LVS
以下的安裝都是在LVS LB 192.168.0.210上
1)下載相關軟件包
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz # <===適合5.x系統
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz # <===適合6.x系統
2)安裝準備命令
[root@lvs01 ~]# lsmod | grep ip_vs #查看linux內核是否有ipvs服務
[root@lvs01 ~]# uname -r #查看內核版本
2.6.32-431.el6.x86_64
[root@lvs01 ~]# cat /etc/redhat-release #查看系統版本
CentOS release 6.5 (Final)
[root@lvs01 ~]# yum -y install kernel-devel #光盤安裝
[root@lvs01 ~]# ls -ld /usr/src/kernels/2.6.32-431.el6.x86_64/
drwxr-xr-x. 2 root root 4096 Aug 9 19:28 /usr/src/kernels/2.6.32-431.el6.x86_64/ #安裝完就會出現此目錄
[root@lvs01 ~]# ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/ /usr/src/linux #做一個軟連接
[root@lvs01 ~]# ll -d /usr/src/linux/
drwxr-xr-x. 2 root root 4096 Aug 9 19:28 /usr/src/linux/
[root@lvs01 ~]# ll /usr/src/
total 8
drwxr-xr-x. 2 root root 4096 Sep 23 2011 debug
drwxr-xr-x. 3 root root 4096 Aug 9 19:28 kernels
lrwxrwxrwx. 1 root root 39 Aug 9 19:28 linux -> /usr/src/kernels/2.6.32-431.el6.x86_64/
[root@lvs01 ~]#
特別註意:
此ln命令的鏈接路徑要和uname -r輸出結果內核版本對應,工作中如果做安裝虛擬化可能有多個內核路徑
如果沒有/usr/src/kernels/2.6.32-431.el6.x86_64/路徑,很可能是因為缺少kernel-devel軟件包。可通過yum進行安裝
centos5.x版本不能用ipvs1.26
3)安裝lvs命令:
[root@lvs01 ~]# yum -y install libnl* popt* #需要通過公網源安裝
[root@lvs01 ~]# cd /usr/src/ipvsadm-1.26/
[root@lvs01 ipvsadm-1.26]# make #直接編譯不需要./configure
[root@lvs01 ipvsadm-1.26]# make install
[root@lvs01 ~]# which ipvsadm
/sbin/ipvsadm
[root@lvs01 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lvs01 ~]# lsmod | grep ip_vs #執行完/sbin/ipvsadm就會有信息
ip_vs 125220 0
libcrc32c 1246 1 ip_vs
ipv6 317340 270 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
#==>出現這個內容就表示LVS已經安裝好,並加載到了內核
LVS安裝小結:
1,CentOS5.X安裝lvs,使用1.24版本。
2,CentOS6.X安裝lvs,使用1.26版本。
3,安裝lvs後,要執行ipvsadm把ip_vs模塊加載到內核。
2.2 手動配置LVS負載均衡服務
2.2.1 手工添加lvs轉發
(1)配置LVS虛擬IP(VIP)
[root@lvs01 ~]# ifconfig eth0:0 192.168.0.240 broadcast 192.168.0.240 netmask 255.255.255.0 up
[root@lvs01 ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D5:7F:9D
inet addr:192.168.0.240 Bcast:192.168.0.240 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
(2)手工執行配置添加LVS服務並增加兩臺RS
[root@lvs01 ~]# ipvsadm -C #清空ipvs歷史設置
[root@lvs01 ~]# ipvsadm --set 30 5 60 #設置超時時間(tcp tcpfin udp)
[root@lvs01 ~]# ipvsadm -A -t 192.168.0.240:80 -s rr -p 20
#說明:
-A:添加一個虛擬路由主機(LB)
-t:指定虛擬路由主機的VIP地址和監聽端口
-s:指定負載均衡算法
-p:指定會話保持時間
[root@lvs01 ~]# ipvsadm -a -t 192.168.0.240:80 -r 192.168.0.223:80 -g -w 1
[root@lvs01 ~]# ipvsadm -a -t 192.168.0.240:80 -r 192.168.0.224:80 -g -w 1
#說明:
-a:添加RS節點
-t:指定虛擬路由主機的VIP地址和監聽端口
-r:指定RS節點的RIP地址和監聽端口
-g:指定DR模式
-w:指定權值
(3)查看lvs配置結果
[root@lvs01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.240:80 rr persistent 20
-> 192.168.0.223:80 Route 1 0 0
-> 192.168.0.224:80 Route 1 0 0
(4)ipvs配置刪除方法
[root@lvs01 ~]# #ipvsadm -D -t 192.168.0.240:80 -s rr #刪除虛擬路由主機
[root@lvs01 ~]# #ipvsadm -d -t 192.168.0.240:80 -r 192.168.0.223:80 #刪除RS節點
此時,可以打開瀏覽器訪問http://192.168.0.240體驗結果,如果沒意外,是無法訪問的。(RS將包丟棄了)
2.2.2 手工在RS端綁定
#在Web01上操作
[root@web01 ~]# ifconfig lo:0 192.168.0.240/32 up #掩碼必須設置32
[root@web01 ~]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:192.168.0.240 Mask:0.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
#在Web02上操作
[root@web02 ~]# ifconfig lo:0 192.168.0.240/32 up #掩碼必須設置32
[root@web02 ~]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:192.168.0.240 Mask:0.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
2.2.3 瀏覽器測試LVS轉發效果
註意:
在測試時候你會發現刷新看的都是同一個RS節點
這是因為瀏覽器的緩存問題
等一段時間以後,刷新就會重新負載均衡到新RS節點了
2.2.4 關於DR模式RS節點的ARP抑制的問題
- 因為在DR模式下,RS節點和LVS同處一個局域網網段內。
- 當網關通過ARP廣播試圖獲取VIP的MAC地址的時候
- LVS和節點都會接收到ARP廣播並且LVS和節點都綁定了192.168.0.240這個VIP,所以都會去響應網關的這個廣播,導致沖突現象。
- 因此,我們需要對RS節點做抑制ARP廣播的措施。
[root@web01 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web01 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web01 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web01 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
2.2.5 配置網關型防火墻
防火墻的雙網卡都不要設置網關,因為自己的就網關
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 #內網網卡
link/ether 00:0c:29:ee:d3:15 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
inet6 fe80::20c:29ff:feee:d315/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 #外網網卡
link/ether 00:0c:29:ee:d3:1f brd ff:ff:ff:ff:ff:ff
inet 192.168.200.100/24 brd 192.168.200.255 scope global eth1
inet6 fe80::20c:29ff:feee:d31f/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.200.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
#防火墻不需要配置網關,因此沒有默認路由信息
[root@localhost ~]# head /etc/sysctl.conf #開啟網卡路由轉發
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 1 #修改為1
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
[root@localhost ~]# sysctl -p #讓配置即刻生效
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
特別提示:
Web01,Web02,LVS負載均衡器,以及內網客戶端均將網關設置成網關型防火墻的eth0:192.168.0.100
2.2.6 配置內網客戶端
內網客戶端用於模擬lvs應用於內網的負載均衡情況
比如lvs數據庫讀負載均衡,比如lvs memcached緩存組負載均衡
由於這類型的負載均衡請求都是由內網服務器發起,因此用內網客戶端來模擬
#內網客戶端訪問測試
root@LanClient ~]# hostname -I
192.168.0.220 #內網客戶端IP
[root@LanClient ~]# route -n #默認路由為網關防火墻
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.0.100 0.0.0.0 UG 0 0 0 eth0
[root@LanClient ~]# curl 192.168.0.240
192.168.0.224 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.223 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.224 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.223 bbs
#從上面可以看出,內網客戶端模擬訪問lvs負載均衡器,成功!
2.2.7 配置外網客戶端
外網客戶端模擬的是lvs轉發外網用戶訪問需求給RS節點處理的情況
模擬外網客戶端,要求客戶端不能配置任何網關
由於外網客戶端要訪問內網的LVS需要經過網關防火墻的跳轉,因此需要在防火墻服務器上做iptables的DNAT和SNAT,配置如下:
[root@GATEWAY ~]# hostname -I
192.168.0.100(內網網卡) 192.168.200.100(外網網卡)
[root@GATEWAY ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.200.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
[root@GATEWAY ~]# iptables -t nat -A PREROUTING -i eth1 -d 192.168.200.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.240
[root@GATEWAY ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source 192.168.200.100
[root@GATEWAY ~]# iptables -t nat -L -nv
Chain PREROUTING (policy ACCEPT 25 packets, 5251 bytes)
pkts bytes target prot opt in out source destination
32 1920 DNAT tcp -- eth1 * 0.0.0.0/0 192.168.200.100 tcp dpt:80 to:192.168.0.240
Chain POSTROUTING (policy ACCEPT 53 packets, 3208 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * eth1 192.168.0.0/24 0.0.0.0/0 to:192.168.200.100
Chain OUTPUT (policy ACCEPT 22 packets, 1348 bytes)
pkts bytes target prot opt in out source destination
[root@GATEWAY ~]#
進行外網客戶端訪問LVS負載均衡器測試
特別提示:
由於瀏覽器緩存及LVS默認會話保持等影響,個人簡單的測試切換RS的幾率要很多次並且間隔一定時間訪問才行。盡可能關閉瀏覽器換不同的客戶端IP來測試,效果更明顯一些。用單機測試是有這種情況(負載均衡的算法傾向於一個客戶端IP定向到一個後端服務器,以保持會話連貫性),如果用兩三臺機器去測試也許就不一樣。
在測試訪問的同時可以通過ipvsadm -Lnc來查看訪問結果,如下所示:
[root@lvs01 network-scripts]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:41 FIN_WAIT 192.168.0.220:59805 192.168.0.240:80 192.168.0.224:80
TCP 01:40 FIN_WAIT 192.168.0.220:59803 192.168.0.240:80 192.168.0.224:80
TCP 01:50 FIN_WAIT 192.168.200.200:34926 192.168.0.240:80 192.168.0.223:80
TCP 01:41 FIN_WAIT 192.168.0.220:59804 192.168.0.240:80 192.168.0.223:80
TCP 01:50 FIN_WAIT 192.168.200.200:34925 192.168.0.240:80 192.168.0.224:80
TCP 01:41 FIN_WAIT 192.168.0.220:59806 192.168.0.240:80 192.168.0.223:80
TCP 01:40 FIN_WAIT 192.168.0.220:59802 192.168.0.240:80 192.168.0.223:80
TCP 01:51 FIN_WAIT 192.168.200.200:34927 192.168.0.240:80 192.168.0.224:80
2.3 arp抑制技術參數說明
- [x] : arp_ignore-INTRGER
- 定義對目標地址為本地IP的ARP詢問不同的應答模式
- 0(默認值):回應任何網絡接口上對任何本地IP地址的arp查詢請求。
- 1:只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求
- 2:只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內。
- 3:不回應該網絡界面的arp請求,而只對設置的唯一和連接地址做出回應。
- 4-7:保留未使用
- 8:不回應所有(本地地址)的arp查詢。
- [x] :arp_announce-INTEGER
- 對網絡接口上,本地IP地址的發出的,ARP回應,作出相應級別的限制:確定不同程度的限制,宣布對來自本地源IP地址發出Arp請求的接口。
- 0(默認值):在任意網絡接口(eth0,eth1,lo)上的任何本地地址
- 1:盡量避免不在該網絡接口子網段的本地地址做出arp回應,當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候很有用。此時會檢查來訪IP是否為所有接口上的子網段內IP之一。如果該來訪IP不屬於各個網絡接口上的子網段內,那麽將采用級別2的方式來進行處理。
- 2:對查詢目標使用最適當的本地地址,在此模式下將忽略這個IP數據包的源地址並嘗試選擇能與該地址通信的本地地址,首要是選擇所有的網絡接口的子網中外出訪問子網中包含該目標IP地址的本地地址。如果沒有合適的地址被發現,將選擇當前的發送網絡接口或其他的有可能接受到該ARP回應的網絡接口來進行發送。限制了使用本地的vip地址作為優先的網絡接口。
2.4 開發腳本配置LVS負載均衡器端
2.4.1 LVS負載均衡器端自動配置腳本:
[root@lvs01 scripts]# cat ipvs_server.sh
#!/bin/bash
# author:Mr.chen
#LVS scripts
. /etc/init.d/functions
VIP=192.168.0.240
SUBNET="eth0:`echo $VIP | awk -F "." ‘{print $4}‘`"
PORT=80
RIP=(
192.168.0.223
192.168.0.224
)
function start(){
if [ `ifconfig | grep $VIP | wc -l` -ne 0 ];then
stop
fi
ifconfig $SUBNET $VIP broadcast $VIP netmask 255.255.255.0 up
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t $VIP:$PORT -s rr -p 20
for ((i=0;i<${#RIP[*]};i++))
do
ipvsadm -a -t $VIP:$PORT -r ${RIP[$i]} -g -w 1
done
}
function stop(){
ipvsadm -C
if [ `ifconfig | grep $VIP | wc -l` -ne 0 ];then
ifconfig $SUBNET down
fi
route del -host $VIP dev eth0 &>/dev/null
}
case "$1" in
start)
start
echo "ipvs is started"
;;
stop)
stop
echo "ipvs is stopped"
;;
restart)
stop
echo "ipvs is stopped"
start
echo "ipvs is started"
;;
*)
echo "USAGE:$0 {start | stop | restart}"
esac
2.4.2 RS節點Web服務器端自動配置腳本
[root@web01 scripts]# cat rs_server.sh
#!/bin/bash
# author:Mr.chen
# RS_sever scripts
. /etc/rc.d/init.d/functions
VIP=192.168.0.240
case "$1" in
start)
echo "start LVS of REALServer IP"
interface="lo:`echo $VIP | awk -F "." ‘{print $4}‘`"
/sbin/ifconfig $interface $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev $interface
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
;;
stop)
interface="lo:`echo $VIP | awk -F "." ‘{print $4}‘`"
/sbin/ifconfig $interface down
echo "STOP LVS of REALServer IP"
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
三,企業LVS負載均衡高可用最優方案(LVS+Keepalived)
3.1 實驗二概述(同學們開始做)
內部IP(eth0) | 外部IP(eth1) | 角色 | 備註 |
---|---|---|---|
192.168.0.210 | 無 | LVS負載均衡器(主) | VIP:192.168.0.240 |
192.168.0.211 | 無 | LVS負載均衡器(備) | VIP:192.168.0.240 |
192.168.0.223 | 無 | Web01節點 | |
192.168.0.224 | 無 | Web02節點 | |
192.168.0.220 | 無 | 內網客戶端 |
3.2 LVS負載均衡器主和備安裝LVS軟件
過程略
3.3 兩臺Web服務器安裝Web服務
過程略
3.4 LVS負載均衡器主和備安裝Keepalived軟件
[root@lvs01 ~]# yum -y install keepalived #光盤安裝即可
3.5 僅實現LVS負載均衡器主和備的keepalived高可用功能
LVS負載均衡器主的keepalived配置文件內容如下
[root@lvs01 ~]# sed -n ‘1,30p‘ /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from yunjisuan
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.240/24 dev eth0 label eth0:240
}
}
LVS負載均衡器主的keepalived配置文件內容如下
[root@localhost ~]# sed -n ‘1,30p‘ /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from yunjisuan
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.240/24 dev eth0 label eth0:240
}
}
3.6 添加LVS的負載均衡規則
以下操作過程,在LVS主和備上完全一樣
[root@localhost ~]# ipvsadm -C
[root@localhost ~]# ipvsadm -A -t 192.168.0.240:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.0.240:80 -r 192.168.0.223:80 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.0.240:80 -r 192.168.0.224:80 -g -w 1
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.240:80 rr persistent 20
-> 192.168.0.223:80 Route 1 0 0
-> 192.168.0.224:80 Route 1 0 0
3.7 啟動LVS主和備的keepalived服務
#在LVS主上
[root@lvs01 ~]# /etc/init.d/keepalived start
[root@lvs01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:D5:7F:9D
inet addr:192.168.0.210 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed5:7f9d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:23567 errors:0 dropped:0 overruns:0 frame:0
TX packets:14635 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2008524 (1.9 MiB) TX bytes:1746298 (1.6 MiB)
eth0:240 Link encap:Ethernet HWaddr 00:0C:29:D5:7F:9D
inet addr:192.168.0.240 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:769 errors:0 dropped:0 overruns:0 frame:0
TX packets:769 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:56636 (55.3 KiB) TX bytes:56636 (55.3 KiB)
#在LVS副上
[root@localhost ~]# /etc/init.d/keepalived start
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:E7:06:1D
inet addr:192.168.0.211 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee7:61d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14109 errors:0 dropped:0 overruns:0 frame:0
TX packets:4902 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12683754 (12.0 MiB) TX bytes:553207 (540.2 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:155 errors:0 dropped:0 overruns:0 frame:0
TX packets:155 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:11283 (11.0 KiB) TX bytes:11283 (11.0 KiB)
#如果LVS副上沒有VIP就對了。如果主副都有,那麽請檢查防火墻是否開啟狀態
3.8 內網客戶端進行訪問測試
#在內網客戶端上進行訪問測試
[root@LanClient ~]# curl 192.168.0.240
192.168.0.224 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.223 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.224 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.223 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.224 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.223 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.224 bbs
#在LVS主上進行訪問連接查詢
[root@lvs01 ~]# ipvsadm -Lnc
IPVS connection entries
pro expire state source virtual destination
TCP 00:01 FIN_WAIT 192.168.0.220:59887 192.168.0.240:80 192.168.0.223:80
TCP 00:01 FIN_WAIT 192.168.0.220:59889 192.168.0.240:80 192.168.0.223:80
TCP 00:01 FIN_WAIT 192.168.0.220:59888 192.168.0.240:80 192.168.0.224:80
TCP 00:00 FIN_WAIT 192.168.0.220:59886 192.168.0.240:80 192.168.0.224:80
#在LVS主上停掉keepalived服務
[root@lvs01 ~]# /etc/init.d/keepalived stop
Stopping keepalived: [ OK ]
[root@lvs01 ~]# ifconfig | grep eth0:240
#在LVS副上查看VIP
[root@localhost ~]# ip a | grep eth0:240
inet 192.168.0.240/24 scope global secondary eth0:240
#再次在內網客戶端上進行訪問測試
[root@LanClient ~]# curl 192.168.0.240
192.168.0.223 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.224 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.223 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.224 bbs
[root@LanClient ~]# curl 192.168.0.240
192.168.0.223 bbs
#在LVS副上進行訪問連接查詢
[root@localhost ~]# ipvsadm -Lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:47 FIN_WAIT 192.168.0.220:59900 192.168.0.240:80 192.168.0.223:80
TCP 01:09 FIN_WAIT 192.168.0.220:59891 192.168.0.240:80 192.168.0.224:80
TCP 01:48 FIN_WAIT 192.168.0.220:59902 192.168.0.240:80 192.168.0.223:80
TCP 01:09 FIN_WAIT 192.168.0.220:59892 192.168.0.240:80 192.168.0.224:80
TCP 01:14 FIN_WAIT 192.168.0.220:59896 192.168.0.240:80 192.168.0.224:80
TCP 01:10 FIN_WAIT 192.168.0.220:59894 192.168.0.240:80 192.168.0.224:80
#開啟LVS主上的keepalived服務
[root@lvs01 ~]# /etc/init.d/keepalived start
[root@lvs01 ~]# ip a | grep eth0:240
inet 192.168.0.240/24 scope global secondary eth0:240
#查看LVS副上VIP資源是否釋放
[root@localhost ~]# ip a | grep eth0:240
[root@localhost ~]#
綜上,至此基於LVS的keepalived高可用功能實驗完畢
3.9 通過Keepalived對LVS進行管理的功能實現
[root@lvs01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from yunjisuan
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.240/24 dev eth0 label eth0:240
}
}
virtual_server 192.168.0.240 80 { #虛擬主機VIP
delay_loop 6 #
lb_algo rr #算法
lb_kind DR #模式
nat_mask 255.255.255.0 #掩碼
# persistence_timeout 50 #會話保持
protocol TCP #協議
real_server 192.168.0.223 80 { #RS節點
weight 1 #權重
TCP_CHECK { #節點健康檢查
connect_timeout 8 #延遲超時時間
nb_get_retry 3 #重試次數
delay_before_retry 3 #延遲重試次數
connect_port 80 #利用80端口檢查
}
}
real_server 192.168.0.224 80 { #RS節點
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
以上keepalived配置文件在LVS主和備上都進行修改。
然後在lvs服務器上通過ipvsadm -C清除之前設置的規則
重新啟動keepalived服務進行測試,操作過程如下:
[root@lvs01 ~]# /etc/init.d/keepalived stop #關閉主LVS的keepalived服務
Stopping keepalived: [ OK ]
[root@lvs01 ~]# ipvsadm -Ln #沒有ipvs規則
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lvs01 ~]# ip a | grep 240 #沒有VIP
[root@lvs01 ~]# /etc/init.d/keepalived start #啟動keepalived服務
Starting keepalived: [ OK ]
[root@lvs01 ~]# ipvsadm -Ln #出現ipvs規則
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.240:80 rr
-> 192.168.0.223:80 Route 1 0 0
-> 192.168.0.224:80 Route 1 0 0
[root@lvs01 ~]# ip a | grep 240 #出現VIP
inet 192.168.0.240/24 scope global secondary eth0:240
附錄:LVS集群分發請求RS不均衡生產環境實戰解決
生產環境中ipvsadm -L -n 發現兩臺RS的負載不均衡,一臺有很多請求,一臺沒有。並且沒有請求的那臺RS經測試服務正常,lo:VIP也有。但是就是沒有請求。
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.240:80 rr persistent 10
-> 192.168.0.223:80 Route 1 0 0
-> 192.168.0.224:80 Route 1 8 12758
問題原因:
persistent 10的原因,persistent會話保持,當clientA訪問網站的時候,LVS把請求分發給了52,那麽以後clientA再點擊的其他操作其他請求,也會發送給52這臺機器。
解決辦法:
到keepalived中註釋掉persistent 10 然後/etc/init.d/keepalived reload,然後可以看到以後負載均衡兩邊都均衡了。
其他導致負載不均衡的原因可能有:
- LVS自身的會話保持參數設置(-p 300,persistent 300)。優化:大公司盡量用cookies替代session
- LVS調度算法設置,例如:rr,wrr,wlc,lc算法
- 後端RS節點的會話保持參數,例如:apache的keepalive參數
- 訪問量較少的情況,不均衡的現象更加明顯
- 用戶發送得請求時間長短,和請求資源多少大小。
Linux實戰教學筆記33:lvs+keepalived集群架構服務