日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

lvs持久性工作原理和配置

 guli3057 2014-04-17
  • 作者: ISADBA|FH.CN 日期: 06/01/2012
  • 轉(zhuǎn)載請注明:
    • 作者:ISADBA.COM|FH.CN

LVS持久連接技術(shù)

lvs的持久性連接有兩方面:

  1. 把同一個client的請求信息記錄到lvs的hash表里,保存時(shí)間使用persistence_timeout控制,單位為秒。persistence_granularity 參數(shù)是配合persistence_timeout的,在某些情況特別有用,他的值是子網(wǎng)掩碼,表示持久連接的粒度,默認(rèn)是255.255.255.255,也就是單獨(dú)的client ip,如果改成,255.255.255.0就是client ip一個網(wǎng)段的都會被分配到同一個real server。
  2. 一個連接創(chuàng)建后空閑時(shí)的超時(shí)時(shí)間,這個時(shí)間為3種
    • tcp的空閑超時(shí)時(shí)間
    • lvs收到客戶端tcp fin的超時(shí)時(shí)間
    • udp的超時(shí)時(shí)間

如何查看這些值?

1
2
3
4
5
6
7
8
9
10
11
12
ipvsadm  # 可以查看連接空閑的超時(shí)時(shí)間(persistent 10)。
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  122.225.32.142:http rr persistent 10
-> 122.225.32.137:http          Route   1      0          1
-> 122.225.32.136:http          Route   1      0          0
ipvsadm -L -timeout  # 查看tcp tcpfin udp的超時(shí)時(shí)間
Timeout (tcp tcpfin udp): 900 120 300

他們是如何工作的?

ipvsadm -Lcn

IPVS connection entries
pro expire state       source             virtual            destination
TCP 00:57  NONE        110.184.96.173:0   122.225.32.142:80  122.225.32.136:80
TCP 01:57  FIN_WAIT    110.184.96.173:54568 122.225.32.142:80  122.225.32.136:80

當(dāng)一個client訪問vip的時(shí)候,ipvs或記錄一條狀態(tài)為NONE的信息,expire初始值是persistence_timeout的值,然后根據(jù)時(shí)鐘主鍵變小,在以下記錄存在期間,同一client ip連接上來,都會被分配到同一個后端。

FIN_WAIT的值就是tcp tcpfin udp的超時(shí)時(shí)間,當(dāng)NONE的值為0時(shí),如果FIN_WAIT還存在,那么NONE的值會從新變成60秒,再減少,直到FIN_WAIT消失以后,NONE才會消失,只要NONE存在,同一client的訪問,都會分配到統(tǒng)一real server。

如何設(shè)置這些值?

  • persistence_timeout可以通過以下兩種方法設(shè)置
    ipvsadm -A -t 192.168.20.154:80 -s rr -p 60
    

注意:上面命令中紅色標(biāo)記的80端口,表示同一客戶端訪問服務(wù)器的80端口,會被定義到同一個real server,如果把80端口改為0,那么同一客戶端訪問服務(wù)器的任何服務(wù)都會被轉(zhuǎn)發(fā)到同一real server。

修改keepalived配置文件,在虛擬服務(wù)器配置下面加入persistence_timeout 60

  • tcp tcpfin udp的配置
ipvsadm –set tcp tcpfin udp

# ipvsadm –set 120 50 50 //實(shí)例

建議:tcpfin的值最好小于persistence_timeout的值,這樣比較方便計(jì)算。

  • lvs持久性參考資料:

http://www./docs/persistence.html

lvs的持久連接

本文出自 “成長全記錄” 博客,請務(wù)必保留此出處http://lymrg.blog.51cto.com/1551327/684681

