Lvs基本問題:
在ipvsadm 的用法中,很多文檔對於persistent參數是這樣說明的。
-p –persistent [timeout]
持久穩固的服務。這個選項的意思是來自同一個客戶的多次請求,將被同一台真實的服務器處理。timeout 的默認值為300 秒。
“來自同一個客戶”該怎麼理解呢,是基於IP的客戶端還是基於浏覽器客戶端的Cookie呢,應該是基於源地址.其實還有一個參數[-M netmask],它指出源地址的匹配方式
例如 -p 900 -M 255.255.255.0
就是掩碼後網絡地址相同的請求使用同一個模板
IXDBA.NET社區論壇
因此10.1.9.8和10.1.9.9兩機器同時訪問同一個vs就使用同一個模板,即到同一個rs.
Rr調度算法很簡單,它只維護一個指向rs循環隊列的指針,如果vs請求調度,rr就把當前指針所指的rs做為本次連接請求的rs,然後後以指針.它並不管什麼模板.
即使設置"quiescent=yes",調度器能夠正確的把請求分派到正常節點,那麼在原來節點上的session由於不能復制到正常的節點,就丟失了,此時客戶端會出現要求重新登陸等的提示, 此時可以把session保存到獨立的fs,mysql,網絡存儲上。
Lvs連接算法:
對於配置了p的vs,系統在建立新連接例如<x:1234,y:80>前,先調度並創建一個連接模板例如<x:0,y:0,z:0>,該連接模板的超時時間為p的參數,例如900s,然後再根據模板創建本次可用的連接,例如<x:1234,y:80,z:80>,這樣數據就都從該連接過。如果緊接著又有<x:1235,y:443>的新請求,vs則會尋找找模板,如果找到,就不重新schedule,而是根據該模板提供的rs創建真實連接<x:1235,y:443,z:443>,並同時reset該模板的超時時間,即又重置到900s.
1.模板其實也是一個連接,不過比較特別罷了,ipvsadm -Lcn應該能看到
2.連接的超時時間就是p的參數,如果該模板被重用,超時時間就被重設。
如果用戶的每次的http請求不超過超時時間,則用戶的請求都根據模板發往固定的rs。
lvs操作的流程
數據包->vs->查找是否已存在連接
1.存在就根據該連接發包
2.不存在,是新連接,則開始調度
如果vs是普通服務器,則執行調度算法選擇一個rs,然後創建連接,然後發送
如果vs是p服務器(設置了-p –persistent參數的DR服務器),則先看看是否有模板可用,如果有,則根據該模板創建連接,然後發包。
如果沒有模板可用,就執行調度器調度到一個rs並創建模板,然後根據該模板創建連接,最後發包。
最後感謝CU qtdszws 網友的幫助,謝謝!