Overview

Balance is our well known open source load balancing solution being a simple but powerful generic tcp proxy with round robin load balancing and failover mechanisms. Its behaviour can be controlled at runtime using a simple command line syntax.

Balance supports IPv6 on the listening side which makes it a very useful tool for IPv6 migration of IPv4 only services and servers.

Balance successfully runs at least on Linux(386), Linux(Itanium), FreeBSD, BSD/OS, Solaris, Cygwin, Mac-OS X, HP-UX and many more.

Balance is Open Source Software and released under GPL licensing terms.

BalanceNG is our full fledged, professional Software Load Balancer which comes with a 30 day trial license. Check it out if you need more capabilities including other protocols, session management and VRRP-HA.

Change History

  • 4.x: Balance release branch 4 has been forked based on Balance 3.34, release 3.57 has been set to deprecated.

  • 3.57: MAXGROUPS has been increased to 32
  • 3.56: Out-of-band data handling has been added.
  • 3.54: A bug with hash_fold() regarding incoming IPv4 and IPv6 source addresses has been fixed. The “hash” group mechanism is now working as expected.
  • 3.52: Buffering has been disabled for interactive shell IO. A new “assign” command has been added to allow changing of the host:port assignment of a channel (only if disabled). A locking bug has been fixed.
  • 3.50: A new option -6 has been added to force IPv6 bind.
  • 3.49: A patch has been applied due to a problem with ftok() on Solaris.
  • 3.48: Problems with setting IPV6_V6ONLY socket option are now handled more nicely with a syslog warning message.
  • 3.42: Balance now compiles also on systems where IPV6_V6ONLY is undefined (like some Solaris systems).
  • 3.40: IPv6 support on the listening side has been added. MAXCHANNELS in balance.h has been increased to 64.
  • 3.35: A bug in the autodisable functionality has been fixed.
  • 3.34: -a option added (enables “autodisable” option: A channel needs to be manually re-enabled after a failure). Syslog logging added for reporting this event.
  • 3.33: -M option added (use MMAP instead of SHM for IPC)
  • 3.32: Bugfix: /var/run/balance may now already exist.
  • 3.31: Bugfix: TCP_NODELAY properly set.
  • 3.30: Code cleanups and fixes.

Installation

Balance is part of almost any modern distribution and package repository, here just two examples:

  • On Debian-type Linuxes install Balance with “apt-get install balance”.
  • For macOS just install Balance with “brew install balance”.

Example Command Lines

# balance smtp host1.test.net host2.test.net

Connections to the local SMTP port will be forwarded alterating to the SMTP port on host1 and host2. Balance runs automatically in background.

# balance -b 2001:DB8::1 80 10.1.1.1 10.1.1.2

Balance binds on port 80 of the local IPv6 IP address 2001:DB8::1 and distributes connections to the IPv4 addresses 10.1.1.1 and 10.1.1.2.

# balance -b ::ffff:10.1.1.3 80 10.1.1.1 10.1.1.2

Balance binds on port 80 of the local IPv4 IP address 10.1.1.3 (provided in IPv6 notation) and distributes connections to the IPv4 addresses 10.1.1.1 and 10.1.1.2.

# balance -fp imap mailserver

Connections to the local IMAP port will always be forwarded to the host “mailserver”. Balance stays in foreground and all data is printed in readable format on stdout.

$ balance -f 8888 host1 10.1.1.1:8000

Connections to the local port 8888 are forwarded alternating to host1, port 8888 and the host 10.1.1.1, port 8000. Balance stays in foreground connected to the “controlling tty”.