由于HTTP是一種無狀態(tài)協(xié)議,每次請求完畢之后就立即斷開了,當(dāng)用戶瀏覽購物網(wǎng)站挑選商品的時(shí)候,看到一件商品加入購物車,此過程被重定向到了REALSERVER1上面來,當(dāng)把第二件商品加入購物車又被重定向到了REALSERVER2上面,最后結(jié)賬的時(shí)候在REALSERVER2上面,只有一件商品,這顯然是用戶無法接受的,此時(shí)就需要一種持久連接機(jī)制,來把同一用戶的HTTP請求在超時(shí)時(shí)間內(nèi)都重定向到同一臺REALSERVER,超時(shí)時(shí)間可以自己定義,比如說2個小時(shí),在超時(shí)時(shí)間內(nèi)服務(wù)器會不斷追蹤用戶的訪問請求,把某一用戶的所有請求都轉(zhuǎn)發(fā)到同一臺REALSERVER上面,如果超時(shí)時(shí)間過后用戶依然在訪問,則默認(rèn)按照每次兩分鐘的方式無限加長

這里的所有操作都以DR模型為例,試驗(yàn)環(huán)境參見:http://lymrg.blog.51cto.com/1551327/660925

對于LVS的持久連接來說常見的分為三種PCC,PPC和基于防火墻標(biāo)記的持久連接,下面我們就來分別討論

PCC

PCC用來實(shí)現(xiàn)把某個用戶的所有訪問在超時(shí)時(shí)間內(nèi)定向到同一臺REALSERVER,這種方式在實(shí)際中不常用

ipvsadm -A -t 192.168.0.1:0 -s wlc -p 600(單位是s)
ipvsadm -a -t 192.168.0.1:0 -r 192.168.1.2 -w 4 -g
ipvsadm -a -t 192.168.0.1:0 -r 192.168.1.3 -w 2 -g

此時(shí)測試一下會發(fā)現(xiàn)通過HTTP訪問VIP和通過SSH登錄VIP的時(shí)候都被定向到了同一臺REALSERVER上面了

PPC

PPC用來把某個用戶對同一服務(wù)的訪問在超時(shí)時(shí)間內(nèi)定向到同一臺REALSERVER

ipvsadm -A -t 192.168.0.1:80 -s wlc -p 600
ipvsadm -a -t 192.168.0.1:80 -r 192.168.1.2 -w 4 -g
ipvsadm -a -t 192.168.0.1:80 -r 192.168.1.3 -w 2 -g

ipvsadm -A -t 192.168.0.1:22 -s wlc -p 300
ipvsadm -a -t 192.168.0.1:22 -r 192.168.1.2 -g
ipvsadm -a -t 192.168.0.1:22 -r 192.168.1.3 -g

此時(shí)再測試會發(fā)現(xiàn)某個用戶在超時(shí)時(shí)間內(nèi)對于某個服務(wù)的訪問都會被重定向到同一臺REALSERVER上面

防火墻標(biāo)記

基于防火墻標(biāo)記的持久連接

對于電子商務(wù)網(wǎng)站來說,用戶在挑選商品的時(shí)候使用的是80端口來瀏覽的,當(dāng)付款的時(shí)候則是通過443的ssl加密的方式,當(dāng)然當(dāng)用戶挑選完商品付款的時(shí)候我們當(dāng)然不希望https的443跳轉(zhuǎn)到另外一臺REALSERVER,很顯然應(yīng)該是同一REALSERVER才對,這時(shí)候就要用到基于防火墻標(biāo)記的持久連接,通過定義端口的姻親關(guān)系來實(shí)現(xiàn)

  1. 首先兩個REALSERVER要配置SSL,很明顯證書應(yīng)該也是一樣的
  2. 定義端口的姻親關(guān)系,給80和443端口打上同樣的防火墻標(biāo)記
  3. 配置實(shí)現(xiàn)基于防火墻標(biāo)記的LVS

yum install mod_ssl 兩個服務(wù)器上面都安裝一下

在REALSERVER1上面。也就是192.168.1.2上面如下操作

cd /etc/pki/tls/certs/
make httpd.pem  #此種SSL證書的生成方式只為測試,在實(shí)際操作中構(gòu)建

SSL參見我博客前面的完整步驟

