• Rumen G. Bogdanovski's avatar
    [IPVS]: Bind connections on stanby if the destination exists · 1e356f9c
    Rumen G. Bogdanovski authored
    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: default avatarJulian Anastasov <ja@ssi.bg>
    Signed-off-by: default avatarRumen G. Bogdanovski <rumen@voicecho.com>
    Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
    1e356f9c
ip_vs_ctl.c 55.4 KB