LVS
lvs-users
Google
 
Web LinuxVirtualServer.org

[lvs-users] Problems when combining TCP and UDP on the same port

To: <lvs-users@xxxxxxxxxxxxxxxxxxxxxx>
Subject: [lvs-users] Problems when combining TCP and UDP on the same port
From: "Andrzej Lisowski" <andrzej.lisowski@xxxxxxxxxxxx>
Date: Mon, 11 Feb 2008 12:11:00 +0100
Hi All,

My name is Andrzej Lisowski. Right now I'm busy with an open source
project called SailFin (https://sailfin.dev.java.net). Within this
project I'm using ldirectord to handle Virtual IP for my SailFin
cluster. I'm using SIP protocol to communicate with my cluster. SIP
requires to have both UDP and TCP traffic enabled on the same port on my
Linux Director. The ldirectord runs on Suse Linux Enterprise Server 10
SP1. 
The ldirectord -v gives me the following printout:

itcpc80:/home/telorb # ldirectord -v
Linux Director v1.186-ha-2.0.8
1999-2006 Jacob Rief, Horms and others
<http://www.vergenet.net/linux/ldirectord/>

ldirectord comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the GNU General Public Licence for
details.
Use of uninitialized value in numeric gt (>) at /usr/sbin/ldirectord
line 3780.

My ldirectord.cf file looks as follows:

# Global Directives
checktimeout=10
checkinterval=5
negotiatetimeout=10
checkcount=1
#fallback=127.0.0.1:80
autoreload=no
logfile="/var/log/ldirectord.log"
#logfile="local0"
emailalert="myemail@xxxxxxxxxxxx"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no


# SailFin cluster
virtual=164.48.52.202:15060
       real=164.48.52.204:35060 masq
       real=164.48.52.206:35060 masq
       real=164.48.52.208:35060 masq
       real=164.48.52.210:35060 masq
       fallback=127.0.0.1:15060 gate
       service=http
       scheduler=rr
       protocol=udp
       checktype=negotiate
       checkport=38080
       request="/aliveUDP/aliveUDP"
       receive="Hello UDP"

# SailFin cluster
virtual=164.48.52.202:15060
       real=164.48.52.204:35060 masq
       real=164.48.52.206:35060 masq
       real=164.48.52.208:35060 masq
       real=164.48.52.210:35060 masq
       fallback=127.0.0.1:15060 gate
       service=http
       scheduler=rr
       protocol=tcp
       checktype=negotiate
       checkport=38080
       request="/alive/alive"
       receive="Hello World"


There are two problems that I encounter in this setup.
1. The real server is not removed from the list UDP when it's down
In case when it happens that a real server goes down than it does not
respond anymore on the http requests that are sent from the ldirectord.
The list for the TCP servers is than updated accordingly i.e. the faulty
server is removed from the TCP server list. But unfortunately it remains
hanging in the UDP section. When at this moment I stop and start the
ldirectord than the TCP  and UDP lists will be the same i.e. the real
server that is down is not added to UDP. The problem is that a crashed
server will never be removed from UDP list while TCP at the same time
remains up to date.
The strange is that when I remove complete TCP section from the
ldirectord.cf file and it looks as follows

# Global Directives
checktimeout=10
checkinterval=5
negotiatetimeout=10
checkcount=1
#fallback=127.0.0.1:80
autoreload=no
logfile="/var/log/ldirectord.log"
#logfile="local0"
emailalert="myemail@xxxxxxxxxxxx"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no


# SailFin cluster
virtual=164.48.52.202:15060
       real=164.48.52.204:35060 masq
       real=164.48.52.206:35060 masq
       real=164.48.52.208:35060 masq
       real=164.48.52.210:35060 masq
       fallback=127.0.0.1:15060 gate
       service=http
       scheduler=rr
       protocol=udp
       checktype=negotiate
       checkport=38080
       request="/aliveUDP/aliveUDP"
       receive="Hello UDP"

than list of real servers for UDP behaves correctly i.e. the crashed
real server is removed immediately from the server list. It seems thus
that only combination of TCP and UDP causes problems.
I've been playing with various settings in the config file but
unfortunately it does not help to overcome the issue.

2. Fallback server always present on the list of UDP servers
As far as I understand the fallback server should be present in the
routing list only in case when all real servers are down. The problem is
that in case of UDP fallback server is always present in the real server
list. My ipvsadm printout looks as follows:
itcpc80:/home/telorb # ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  164.48.52.202:15060 rr
  -> 164.48.52.204:35060          Masq    1      0          0
  -> 164.48.52.208:35060          Masq    1      0          0
  -> 164.48.52.206:35060          Masq    1      0          0
  -> 164.48.52.210:35060          Masq    1      0          0
UDP  164.48.52.202:15060 rr
  -> 164.48.52.204:35060          Masq    1      0          0
  -> 164.48.52.208:35060          Masq    1      0          0
  -> 164.48.52.206:35060          Masq    1      0          0
  -> 164.48.52.210:35060          Masq    1      0          0
  -> 127.0.0.1:15060              Masq    1      0          0

As you can see the fallback server is present only for UDP and not for
TCP. According to my understanding it should not be present in the UDP
list as long as any of the real servers is up.
The point is that fallback server is only able to send rejections.

In case you have questions or you need any additional information please
feel free to ask. Or maybe even you would like me to test a fix for it.
I'd be more than happy to devote my time on verifying your solution :-)

Thanks in advance,
Andrzej.


> Andrzej Lisowski
> Senior Specialist Integration and Verification
> 
> Ericsson Telecommunicatie B.V.
> Tel.+31 161 249154
> Fax.+31 161 247089
> andrzej.lisowski@xxxxxxxxxxxx
> http://www.ericsson.com 
> 

<Prev in Thread] Current Thread [Next in Thread>