This is a hack to the
ip_vs_wlc.c schedualing algorithm. It is curently implemnted in a quick,
ad hoc fashion. It's purpose is to support limiting the total number of
connections to a real server. Currently it is implmented using
the weigh value as the upper limit on the number of activeconns(connections in
an established TCP state). This is a very simple implementation and only
took a few minutes after reading through the source. I would like, however, to
develop it further.
Due to it's simple nature it
will not function in several types of enviroments, those baised on
connectionless protocals(UDP, this uses the inactconns variable to keep track of
things, simply change the activeconns varible-in the weigh check- to inactconns
for UDP) and it may impose complecations when persistance is implemented.
The current algorimthm simply checks that weight > activeconns before
including a sever in the standard wlc scheduling. This works for my
enviroment, but could be changed to perhaps (weight * 50) > (activeconns *
50) + inactconns to include the inactconns but make the activeconns more
important in the decison.
Currently the greatest weight
value a user may specify is approimalty 65000, independant of this
modification. As long as the user keeps most importanly the weight values
correct for the total number of connections and in porportion to one another the
things should function as expected.
In the event that the cluster is
full, all real severs have maxed out, then it might be nessisary for overflow
control, or the client's end will hang. I haven't tested this idea but it could
simply be implemented by specifing the over flow server last, after the real
severs using the ipvsadm tool. This will work because as each real server
is added using ipvsadm it is put on a list, with the last one added being last
on the list. The scheduling algorithm traverses this list linearly from
start to finish and if it finds that all severs are maxed out, then the last one
will be the overflow and that will be the only one to send traffic
to.
Anyway this is just a little
hack, read the code and it should make sence. It has been included as an
attachment. If you would like to test this simply replace the old
ip_vs_wlc.c scheduling file in /usr/src/linux/net/ipv4 with this one. Compile it
in and set the weight on the real severs to the max number of connections in an
established TCP state or modifiy the source to your liking.
|