Hi all... here are an alert and a monitor which I wrote to use with LVS' (http://www.linuxvirtualserver.org/) ipvsadm.
ipvs.monitor: Checks whether the specified virtual service is defined, and, optionally, whether it has any realservers defined. ipvs.alert: Brings virtual services and realservers up and down. These two unfortunately require root since they use the ipvsadm tool. Hope they're helpful to somebody... -- ~ You are in a maze of twisty passages, all alike. Christopher DeMarco [EMAIL PROTECTED] +6013 389 5658
#!/usr/bin/perl # ipvs.monitor - Linux Virtual Server monitor for mon # Check whether the specified virtual service is defined, and, # optionally, whether it has any realservers defined. # # Invocation: # ipvs.monitor [options] -V <virtual_service> -P <protocol> # # Options: # -z allows a virtual service to have zero realservers defined # # Notes: # - Since it uses ipvsadm, this script (and therefore mon) must # unfortunately run as root :( # - ipvs.monitor returns 0 on success and 1 on failure use Getopt::Std; getopts ("zV:P:"); %proto = ( "tcp" => "-t", "udp" => "-u", ); $virtual_service = "$opt_V"; @ipvs = `/sbin/ipvsadm -l $proto{$opt_P} $virtual_service 2>&1`; # allow a service with no realservers? defined $opt_z ? ($n = 2) : ($n = 3); # Check the output: # ...two lines of headers # ...one line of virtual service # ...one line for each realserver $#ipvs < $n ? exit 1 : exit 0; # # ## ### ##### ######## ############# ##################### # CHANGELOG # Tue Jul 27 11:17:39 MYT 2004 # Initial version # Christopher DeMarco <[EMAIL PROTECTED]> # Tue Jul 27 14:14:08 MYT 2004 # added -z switch # Christopher DeMarco <[EMAIL PROTECTED]> # # ## ### ##### ######## ############# ##################### # Copyright (C) 2004, Christopher DeMarco # # 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
#!/usr/bin/perl # ipvs.alert - Linux Virtual Server alert for mon # Bring a realserver up or down, or remove the entire virtual server. # # Invocation: # To remove a realserver from a virtual service: # ipvs.alert -P <protocol> -V <virtual> -R <realserver:port> # To add a realserver to an existing virtual service: # ipvs.alert -u -P <protocol> -V <virtual> -R <realserver> -W <weight> -F <forwarding> # To remove a virtual service along with any associated realservers: # ipvs.alert -D -P <protocol> -V <virtual> # To create a virtual service with the given realserver: # ipvs.alert -u -B -P <protocol> -V <virtual> -S <scheduler> -R <realserver> -W <weight> -F <forwarding> # # Options: # -P protocol (tcp|udp) # -V virtual service # -R realserver # -W weight # -F forwarding type (nat|tun|dr) # -S scheduler (rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq) # -D delete the entire virtual server # -B rebuild the virtual server # # Notes: # - -u is added automatically when ipvs.alert is part of an # ``upalert''. # - You can't build (-B) a virtual service without giving a # realserver, but you *can* add a realserver without building a # virtual service. # - the comments are almost double the volume of the script itself. # Good, bad or just plain ugly? # - Since it uses ipvsadm, this script (and therefore Mon) must # unfortunately run as root :( use Getopt::Std; getopts ("uDBs:g:h:t:l:P:V:R:W:F:S:"); $ipvsadm = "/sbin/ipvsadm"; $virtual_service = "$opt_V"; $realserver = "-r $opt_R"; $scheduler = "-s $opt_S"; %proto = ( "tcp" => "-t", "udp" => "-u", ); %type = ( "nat" => "-m", "tun" => "-i", "dr" => "-g", ); if ($opt_u) { # bring up the realserver if ($opt_B) { # build the virtual service first system("$ipvsadm -A $proto{$opt_P} $virtual_service $scheduler"); } $weight = "-w $opt_W"; system("$ipvsadm -a $proto{$opt_P} $virtual_service $realserver $weight $type{$opt_F}"); } elsif ($opt_D) { # tear down the entire virtual server system("$ipvsadm -D $proto{$opt_P} $virtual_service"); } else { # delete the realserver system("$ipvsadm -d $proto{$opt_P} $virtual_service $realserver"); }; # # ## ### ##### ######## ############# ##################### # CHANGELOG # Mon Jul 12 14:12:49 MYT 2004 # Initial [messy] version # Christopher DeMarco <[EMAIL PROTECTED]> # Thu Jul 15 11:02:06 MYT 2004 # Added -D to delete the entire virtual server # Bringing up a service also adds the virtual server # General code overhaul # Christopher DeMarco <[EMAIL PROTECTED]> # Mon Jul 26 10:09:34 MYT 2004 # Renamed "lvs" to "ipvs" # Christopher DeMarco <[EMAIL PROTECTED]> # # ## ### ##### ######## ############# ##################### # Copyright (C) 2004, Christopher DeMarco # # 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
_______________________________________________ mon mailing list [EMAIL PROTECTED] http://linux.kernel.org/mailman/listinfo/mon