填寫相關(guān)信息,主機(jī)名稱一定要和VIP在互聯(lián)網(wǎng)上面解析的DNS名稱一致

cp httpd.pem /etc/httpd/
vi /etc/httpd/conf.d/ssl.conf

# 找到如下行啟用并且修改
DocumentRoot "/var/www/html"
ServerName www.test.org:443   #這里修改為你得服務(wù)器名稱

# 修改證書路徑
SSLCertificateFile /etc/httpd/httpd.pem
SSLCertificateKeyFile /etc/httpd/httpd.pem

scp httpd.pem 192.168.1.3:/etc/httpd
scp /etc/httpd/conf.d/ssl.conf 192.168.1.3:/etc/httpd/conf.d/

防火墻添加mark

iptables -t mangle -A PREROUTING -d 192.168.0.1 -p tcp --dport 80 -j MARK --set-mark 10 (0-99范圍)
iptables -t mangel -A PREROUTING -d 192.168.0.1 -p tcp --dport 443 -j MARK --set-mark 10
ipvsadm -A -f 10 -s wlc -p 600
ipvsadm -a -f 10 -r 192.168.1.2 -g -w 4
ipvsadm -a -f 10 -r 192.168.1.3 -g -w 2

本文出自 “成長全記錄” 博客,請務(wù)必保留此出處http://lymrg.blog.51cto.com/1551327/684681

關(guān)于arp_announce和arp_ignore

http://lymrg.blog.51cto.com/1551327/660925

VS/DR或VS/TUN應(yīng)用的一種模型中(所有機(jī)器都在同一個物理網(wǎng)絡(luò)),所有機(jī)器(包括Director和RealServer)都使用了一個額外的IP地址,即VIP。

當(dāng)一個客戶端向VIP發(fā)出一個連接請求時(shí),此請求必須要連接至Director的VIP,而不能是RealServer的。因?yàn)?,LVS的主要目標(biāo)就是要Director負(fù)責(zé)調(diào)度這些連接請求至RealServer的。因此,在Client發(fā)出至VIP的連接請求后,只能由Director將其MAC地址響應(yīng)給客戶端(也可能是直接與Director連接的路由設(shè)備),而Director則會相應(yīng)的更新其ipvsadm table以追蹤此連接,而后將其轉(zhuǎn)發(fā)至后端的RealServer之一。

如果Client在請求建立至VIP的連接時(shí)由某RealServer響應(yīng)了其請求,則Client會在其MAC table中建立起一個VIP至RealServer的對就關(guān)系,并以至進(jìn)行后面的通信。此時(shí),在Client看來只有一個RealServer而無法意識到其它服務(wù)器的存在。

為了解決此問題,可以通過在路由器上設(shè)置其轉(zhuǎn)發(fā)規(guī)則來實(shí)現(xiàn)(靜態(tài)的MAC-IP綁定)。當(dāng)然,如果沒有權(quán)限訪問路由器并做出相應(yīng)的設(shè)置,則只能通過傳統(tǒng)的本地方式來解決此問題了。 這些方法包括:

  1. 禁止RealServer響應(yīng)對VIP的ARP請求;
  2. 在RealServer上隱藏VIP,以使得它們無法獲知網(wǎng)絡(luò)上的ARP請求;
  3. 基于“透明代理(Transparent Proxy)”或者“fwmark (firewall mark)”;
  4. 禁止ARP請求發(fā)往RealServers;

傳統(tǒng)認(rèn)為,解決ARP問題可以基于網(wǎng)絡(luò)接口,也可以基于主機(jī)來實(shí)現(xiàn)。Linux采用了基于主機(jī)的方式,因?yàn)槠淇梢栽诖蠖鄨鼍爸泄ぷ髁己?,但LVS卻并不屬于這些場景之一,因此,過去實(shí)現(xiàn)此功能相當(dāng)麻煩。現(xiàn)在可以通過設(shè)置arp_ignore,arp_announce,這變得相對簡單的多了。

