LVS
lvs-users
Google
 
Web LinuxVirtualServer.org

vs-0.9pre1 release

To: linux-virtualserver@xxxxxxxxxxxx
Subject: vs-0.9pre1 release
From: Wensong Zhang <wensong@xxxxxxxxxxxx>
Date: Mon, 19 Apr 1999 23:37:41 +0800
Hi,

I just packed the vs-0.9pre1 release. The reason that it is named as
vs-0.9pre1 is that I want to ask for your opinion and ask you to
test it, before the vs-0.9 is released on the virtual server web page.

Please check the ChangeLog for how it is changed. I haven't fully
tested this vs-0.9pre1 release, I just tested the following options:
    Tunneling + WRR + LocalNode
    Tunneling + WLC + LocalNode
    Direct Routing + WRR + LocalNode
    Direct Routing + WLC + LocalNode
(Note that I call the request dispatching approached used in IBM's
NetDispatcher "Direct Routing".)
If you have time, please test the other combinations.

Thank you,

Wensong

P.S.   Peter, would you please test the performance when the load
balancer receives tens(or hundreds) of thousands of active connections?
Since I don't have enough equipments now, I just simply tested the
virtual web service with http.monitor script from mon (I added a few
lines to alter it for testing), when the load balancer has over 6000
active connections, its load are almost zero and seldom reach 0.1.


Attachment: vs-0.9pre1.tar.gz
Description: GNU Zip compressed data

#!/usr/bin/perl
#
# Use try to connect to a http server.
# For use with "mon".
#
# Arguments are "-p port host [host...]"
#
# Jon Meek
# American Cyanamid Company
# Princeton, NJ
#
# $Id: http.monitor,v 1.4 1998/04/29 14:29:41 trockij Exp $
#
#    Copyright (C) 1998, Jim Trocki
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
use Getopt::Std;
use English;

getopts ("p:t:u:");
$PORT = $opt_p || 80;
$TIMEOUT = $opt_t || 30;
$URL = $opt_u || "/";

@failures = ();

foreach $host (@ARGV) {
    for ($i=0; $i<10000; $i++) {
        $OK = &httpGET($host, $PORT);
        if (!defined (OK) || $OK == 0) {
            push (@failures, $host);
        }
        print "$i\n";
    }
}

if (@failures == 0) {
    exit 0;
}

print "@failures\n";

exit 1;


sub httpGET {
    use Socket;
    use Sys::Hostname;

    my($Server, $Port) = @_;
    my($ServerOK, $TheContent);

    $TheContent = '';

    $Path = $URL;

###############################################################
    eval {

        local $SIG{ALRM} = sub { die "Timeout Alarm" };
        alarm $TIMEOUT;
        $result = &OpenSocket($Server, $Port); # Open a connection to the server
        if ($result == 0) { # Failure to open the socket
            return '';
        }

        print S "GET $Path HTTP/1.0\r\n";
        print S "User-Agent: mon.d/http.monitor\r\n\r\n";

        while ($in = <S>) {
            $TheContent .= $in;  # Store data for later processing
        }

# HTTP/1.1 200 OK

        if ($TheContent =~ /^HTTP\/([\d\.]+)\s+200\b/) {
            $ServerOK = 1;
        } else {
            $ServerOK = 0;
        }

        close(S);
        alarm 0; # Cancel the alarm

    };

    if ($EVAL_ERROR and ($EVAL_ERROR eq 'Timeout Alarm')) {
        print "**** Time Out\n";
        return 0;
    }
    return $ServerOK;

}

sub OpenSocket {
#
# Make a Berkeley socket connection between this program and a TCP port
#  on another (or this) host. Port can be a number or a named service
#
    local($OtherHostname, $Port) = @_;
    local($OurHostname, $sockaddr, $name, $aliases, $proto, $type, $len,
          $ThisAddr, $this, $that);
    $OurHostname = &hostname;

    ($name, $aliases, $proto) = getprotobyname('tcp');
    ($name, $aliases, $Port) = getservbyname($Port, 'tcp') unless $Port =~ 
/^\d+$/;
    ($name, $aliases, $type, $len, $ThisAddr) = gethostbyname($OurHostname);
    ($name, $aliases, $type, $len, $OtherHostAddr) = 
gethostbyname($OtherHostname);

    $sockaddr = 'S n a4 x8';    # Format for packed network address
    $this = pack($sockaddr, &AF_INET, 0, $ThisAddr);
    $that = pack($sockaddr, &AF_INET, $Port, $OtherHostAddr);

    $result = socket(S, &PF_INET, &SOCK_STREAM, $proto) || return undef;

    $result = bind(S, $this) || return undef;

    $result = connect(S, $that) || return undef;

    select(S); $| = 1; select(STDOUT);      # set S to be un-buffered
    return 1;                               # success
}
<Prev in Thread] Current Thread [Next in Thread>