linux/net/ipv4/ipvs
Rumen G. Bogdanovski 1e356f9cdf [IPVS]: Bind connections on stanby if the destination exists
This patch fixes the problem with node overload on director fail-over.
Given the scenario: 2 nodes each accepting 3 connections at a time and 2
directors, director failover occurs when the nodes are fully loaded (6
connections to the cluster) in this case the new director will assign
another 6 connections to the cluster, If the same real servers exist
there.

The problem turned to be in not binding the inherited connections to
the real servers (destinations) on the backup director. Therefore:
"ipvsadm -l" reports 0 connections:
root@test2:~# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  test2.local:5999 wlc
  -> node473.local:5999           Route   1000   0          0
  -> node484.local:5999           Route   1000   0          0

while "ipvs -lnc" is right
root@test2:~# ipvsadm -lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 14:56  ESTABLISHED 192.168.0.10:39164 192.168.0.222:5999
192.168.0.51:5999
TCP 14:59  ESTABLISHED 192.168.0.10:39165 192.168.0.222:5999
192.168.0.52:5999

So the patch I am sending fixes the problem by binding the received
connections to the appropriate service on the backup director, if it
exists, else the connection will be handled the old way. So if the
master and the backup directors are synchronized in terms of real
services there will be no problem with server over-committing since
new connections will not be created on the nonexistent real services
on the backup. However if the service is created later on the backup,
the binding will be performed when the next connection update is
received. With this patch the inherited connections will show as
inactive on the backup:

root@test2:~# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  test2.local:5999 wlc
  -> node473.local:5999           Route   1000   0          1
  -> node484.local:5999           Route   1000   0          1

rumen@test2:~$ cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP  C0A800DE:176F wlc
  -> C0A80033:176F      Route   1000   0          1
  -> C0A80032:176F      Route   1000   0          1

Regards,
Rumen Bogdanovski

Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Rumen G. Bogdanovski <rumen@voicecho.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
2007-11-07 04:15:09 -08:00
..
ip_vs_app.c [NETFILTER]: Replace sk_buff ** with sk_buff * 2007-10-15 12:26:29 -07:00
ip_vs_conn.c [IPVS]: Bind connections on stanby if the destination exists 2007-11-07 04:15:09 -08:00
ip_vs_core.c [NETFILTER]: Replace sk_buff ** with sk_buff * 2007-10-15 12:26:29 -07:00
ip_vs_ctl.c [IPVS]: Bind connections on stanby if the destination exists 2007-11-07 04:15:09 -08:00
ip_vs_dh.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
ip_vs_est.c [NET]: Conversions from kmalloc+memset to k(z|c)alloc. 2006-07-21 14:51:30 -07:00
ip_vs_ftp.c [NETFILTER]: Replace sk_buff ** with sk_buff * 2007-10-15 12:26:29 -07:00
ip_vs_lblc.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
ip_vs_lblcr.c [IPVS]: Remove /proc/net/ip_vs_lblcr 2007-10-30 21:16:27 -07:00
ip_vs_lc.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ip_vs_nq.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ip_vs_proto_ah.c [NET] IPV4: Use hton{s,l}() where appropriate. 2007-04-25 22:23:58 -07:00
ip_vs_proto_esp.c [INET_SOCK]: Move struct inet_sock & helper functions to net/inet_sock.h 2006-01-03 13:11:21 -08:00
ip_vs_proto_tcp.c [NETFILTER]: Replace sk_buff ** with sk_buff * 2007-10-15 12:26:29 -07:00
ip_vs_proto_udp.c [NETFILTER]: Replace sk_buff ** with sk_buff * 2007-10-15 12:26:29 -07:00
ip_vs_proto.c [IPVS]: Use kmemdup where appropriate 2006-12-02 21:30:16 -08:00
ip_vs_rr.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
ip_vs_sched.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ip_vs_sed.c Fix occurrences of "the the " 2007-05-09 08:57:56 +02:00
ip_vs_sh.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
ip_vs_sync.c [IPVS]: Bind connections on stanby if the destination exists 2007-11-07 04:15:09 -08:00
ip_vs_wlc.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ip_vs_wrr.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ip_vs_xmit.c [NET]: Treat the sign of the result of skb_headroom() consistently 2007-10-23 21:27:55 -07:00
Kconfig [IPVS]: Use menuconfig objects. 2007-05-24 16:36:47 -07:00
Makefile [IPVS]: remove net/ipv4/ipvs/ip_vs_proto_icmp.c 2005-06-02 13:02:25 -07:00