Balance is a simple, generic "userland" TCP proxy, which allows simple
round-robin load balancing and graceful failover between
several destination servers.
Balance supports IPv6 on the listening side which makes it a very useful tool for IPv6 migration
of IPv4 only services and servers.
Balance is available at http://balance.sourceforge.net.
Definitions: A possible destination consisting of a host address and a port is called a "channel".
A channel is member of a "channel group". Channels are numbered in a group
starting with 0. Groups are numbered starting with 0, which is the
initial default group.
Balance accepts connections on the given port and forwards them to the supplied channels.
At least one channel (in the default group) must be specified.
If there are two or more channels specified in a group
balance performs a simple round-robin load balancing between the channels.
Balance allows the definition of further channel groups. The connection scheme works as
balance tries first to establish a connection to a channel in the first group (0), performing
the standard round-robin load balancing scheme. If no channel in this group is available,
balance proceeds with the next higher channel group. Groups are simply
separated with a "!" at the command line at startup and can be controlled
interactively with the "group" command.
A "%" instead of a "!" as a group separator declares the previous group to be of type "hash".
This means that instead of a round-robin algorithm, a hash distribution based on the
client ip address is used to determine the destination channel. This allows connecting
one client always to the same server (e.g. balancing http sessions to a single server).
Hosts may be specified either by hostname or by IP address. Ports may
be specified either by name (as listed in /etc/services) or numerically.
If no port is specified in a destination, the destination port
defaults to the source port that
Balance allows the specification of the maximum number of connections per channel. This
parameter can be optionally added after the port specification separated by a
colon (":"). If a maximum number of connections is specified a channel will
only be used for this maximum number of simultaneous connections. A maxc value of 0
denotes an unlimited number of connections. This is the initial default value
of a channel.
The maximum number of groups and channels
balance can handle is specified at compile time and is initially 16 channels in 16 groups.
Failover to another destination (a "channel") occurs if the connection is
refused on the current channel or if the connect timeout is reached trying
to establish a connection. If all possible destinations (channels) currently fail,
the client connection to balance is closed.
Balance accepts the following options:
Forces to bind on IPv6 socket by setting hints.ai_family to AF_INET6.
Enable autodisable option: A channel needs to be manually re-enabled after
Balance binds to the specified host (or address) for listen() instead to INADDR_ANY.
Balance binds to the specified host (or address) for outgoing connections (the
connection will be initiated from this address).
allows to send a command to the balance master process (see interactive mode)
Balance outputs debugging and tracing information messages on stderr.
Balance does failover to next node even if hash is used.
balance to stay in foreground. This might be useful for
testing and debugging since
balance can be stopped in that mode using ^C (or other interrupt character).
Use memory mapping for IPC instead of shared memory
Balance connects to the running instance defined by local port and bind address via
shared memory and allows to control the behaviour of it using a
command line interface. The access permission using this interface are
determined by the access restrictions of the shared memory segment in effect.
help or ? prints out a short command overview,
assign allows to change the host_port assignment of a channel (only if disabled),
create allows to establish a new destination definition (channel) consisting of
host and port in the current group,
disable disables a channel in the current group,
enable enables a channel again in the current group,
group changes the current group in interactive mode where all following commands
hash changes the current group to be of type "Hash",
help prints out online help informations,
kill shuts down the master process and exits interactive mode,
maxc <channel> <maxc> sets the maximum number of connection ot the channel (0 means infinite),
mrtg-bytes <group> <channel> prints out the bytes received/sent in MRTG compatible format (intended to be called
with -c automatically by MRTG),
mrtg-conns <group> <channel> prints out the total connections in MRTG compatible format (intended to be called
with -c automatically by MRTG),
quit exits the interactive mode,
reset resets the byte counters of a channel,
rr changes the current group to be of type "Round Robin",
show shows an overview and the status of all channels including the incoming and
outgoing transfer volume in bytes. The output is sorted by groups. Additionally
the current connections (c) and the maximum allowed connections (maxc) are printed,
version prints out the version and MAXGROUPS and MAXCHANNELS constants at compile time.
Balance shows all incoming and outgoing data on stdout using a
simple always readable external representation of data.
This might be useful for debugging and protocol analysis.
the default timeout trying to establish a connection to any destination
can be changed using this option. The default timeout after which a
destination is regarded to be currently inaccessible is 5 seconds.
Timeout for select(), default = 0 (never). This feature is currently
Thomas Obermair, Inlab Software GmbH (email@example.com)
Copyright (c) 2000-2009,2010 by Thomas Obermair (firstname.lastname@example.org)
and Inlab Software GmbH (http://www.inlab.de), Gruenwald, Germany.
All rights reserved.
Balance is released under the GNU GENERAL PUBLIC LICENSE, see the file COPYING
in the source code distribution.