Linux 2.2和2.4(2.4.26之前的版本)的內(nèi)核解決“ARP問題”的方法各不相同,且比較麻煩。幸運(yùn)的是,2.4.26和2.6的內(nèi)核中引入了兩個新的調(diào)整ARP棧的標(biāo)志(device flags):arp_announce和arp_ignore?;诖?,在DR/TUN的環(huán)境中,所有IPVS相關(guān)的設(shè)定均可使用arp_announce=2和arp_ignore=1/2/3來解決“ARP問題”了。以下是官方說明:

arp_annouce:Define different restriction levels for announcing the local source IP address from IP packets in ARP requests sent on interface;
0 - (default) Use any local address, configured on any interface.
1 - Try to avoid local addresses that are not in the target's subnet for this interface. 
2 - Always use the best local address for this target.

arp_ignore: Define different modes for sending replies in response to received ARP requests that resolve local target IP address.
0 - (default): reply for any local target IP address, configured on any interface.
1 - reply only if the target IP address is local address configured on the incoming interface.
2 - reply only if the target IP address is local address configured on the incoming interface and both with the sender's IP address are part from same subnet on this interface.
3 - do not reply for local address configured with scope host,only resolutions for golbal and link addresses are replied.
4-7 - reserved
8 - do not reply for all local addresses

arp_announce

定義了網(wǎng)卡在向外宣告自己的MAC-IP時(shí)候的限制級別,有三個值:

  • 0:默認(rèn)值,不管哪塊網(wǎng)卡接收到了ARP請求,只要發(fā)現(xiàn)本機(jī)有這個MAC都給與響應(yīng)
  • 1:盡量避免響應(yīng)ARP請求中MAC不是本網(wǎng)卡的,一個主機(jī)有多塊網(wǎng)卡,其中一塊網(wǎng)卡接收到了ARP請求,發(fā)現(xiàn)所請求的MAC是本機(jī)另一塊網(wǎng)卡的,這個時(shí)候接收到ARP請求的這塊網(wǎng)卡就盡量避免響應(yīng)
  • 2:總是使用最合適的網(wǎng)卡來響應(yīng),一個主機(jī)有多塊網(wǎng)卡,其中一塊網(wǎng)卡接收到了ARP請求,發(fā)現(xiàn)所請求的MAC是本機(jī)另一塊網(wǎng)卡的,這個時(shí)候接收到ARP請求的這塊網(wǎng)卡就一定不響應(yīng),只有發(fā)現(xiàn)請求的MAC是自己的才給與響應(yīng)

arp_ignore

定義了網(wǎng)卡在響應(yīng)外部ARP請求時(shí)候的響應(yīng)級別,這里有8個值,但我們只使用了2個

  • 0:默認(rèn)值,不管哪塊網(wǎng)卡接收到了ARP請求,只要發(fā)現(xiàn)本機(jī)有這個MAC都給與響應(yīng)
  • 1:總是使用最合適的網(wǎng)卡來響應(yīng),一個主機(jī)有多塊網(wǎng)卡,其中一塊網(wǎng)卡接收到了ARP請求,發(fā)現(xiàn)所請求的MAC是本機(jī)另一塊網(wǎng)卡的,這個時(shí)候接收到ARP請求的這塊網(wǎng)卡就一定不響應(yīng),只有發(fā)現(xiàn)請求的MAC是自己的才給與響應(yīng)

在RealServers上,VIP配置在本地回環(huán)接口lo上。如果回應(yīng)給Client的數(shù)據(jù)包路由到了eth0接口上,則arp通告或請應(yīng)該通過eth0實(shí)現(xiàn),因此,需要在sysctl.conf文件中定義如下配置:

vim /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

以上選項(xiàng)需要在啟用VIP之前進(jìn)行,否則,則需要在Drector上清空arp表才能正常使用LVS。

關(guān)于連接追蹤

