Hi all,
I use IPVS with direct routing and wrr scheduler. The problem is
that for some configurations I get "icmp port unreachable" when one of the
real servers fails and is removed from the ip_vs tables. I have managed
to keep ldirectord out of the picture. The smallest case where I can
replicate the problem is the following:
ipvs# ipvsadm -A -t virtual.service:http -s wrr
ipvs# ipvsadm -a -t virtual.service:http -r realserver1:http -w 100
ipvs# ipvsadm -a -t virtual.service:http -r realserver2:http -w 1000
client$ wget -O - http://virtual.service/
[works as expected]
ipvs# ipvsadm -d -t virtual.service:http -r realserver2
client$ wget -O - http://virtual.service/
--14:46:29-- http://virtual.service/
=> `-'
Resolving virtual.service... 1.2.3.4
Connecting to virtual.service[1.2.3.4]:80... failed: Connection refused.
I have verified by tcpdump that no traffic is sent to realserver2
after it is removed from the virtual.service pool. The ICMP "tcp port
unreachable" is sent by the ipvs host.
This appears to be a problem in the wrr scheduler. With wlc or rr
it works as expected.
The "ipvs" host is Fedora Core 3 with vanilla 2.6.11.3 kernel,
but I have been experiencing this for a longer time.
-Yenya
--
| Jan "Yenya" Kasprzak <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839 Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/ Czech Linux Homepage: http://www.linux.cz/ |
> Whatever the Java applications and desktop dances may lead to, Unix will <
> still be pushing the packets around for a quite a while. --Rob Pike <
|