在keepalived+lvs的配置文件keepalived.conf中有一個選項persistence_timeout
該選項的作用:在一定時間內使來自於同一個Client的所有TCP請求被負載到同一個RealServer上。
查看已設置的persistence_timeout
時間:
ipvsadm -S -n
查看Client連接到Server端的請求負載情況:
ipvsadm -L -n -c
#當設置了persistence_timeout 時間后,指定時間內來自同一Client的請求會被發送到同一個RealServer
說明(官方):http://www.linuxvirtualserver.org/docs/persistence.html
#大體意思
在C/S架構中,Client和Server間的多個連接有時存在着關聯性
比如FTP主動模式的20和21兩個端口:21默認為監聽端口;20則為數據傳輸端口
#20端口的開啟是建立在21端口進行了有效的用戶確認和文件交互確認后才會開啟的,是Server主動連接Client所告知的端口
但是在FTP的被動模式下,是Server主動將自己開放的隨機數據端口告知Client,然后Client再去和Server的新端口建立新的TCP連接
假如`persistence_timeout`該選項注釋掉,那么Client和Server間建立的新的TCP連接有可能被負載到另外一台RealServer上去,此時Client和Server之間處於半連接狀態,所以當有此選項時,就不會出現此問題了。
此選項對於連接關聯性是一個很好的解決方案,但是會造成輕微的負載不均衡(官方原文:slight load imbalance)
注意:
此選項設置時間過長會導致嚴重的負載不均衡,當然不光是因為時間的原因,還有比如某些網絡設置了代理服務,此時負載會將來自於該網絡內所有的用戶請求當做來自於同一Client