Nov 072010
 

Lvslogo2In the previous article we looked at what’s the use LVS, to have a system of load balancing built into the Linux kernel. As mentioned, however, LVS was born to be good in one thing: the load balance, but does not provide additional options, such as monitoring the progress of the machines on which we are balancing service and in case of trouble in one machine remove it from the active machines.

To accomplish this goal and many more wel” take a look at ldirectord



ldirectord is a daemon to monitor and administer real servers in a LVS cluster of load balanced virtual servers. ldirectord typically used as a resource for Linux-HA , but can also be run from the command line.

A LVS cluster consists or one or more virtual services each of which may have zero or more real servers. The IP address of a virtual service is what end-users connect to and is typically advertised over DNS. When a connection is made to a virtual service, it is allocated a real server, and all packets for this connection are forwarded to this real server. A more detailed overview of LVS can be found here.

ldirectord has a configuration file which specifies the virtual services and their associated real servers. When ldirectord is initialised it creates the virtual services for the clutster.

ldirectord monitors the health of the real servers by periodically requesting a known URL and checking that the response contains an expected response. If a real server fails then the server is removed and will be reactivated once it comes back on line. If all the real servers are down then a fall-back server is inserted into the pool, which will made quiescent one of the real web servers comes back on line. Typically, the fall-back server is localhost. For example if an HTTP virtual service is being provided then it is useful to run an Apache HTTP server as fall-back that returns a page indicating that the service is temporarily inaccessible.

Example of configuration

The ldirectord configuration file is divided into two main areas, the global configuration and the Virtual Server configuration.

# Global Directives
checktimeout=10
checkinterval=15
#fallback=127.0.0.1:80
autoreload=no
#logfile="/var/log/ldirectord.log"
logfile="local0"
quiescent=yes

This is an example of a block with global directives, some of the most important things are the timeout in seconds (10) before considering a server as down and the interval in seconds when the check is repeated (15)

# Virtual Server for HTTP
virtual=192.168.6.240:80
        fallback=127.0.0.1:80
        real=192.168.6.4:80 gate
        real=192.168.6.5:80 gate
        service=http
        request="index.html"
        receive="Test Page"
        scheduler=rr
        #persistent=600
        protocol=tcp
	checktype=negotiate

This is the configuration of a virtual server, we can configure

  • VIP defined as virtual=192.168.6.240 this is the address of the service, where our client will connect
  • fallback=127.0.0.1:80 This is the address when your client will be sent when all your real servers are down, usually it’s a web page that give information of downtime or maintenance periods, but could be anything.
  • real=xxx.xxx.xxx.xx gate these 2 directives give the address of the 2 real servers, and the methods gate that means that we’ll use LVS-DR
  • request="index.html" This object will be requested each checkinterval seconds on each real server. The string must be inside quotes. Note that this string may be overridden by an
    optional per real-server based request-string
  • receive="Test Page" If the requested result contains this regexp to compare, the real server is declared alive. The regexp must be inside quotes. Keep in mind that regexps are not plain strings and that you need to escape the special characters if they should as litterals. Note that this regexp may be overridden by an optional per real-server based receive regexp.
  • checktype=negotiate Type of check to perform. Negotiate sends a request and matches a receive string.
    Connect only attemts to make a TCP/IP connection, thus the the request and receive strings may be omitted. If checktype is a number then negotiate and connect is combined so that after each N connect attempts one negotiate attempt is performed.This is useful to check often if a service answers and in much longer intervalls a negotiating check is done. Off means no checking will take place and no real or fallback servers will be activated. Default is negotiate.

Once this is done in a configuration file is sufficient to give the command ldirectord filename start and ldirectord will configure your servers and real VIP and start to check the behavior of the real servers, removing them and re-adding them in case of problems.

We have made a load balancer with ldirectord (and LVS) much more resilient to the down of a real server and so offering a better service for our customers.

Popular Posts:

Flattr this!

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*