lbcd supports two different query protocols, version two and version three. (Currently, lbnamed only supports version two queries.) Either will return the current time according to that system, the time of the last system boot, the time the information about logged in users last changed, the load averages (one, five, and fifteen minute), the total and unique logged in users, whether a user is logged in on console, percentage full of the system /tmp directory is full, and percentage full of the system /var/tmp directory. (See, however, the note below about how some of this data is replaced with calculated weights for version two responses.) The version three protocol can also return weight and increment information about a set of services.
The service information is based around a model that returns a weight (indicating the current utilization of the box --- the higher, the busier) and an increment (an estimate of how much the utilization will increase for each additional connection directed to this box) which defaults to one. The intent is for the load balancer to query the system periodically, using the returned weight as the system load, and to estimate the system load between queries of lbcd as the last returned weight plus the last returned increment times the number of connections directed to that system. By default, only one service is returned. That service weight is calculated as follows:
(<uniq-users> * 100 + 300 * <one-minute-load>
+ (<total-users> - <unique-users>) * 20) * <tmp-penalty>
where <tmp-penalty> is a multiplier applied for the most full of /tmp and /var/tmp ranging between 2 for 90-93% full up to 32 for 100% full. If /tmp or /var/tmp are completely full, the maximum possible weight will be returned. If you want to use a simple load average instead, pass the -S option to lbcd and then the load service will use only the one-minute load.
Since lbnamed calculates the weight from the one minute load and the number of logged-in users and currently only supports version two, lbcd will replace the one-minute load with the weight of the primary service when responding to a version two query and will set all of the user numbers to zero unless -S was given. If -S was given, the values returned will be left alone. (This means that -S will override -R for version two queries, since -R is equivalent to specifying a service of rr.)
lbcd responds to any UDP packets on port 4330 (or the port given with the -p option). It has no built-in security, so if you do not want to disclose the above information to random systems on the Internet, you will want to limit access to this port using iptables, firewall rules, or other similar measures.
By default, lbcd listens on all addresses and responds on whatever address the kernel picks for outgoing packets. lbnamed sends out all of its packets and then waits for replies and uses the source address of the reply packet to associate that reply with one of the queried hosts. This means that if lbnamed is not configured to query the same address as the kernel picks for lbcd to respond on, the response may be ignored and the host considered down. To work around this, use the -b flag on hosts with multiple interfaces to ensure that replies go out on the interface being queried. If a host has multiple IP addresses that will be queried, run multiple instances of lbcd, one for each interface.
The currently supported services are load (the default), ftp, http, imap, nntp, ntp, pop, smtp, tcp, and rr (round-robin, the same as -R). The http and tcp services must be followed by a colon and a port number.
The current version of this program is available from its web page at <http://www.eyrie.org/~eagle/software/lbcd/>.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ``Software''), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.