LVS负载均衡下session共享的实现方式-持久化连接
生活随笔
收集整理的這篇文章主要介紹了
LVS负载均衡下session共享的实现方式-持久化连接
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
之前簡單介紹LVS負(fù)載均衡的高可用方案實(shí)施,下面詳細(xì)說明LVS的session解決方案:
LVS算法中,SH算法可以實(shí)現(xiàn)將同一客戶端的請(qǐng)求總是發(fā)送給第一次指定的RS,除非該RS出現(xiàn)故障不能再提供服務(wù)。其實(shí)在LVS集群中,持久連接功能也能在一定時(shí)間內(nèi),將來自同一個(gè)客戶端請(qǐng)求派發(fā)至此前選定的RS,而且是無關(guān)算法的。
持久連接是什么?
1)在LVS中,持久連接是為了用來保證當(dāng)來自同一個(gè)用戶的請(qǐng)求時(shí)能夠定位到同一臺(tái)服務(wù)器。
2)為什么會(huì)用到持久連接?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 2.1)cookie/session機(jī)制的簡單說明: 在Web服務(wù)通信中,HTTP本身是無狀態(tài)協(xié)議,不能標(biāo)識(shí)用戶來源,此時(shí)出現(xiàn)了一個(gè)問題,當(dāng)用戶在一個(gè)網(wǎng)站瀏覽了A網(wǎng)頁并跳轉(zhuǎn)到B網(wǎng)頁,此時(shí)服務(wù)器就認(rèn)為B網(wǎng)頁是一個(gè)新的用戶請(qǐng)求, 那么用戶之前的登陸的信息就都丟失了!為了記錄用戶的會(huì)話信息,開發(fā)者就在客戶端/服務(wù)器端軟件提供了cookie/session機(jī)制,當(dāng)用戶訪問網(wǎng)站時(shí),服務(wù)器端建立一個(gè)session會(huì) 話區(qū),并建立一個(gè)cookie與這個(gè)session綁定,將信息發(fā)送給用戶的瀏覽器。這樣,只要用戶的cookie存在,服務(wù)器端的session存在,那么當(dāng)用戶打開新頁面的時(shí)候,服務(wù)器依然會(huì) 認(rèn)識(shí)用戶!<br> 2.2)cookie/session由負(fù)載均衡導(dǎo)致的問題: 上面說服務(wù)器需要靠session/cookie來標(biāo)記用戶的會(huì)話,這沒什么問題。不過,當(dāng)用戶在做了負(fù)載均衡的時(shí)候,就出現(xiàn)了問題。 我們依然假設(shè)一個(gè)場景:某電商網(wǎng)站為了實(shí)現(xiàn)更多用戶的訪問,提供了A、B兩臺(tái)服務(wù)器,并在前面做了LVS負(fù)載均衡。于是某用戶打開了某購物網(wǎng)站,選中了一件衣服,并加入了購物 車(此時(shí)背后的操作是:LVS負(fù)載均衡器接受了用戶請(qǐng)求,并將其分發(fā)到了選中的服務(wù)器,并將用戶添加了一件衣服記錄到這個(gè)會(huì)話的session中)。這時(shí)當(dāng)用戶打開了第二個(gè)網(wǎng)頁,又 選中了一件帽子并加入購物車(此時(shí)背后的操作是:LVS負(fù)載均衡器接受了用戶請(qǐng)求,進(jìn)行計(jì)算,將其發(fā)送到選中的服務(wù)器上,該服務(wù)器將用戶添加了一件帽子記錄到session中)。 到現(xiàn)在可能各位已經(jīng)發(fā)現(xiàn)問題了,由于LVS是一個(gè)四層負(fù)載均衡器,僅能根據(jù)IP:Port對(duì)數(shù)據(jù)報(bào)文進(jìn)行分發(fā),不能確保將同一用戶根據(jù)session發(fā)往同一個(gè)服務(wù)器,也就是用戶第一次被 分配到了A服務(wù)器,而第二次可能分配到了B服務(wù)器,但是B服務(wù)器并沒有A服務(wù)器用戶的session記錄,直接導(dǎo)致這個(gè)例子里的用戶發(fā)現(xiàn)自己的購物車沒有了之前的衣服,而僅有帽子。這是不可接受的。 為了避免上面的問題,生產(chǎn)環(huán)境中一般有三種方案: ??2.2.1)將來自于同一個(gè)用戶的請(qǐng)求發(fā)往同一個(gè)服務(wù)器 ??2.2.2)將session信息在服務(wù)器集群內(nèi)共享,每個(gè)服務(wù)器都保存整個(gè)集群的session信息 ??2.2.3)建立一個(gè)session存儲(chǔ)池,所有session信息都保存到存儲(chǔ)池中 顯然,第一種方案是最簡單,也是最節(jié)約資源的,而持久連接和sh算法就是實(shí)現(xiàn)第一種方案的兩種方式。 |
3)LVS的sh算法和持久連接:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | sh算法全稱為source?hash(源地址hash),它和持久連接的作用都是"將來自同一個(gè)IP的請(qǐng)求都轉(zhuǎn)發(fā)到同一個(gè)Server",從而保證了session會(huì)話定位的問題。兩者的不同是: 3.1)sh算法:使用SH算法,SH算法在內(nèi)核中會(huì)自動(dòng)維護(hù)一個(gè)哈希表,此哈希表中用每一個(gè)請(qǐng)求的源IP地址經(jīng)過哈希計(jì)算得出的值作為鍵,把請(qǐng)求所到達(dá)的RS的地址作為值。 在后面的請(qǐng)求中,每一個(gè)請(qǐng)求會(huì)先經(jīng)過此哈希表,如果請(qǐng)求在此哈希表中有鍵值,那么直接定向至特定RS,如沒有,則會(huì)新生成一個(gè)鍵值,以便后續(xù)請(qǐng)求的定向。但是此種 方法在時(shí)間的記錄上比較模糊(依據(jù)TCP的連接時(shí)長計(jì)算),而且其是算法本身,所以無法與算法分離,并不是特別理想的方法。 3.2)持久連接:此種方法實(shí)現(xiàn)了無論使用哪一種調(diào)度方法,持久連接功能都能保證在指定時(shí)間范圍之內(nèi),來自于同一個(gè)IP的請(qǐng)求將始終被定向至同一個(gè)RS,還可以把多種 服務(wù)綁定后統(tǒng)一進(jìn)行調(diào)度。 詳細(xì)一點(diǎn)說:當(dāng)用戶請(qǐng)求到達(dá)director時(shí)。無論使用什么調(diào)度方法,都可以實(shí)現(xiàn)對(duì)同一個(gè)服務(wù)的請(qǐng)求在指定時(shí)間范圍內(nèi)始終定向?yàn)橥粋€(gè)RS。在director內(nèi)有一個(gè)LVS持久 連接模板,模板中記錄了每一個(gè)請(qǐng)求的來源、調(diào)度至的RS、維護(hù)時(shí)長等等,所以,在新的請(qǐng)求進(jìn)入時(shí),首先在此模板中檢查是否有記錄(有內(nèi)置的時(shí)間限制,比如限制是 300秒,當(dāng)在到達(dá)300秒時(shí)依然有用戶訪問,那么持久連接模板就會(huì)將時(shí)間增加兩分鐘,再計(jì)數(shù),依次類推,每次只延長2分鐘),如果該記錄未超時(shí),則使用該記錄所指向 的RS,如果是超時(shí)記錄或者是新請(qǐng)求,則會(huì)根據(jù)調(diào)度算法先調(diào)度至特定RS,再將調(diào)度的記錄添加至此表中。這并不與SH算法沖突,lvs持久連接會(huì)在新請(qǐng)求達(dá)到時(shí),檢查 后端RS的負(fù)載狀況,這就是比較精細(xì)的調(diào)度和會(huì)話保持方法。 |
4)LVS的三種持久連接方式:
| 1 2 3 4 5 6 7 | 在基于SSL的加密https協(xié)議中,特別需要用到持久連接,因?yàn)榭蛻舳诵枰c服務(wù)器進(jìn)行交換證書并協(xié)商加密算法等。 如果一個(gè)集群中提供了兩種服務(wù),持久連接會(huì)將同一客戶端的所有請(qǐng)求都同步到同一RS。持久連接分三種: 4.1)PCC(持久端口連接):每客戶端持久;將來自于同一個(gè)客戶端的所有請(qǐng)求統(tǒng)統(tǒng)定向至此前選定的RS;也就是只要IP相同,分配的服務(wù)器始終相同。<br> 4.2)PPC(持久客戶端連接):每端口持久;將來自于同一個(gè)客戶端對(duì)同一個(gè)服務(wù)(端口)的請(qǐng)求,始終定向至此前選定的RS。例如:來自同一個(gè)IP的用戶第一次訪問 集群的80端口分配到A服務(wù)器,25號(hào)端口分配到B服務(wù)器。當(dāng)之后這個(gè)用戶繼續(xù)訪問80端口仍然分配到A服務(wù)器,25號(hào)端口仍然分配到B服務(wù)器。<br> 4.3)PFMC:持久防火墻標(biāo)記連接;將來自于同一客戶端對(duì)指定服務(wù)(端口)的請(qǐng)求,始終定向至此選定的RS;不過它可以將兩個(gè)毫不相干的端口定義為一個(gè)集群服務(wù), 例如:合并http的80端口和https的443端口定義為同一個(gè)集群服務(wù),當(dāng)用戶第一次訪問80端口分配到A服務(wù)器,第二次訪問443端口時(shí)仍然分配到A服務(wù)器。 |
5)定義LVS持久連接:
LVS的持久連接功能需要定義在集群服務(wù)上面,使用-p timeout選項(xiàng)。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 5.1)定義PPC: [root@localhost ~]# ipvsadm -At 192.168.10:80 -s rr -p 300 上面命令的意思是:添加一個(gè)集群服務(wù)為192.168.10:80,使用的調(diào)度算法為rr,持久連接的保持時(shí)間是300秒。當(dāng)超過300秒都沒有請(qǐng)求時(shí),則清空LVS的持久連接模板。 5.2)定義PCC: [root@localhost ~]# ipvsadm -A -t 192.168.10.200:0 -s rr -p 600 [root@localhost ~]# ipvsadm -a -t 192.168.10.200:0 -r 192.168.1.10 -g -w 2 [root@localhost ~]# ipvsadm -a -t 192.168.10.200:0 -r 192.168.1.20 -g -w 1 5.3)定義PFMC: ######PNMPP是通過路由前給數(shù)據(jù)包打標(biāo)記來實(shí)現(xiàn)的 [root@localhost ~]# iptables -t mangle -A PREROUTING -d 192.168.10.200 -eth0 -p tcp --dport 80 -j MARK --set-mark 3 [root@localhost ~]# iptables -t mangle -A PREROUTING -d 192.168.10.200 -eth0 -p tcp --dport 443 -j MARK --set-mark 3 [root@localhost ~]# ipvsadm -A -f 3 -s rr -p 600 [root@localhost ~]# ipvsadm -a -f 3 -r 192.168.1.10 -g -w 2 [root@localhost ~]# ipvsadm -a -f 3 -r 192.168.1.20 -g -w 2 |
6)持久連接模板查看:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | LVS的持久連接又集群的持久連接模板(一個(gè)內(nèi)存緩沖區(qū))提供;該持久連接模板保存著每一個(gè)客戶端及分配給它的RS的映射關(guān)系。使用如下命令可以查看該模板: [root@localhost ~]# ipvsadm -L -c IPVS connection entries pro expire state?source?virtual destination TCP 01:56 FIN_WAIT 192.168.10.200:51822 172.16.1.253:http 172.16.1.102:http TCP 01:57 FIN_WAIT 192.168.10.200:51825 172.16.1.253:http 172.16.1.101:http TCP 01:56 FIN_WAIT 192.168.10.200:51821 172.16.1.253:http 172.16.1.101:http 配置并啟用lvs集群的持久連接: 基本語法: # ipvsadm -A|E ... -p timeout timeout: 持久連接時(shí)長,默認(rèn)300秒;單位是秒; 啟用持久連接: [root@localhost ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.1.253:80 wlc -> 172.16.1.101:80 Route 5 0 1 -> 172.16.1.102:80 Route 5 0 2 [root@localhost ~]# ipvsadm -E -t 172.16.1.253:80 -p 600 [root@localhost ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.1.253:80 wlc persistent 600 -> 172.16.1.101:80 Route 5 0 0 -> 172.16.1.102:80 Route 5 0 1 此時(shí)再次刷新客戶端,會(huì)發(fā)現(xiàn)已經(jīng)不會(huì)再改變RS。 [root@localhost ~]# ipvsadm -L --persistent-conn IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Weight PersistConn ActiveConn InActConn -> RemoteAddress:Port TCP 172.16.1.253:http wlc persistent 600 -> 172.16.1.101:http 5 0 0 0 -> 172.16.1.102:http 5 1 0 14 |
轉(zhuǎn)載于:https://www.cnblogs.com/cheyunhua/p/8034227.html
總結(jié)
以上是生活随笔為你收集整理的LVS负载均衡下session共享的实现方式-持久化连接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CNN识别验证码2
- 下一篇: 关于table边框,设置了border-