[lvs-users] LVS-DR/ipvsadm displaying incorrect ActiveConn for custom TCP service

Simon Horman horms at verge.net.au
Sat Feb 5 21:42:36 GMT 2011

On Fri, Feb 04, 2011 at 06:20:24PM -0800, Kon Wilms wrote:
> All,
> I'm running a custom TCP service on port 80 which fields byterange
> requests to clients. When running LVS-DR with WLC scheduling, an
> ipvsadm -L -n displays seemingly incorrect ActiveConn counts. When
> loading the server with 500 clients I will only see a dozen at best
> ActiveConn entries. This leads me to believe that WLC may not be
> working correctly, or may be scheduling clients incorrectly.
> Config excerpts:
> ldirectord.cf:
> quiescent=yes
> virtual=x.x.x.1:80
>        real=x.x.x.2:80 gate
>        real=x.x.x.3:80 gate
>        fallback= gate
>        scheduler=wlc
>        persistent=600
>        netmask=
>        protocol=tcp
>        checktype=ping
>        failurecount=3
> Testing using RR scheduling works as advertised and I can confirm that
> the DR is indeed working from parsing the server logs being generated
> for connection requests.
> Perhaps it is a misunderstanding of the connection state related to
> ActiveConn on my part, or something else. Any pointers are
> appreciated.

Hi Kon,

I believe that you are coming up against a bug in ipvsadm 1.25.

There are several options available to resolve this:

1) Obtain the latest sources from svn
   # svn checkout http://svn.linuxvirtualserver.org/repos/ipvsadm/trunk

2) Obtain the first revision to include the fix for this problem from svn:
   # svn checkout http://svn.linuxvirtualserver.org/repos/ipvsadm/trunk@64

3) Apply the patch below

4) Compile ipvsadm without netlink support
   - Most easily achieved by compiling without libnl installe
   - This also disables IPv6 support

>From 34c033ca687705068542dbc8f202a170706dc228 Mon Sep 17 00:00:00 2001
From: wensong <wensong at 36f5d8da-7431-0410-8ca5-ec586ed2521a>
Date: Wed, 21 Jul 2010 23:50:58 +0000
Subject: [PATCH] This fixes what appears to be a typo in the netlink client code
 whereby the activeconns is read as activeconns and then
 overwritten by persistentconns. The result is that the active
 connection count reported by ipvsadm -L is wrong if the
 code is compiled to use the netlink interface.

Tested-by: Nigel Kukard <nkukard at lbsd.net>
Signed-off-by: Simon Horman <horms at verge.net.au>
Signed-off-by: Wensong Zhang <wensong at linux-vs.org>

git-svn-id: http://svn.linuxvirtualserver.org/repos/ipvsadm/trunk@64 36f5d8da-7431-0410-8ca5-ec586ed2521a
 libipvs/libipvs.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/libipvs/libipvs.c b/libipvs/libipvs.c
index 9a42712..979d5bd 100644
--- a/libipvs/libipvs.c
+++ b/libipvs/libipvs.c
@@ -748,7 +748,7 @@ static int ipvs_dests_parse_cb(struct nl_msg *msg, void *arg)
 	d->entrytable[i].l_threshold = nla_get_u32(dest_attrs[IPVS_DEST_ATTR_L_THRESH]);
 	d->entrytable[i].activeconns = nla_get_u32(dest_attrs[IPVS_DEST_ATTR_ACTIVE_CONNS]);
 	d->entrytable[i].inactconns = nla_get_u32(dest_attrs[IPVS_DEST_ATTR_INACT_CONNS]);
-	d->entrytable[i].activeconns = nla_get_u32(dest_attrs[IPVS_DEST_ATTR_PERSIST_CONNS]);
+	d->entrytable[i].persistconns = nla_get_u32(dest_attrs[IPVS_DEST_ATTR_PERSIST_CONNS]);
 	d->entrytable[i].af = d->af;
 	if (ipvs_parse_stats(&(d->entrytable[i].stats),

More information about the lvs-users mailing list