到達(dá)Director的數(shù)據(jù)包首先會經(jīng)過PREROUTING,而后經(jīng)過路由發(fā)現(xiàn)其目標(biāo)地址為本地某接口的地址,因此,接著就會將數(shù)據(jù)包發(fā)往INPUT(LOCAL_IN HOOK)。此時(shí),正在運(yùn)行內(nèi)核中的ipvs(始終監(jiān)控著LOCAL_IN HOOK)進(jìn)程會發(fā)現(xiàn)此數(shù)據(jù)包請求的是一個集群服務(wù),因?yàn)槠淠繕?biāo)地址是VIP。于是,此數(shù)據(jù)包的本來到達(dá)本機(jī)(Director)目標(biāo)行程被改變?yōu)榻?jīng)由POSTROUTING HOOK發(fā)往RealServer。這種改變數(shù)據(jù)包正常行程的過程是根據(jù)IPVS表(由管理員通過ipvsadm定義)來實(shí)現(xiàn)的。

如果有多臺Realserver,在某些應(yīng)用場景中,Director還需要基于“連接追蹤”實(shí)現(xiàn)將由同一個客戶機(jī)的請求始終發(fā)往其第一次被分配至的Realserver,以保證其請求的完整性等。其連接追蹤的功能由Hash table實(shí)現(xiàn)。Hash table的大小等屬性可通過下面的命令查看:

ipvsadm -Lcn

為了保證其時(shí)效性,Hash table中“連接追蹤”信息被定義了“生存時(shí)間”。LVS為記錄“連接超時(shí)”定義了三個計(jì)時(shí)器:

  1. 空閑TCP會話;
  2. 客戶端正常斷開連接后的TCP會話;
  3. 無連接的UDP數(shù)據(jù)包(記錄其兩次發(fā)送數(shù)據(jù)包的時(shí)間間隔);

上面三個計(jì)時(shí)器的默認(rèn)值可以由類似下面的命令修改,其后面的值依次對應(yīng)于上述的三個計(jì)時(shí)器:

ipvsadm --set 28800 30 600

數(shù)據(jù)包在由Direcotr發(fā)往Realserver時(shí),只有目標(biāo)MAC地址發(fā)生了改變(變成了Realserver的MAC地址)。Realserver在接收到數(shù)據(jù)包后會根據(jù)本地路由表將數(shù)據(jù)包路由至本地回環(huán)設(shè)備,接著,監(jiān)聽于本地回環(huán)設(shè)備VIP上的服務(wù)則對進(jìn)來的數(shù)據(jù)庫進(jìn)行相應(yīng)的處理,而后將處理結(jié)果回應(yīng)至RIP,但數(shù)據(jù)包的原地址依然是VIP。

DIP要配置在接口上,VIP要配置在接口別名上

  • 在前端服務(wù)器上的配置(配置VIP)
    ifconfig eth0:0 $192.168.0.1 broadcast $192.168.0.1 netmask 255.255.255.255 up
    route add -host $192.168.0.1 dev eth0:0 
    route add -host $192.168.1.1 dev eth0
    echo 1 >/proc/sys/net/ipv4/ip_forward
    
  • 在REALSERVER上面的配置

RIP要配置在接口上,VIP要配置在lo的別名上

定義內(nèi)核參數(shù),禁止響應(yīng)對VIP的ARP廣播請求

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

配置VIP

ifconfig lo:0 $192.168.0.1 broadcast $192.168.0.1 netmask 255.255.255.255 up
route add -host 192.168.0.1 dev lo:0 # 確保如果請求的目標(biāo)IP是$VIP,那么讓出去的數(shù)據(jù)包的源地址也顯示為$VIP

在前端服務(wù)器配置并啟動服務(wù)

ipvsadm -A -t 192.168.0.1:80 -s wlc 
ipvsadm -a -t 192.168.0.1:80 -r 192.168.1.2 -g -w 4 
ipvsadm -a -t 192.168.0.1:80 -r 192.168.1.3 -g -w 2
ipvsadm -L -n

ab -c -n 10000 http://192.168.0.1/index.html 
watch -n 1 'ipvsadm -L -n'

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多