Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've started looking into creating a load balanced virtual server, for running mostly web services, project management services (version control, etc..), and applications of that sort. And I need an open source (Linux) solution.

Wikipedia has this entry, there are seemingly very promising stable projects, but most are long dead.LVS and Kerrighed look possible, but I am not sure. Are they worth investing (timewise)?

What would be a good solution? (although I can not afford a commercial solution (Linux or otherwise), I would like to learn about these alternatives, and appreciate comments to that end).


share|improve this question
I think you may be confusing the issue, and the readers, by using the term "virtual". It looks to me like you're after a clustering solution, which will make it appear as a single machine but which is completely different to virtualisation. – John Gardeniers Jan 22 '10 at 18:38
that's right, "virtual" as in the dictionary, not as in virtualisation. Although, I am not the only one "mis"using it. cf. LVS. so you suggest removing "virtualserver" tag?. be my guest. – sly Jan 22 '10 at 18:52
up vote 1 down vote accepted

It looks like you are trying to solve the problem at the wrong layer. I don't know any sane system administration that would try to use Single System Image to run a web server when there are other methods such as reverse proxies that are much simpler and as a result more reliable.

Such As:

share|improve this answer
thanks for reading my mind. you're right, I am asking the wrong question. Although, not knowing much here, I am not sure how database coherency (wrong terminology here probably, but still..) is achieved with this. i.e can a database (or a single schema in a say in MySQL) be distributed, and load-balanced, and coherent? sry, can't find a better way to ask this, hope you see where I am getting at.. – sly Jan 22 '10 at 5:03
@sly: edit your question then. And there are ways to distribute data, but it's not an easy problem. Take a look at drbd. – niXar Jan 22 '10 at 8:42
ok. I'll post another perhaps. but let this question stand on its own: I wonder, even if it is insane, whether there is anyone using SSI for load-balancing (and NOT running HPC apps), and which of these systems would be worth looking at. – sly Jan 22 '10 at 17:13
It's certainly more common with HPC. But I'm sure there are plenty of web apps being run on big iron, such as some of the large IBM Z series servers/mainframes, in a container or VM of some sort. This would be pretty similar to many normal servers in a SSI cluster. – 3dinfluence Jan 22 '10 at 17:28

Unless I'm really reading the question wrong, I'd say for hosting web applications, you're going about it the wrong way.

I'd suggest having multiple nodes (virtual, or physical) and managing their config with puppet.

Your nodes could be a whole rack of 1U servers, or a bunch of powerful 3U multiprocessor servers running KVM and then an OS of your choice as virtualization guests.

Given 4 servers you could set them up as follows:

  • Server 1: Load balancer + HTTP Node (running Varnish and Apache)
  • Server 2: Load balancer + HTTP Node (running Varnish and Apache)
  • Server 3: HTTP Node + DB Master(running Apache and MySQL)
  • Server 4: HTTP Node + DB Slave(running Apache and MySQL)

It would be advantageous to have a fifth server, that runs services, such as nagios, munin, tftpd for a PXE boot environment, a small HTTP server for kickstart/preseed files, a DHCPd, maybe serial consoles via a Rocketport or similar.

The massive advantage of using Puppet to deploy your own systems, instead of having a single image, is that the resources are effectively self-documenting. It's a lot clearer, and less black-box than just having an image you drop onto servers. Plus it makes updates and changes to the image far simpler.

share|improve this answer
this is a good answer too, but it seems I can only pick one. – sly Jan 22 '10 at 17:12

I'm not sure I'm answering what you're actually asking, but if you're looking for a way to take a VM and mirror it, you can use any of the free virtualization tools I'm aware of (VMware Server, ESXi, kvm, etc)

  • make your VM with everything you need on it
  • copy the VM
  • make changes to the copy (ip address and hostname)
  • start both VMs
  • insert load-balancer (hardware or software, doesn't matter)
  • .. no 6th step I can think of :)
share|improve this answer
I am not sure if you are answering what I am asking, either. But it sure doesn't sound like it. I am looking for a combination of hardware (cluster) acting (virtually) as a single server with a lot of memory and many CPUs. Or perhaps one level below, support load-balanced process migration (as in mosix), and such. – sly Jan 22 '10 at 3:23

As exciting as SSI sounds, they're quite unlikely to perform optimally.

Since your main target are web apps, you can (should!) use the current best practices. Typically, these start by:

  • a caching load balancer as frontend (squid, varnish, nginx)
  • several HTTP servers for web apps (typically apache, might be nginx+FastCGI, whatever)
  • database

if well done, your first bottleneck would be the database, at this point, you should:

  • add cache to your web apps, to reduce DB hits to a minimum. (modern frameworks (RoR, Django), include great support for memcached)
  • take some kind of jobs from the DB to more specialized apps. first candidates are task queues (to rabbitMQ or similar) and key/value stores (to tokyo cabinet, resis, mongoDB, lots of them)
  • distribute the DB. if it's many reads/few writes, try master/slave replication (easy on MySQL), but if this is your case, memcached should've absorbed most of the load already. Also try sharding.

if you ever get to overgrow this (are you FaceBook?), you'll have to rethink your whole structure, à la Google (where they do almost everything 'off the line' with MapReduce).

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.