One of the things that a website or server may have to do in its lifetime is scale up to a cluster of servers.
What’s a cluster?
A cluster can mean several things, but at a bare minimum it means “more than one server”. Yes, I realize that is not all that helpful to understanding all of this just yet, but stay with me.
Typical cluster configurations:
One web server – One database server:
With this set up we do not need to employ a load balancer that sends traffic requests to one or the other serve.
Wait. What’s a load balancer?
A load balancer is a device that sends traffic to one or more location. It can be set to do this a number of different ways, including:
- Round robin – where it alternates between each server in turn.
- Lowest process – where it sends it to the server with the least number of processes running (lesser bogged down of servers on load balancer)
- Historical – the load balancer keeps track of which server is better to send traffic to at a given time. This is helpful if one or more of your servers has periods where it consumes more resources, like during scheduled backups, log analysis, data imports, etc.
You set up your different domains, sites, etc to point their A records at the load balancer rather than to a particular server.
The first server just runs Apache (Web Server) or IIS (Windows Web Server) and the second server just runs the database server (MySQL, MS SQL, etc)
You update your web applications to run off the database server, often by IP address or using a private network.
This is helpful for applications where the MySQL load interferes with the Web Server or vice versa,
Load Balancer + 2 Web Servers running their own Databases
In this configuration you have a load balancer that detects and sends traffic to one or more servers, each running as a separate instance of your entire website or web application.
The assumption is that you either:
- Do not need real time synchronization of data between each instance/server – meaning you probably do not have users that add content, comments, posts, transactions to the server. This is helpful for static sites or sites that delivery one-way content to its audience.-or-
- You have implemented an rsynch of files or other method for keeping data up to date. In short, having two whole servers means two places to update and edit and is not the best configuration for a lot of businesses.
Load Balancer + 2 Web Servers and a third database server.
Here’s where we get to true performance enhancing and scalability. (Also, is it just me or with the whole Lance Armstrong thing has that word lost all meaning?)
With a 3 server setup you offload the database functions to one server, balance two web servers and set each of them up to look at just that single database server.
The challenges with this are usually:
- You need to develop a workflow for working on your server’s websites and web applications. Whether this means you log into all web server to push updates, or you develop an rsynch script or other method to copy files – or you make use of a CVS (Concurrent Versioning System) to deploy your code across multiple platforms at once – you will need to start thinking of your design & development in terms of working on a network and not in a single server or single account setting.
- Logging into CMS systems like Drupal, WordPress, Joomla or any other administration panel becomes a nightmare unless you set up your local environment to look at just one server (e.g. change your localhost file) – or, you work on a local server and push your changes up that way.
We’ve assisted a number of companies in upgrading to clusters for single server (or VPS. shared hosting, whatever) and each deployment is uniquely different based on what you want to accomplish.
Usually, a client has or will be experiencing such high traffic or resource usage that their current server is overwhelmed and simply re-sizing the server is not going to cut it for them. This is where we develop a strategy for re-sizing to a cluster based on the individual domains, sites and web application that are running on the server.
The most overlooked items we see clients having to deal with when they resize to a cluster are:
- Making Drupal run on a cluster and dealing with persistent logins and caching.
- Making WordPress run on a cluster of servers and dealing with plugins looking for files, cache file, tmp files or other resources that are not present fuly in a two server environment
- Making Joomla run on a cluster where administrator are not staying logged or need better session management.
- Making forums run in a cluster where posts and comments come in so fast that any delay or lag creates chaos and frustration
- Making CS-Cart, Zen Cart, Magento, OSCommerce or any other ecommerce function, keep users logged in, keep them able to checkout and not dump their cart now that they are running on a cluster.
Upgrading to a cluster is not necessarily the saving grace or the next logical step for a site that needs to scale. Often talking with a programmer can reveal other ways that you can adjust your user experience and gain additional performance out of your current system.
A note on shared hosts.
If you are on a shared host trying to do this, there’s probably no hope for you. Sorry, we’re not talking the same language at this point. A shared account’s next step is to move up to a VPS (Virtual Private Server). A VPS’s next step is to move to a larger VPS or true dedicated system running in its own space or hardware.
After that, it’s time to talk clusters – which you can contact us any time on.