關於LVS負載均衡tcp長連接分發的解決思路


雖然應用keepalived搞定了后端服務負載均衡和高可用性問題,但是在具體應用的時候,還是要注意很多問題。很多應用都用tcp或者http的長連接,因為建立tcp連接或者http連接開銷比較大,而應用端其實是需要頻繁跟server端通訊的,這時候保持長連接無疑是非常合適的。經過摸索lvs & keepalived 長連接的配置主要在三個地方:
一、client端的SoTimeout , 就java來說就是java.net.Socket的setSoTimeout方法設置的, setSoTimeout(0)就是表明超時時間無限大。這個值是為讀取阻塞設置超時的。
二、lvs的設置: 
查看是ipvsadm --list --timeout, 比如我的機器就會返回如下結果:
# ipvsadm --list --timeout 
Timeout (tcp tcpfin udp): 7200 5 60
這就表明我的tcp session的timeout時間是7200秒。
設置timeout:
ipvsadm --set 7200 5 60 
這個值如果設置太小,你的client將會收到 connection reset by peer此類的錯誤提示。
三、keepalived的配置:
就是virtual_server的persistence_timeout ,意思就是在這個一定時間內會講來自同一用戶(根據ip來判斷的)route到同一個real
server。對於長連接類的應用,你肯定需要這么做。配置值最好跟lvs的配置的timeout一致。
四、具體實例如下:
virtual_server 172.19.1.19 5222 {
   delay_loop 2
    lb_algo wrr
    lb_kind DR
    persistence_timeout 7200 
    protocol TCP

    real_server 172.19.1.8 5222 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.19.1.9 5222 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

 

http://blog.chinaunix.net/uid-25723371-id-5749631.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM