Hi list,
I have a loadbalancer before sipproxies. I call t_reley() on the dispatcher to forward requests to destinations. All goes well under low load. But when load goes up to 500 requests/s, the loadbalancer still sends requests via only one tcp connection. This maxes out the tcp write queue. Of course I can increase the 'tcp_conn_wq_max' value but it doesn't solve the root problem. How do I make the loadbalancer start a new tcp connection to the destination when existing one becomes too busy? (Is it possible?)
Regards,
Allen
Hello,
On 7/10/13 7:13 AM, Allen Zhang wrote:
Hi list,
I have a loadbalancer before sipproxies. I call t_reley() on the dispatcher to forward requests to destinations.
All goes well under low load.
But when load goes up to 500 requests/s, the loadbalancer still sends requests via only one tcp connection. This maxes out the tcp write queue.
Of course I can increase the 'tcp_conn_wq_max' value but it doesn't solve the root problem.
How do I make the loadbalancer start a new tcp connection to the destination when existing one becomes too busy? (Is it possible?)
there is no detection for such case and it will add some complexity to manage a group of connections to same destination (but patches will be considered, of course).
However, here are some workarounds: - use set_forward_close(), but note its issues regarding replies: http://www.kamailio.org/wiki/cookbooks/devel/core#set_forward_close
- listen on several local tcp sockets and use selectively one of them via forcing local socket for sending (see $fs variable or force_send_socket(...))
Cheers, Daniel