logo-mysql-110x57-2010-07-13-10-17.pnglogo-oracle-red-91x22-2010-07-13-10-17.gif hdr_left-2010-07-13-10-17.png When I was an “Internet Architect” (lofty title alert!) I used to hear this question fairly often in design meetings, whether to run the database (DB) through the load balancer or not. I would almost always come down on the side of “no there’s no point” because the DBs have their own high availability solutions, they don’t benefit from load balancing and there are usually no multi-master solutions. Also, load balancers are expensive and resources are finite on them.

Over the last few years a number of factors have changed, and today the answer is a solid maybe. There are a lot of compelling features and the crafty engineers that see the light may be able to solve some sticky architectural problems and even sleep better at night.

Change in viewpoint

Enter 2010, things have changed a lot and so has my viewpoint. More often now I’m finding that there are reasonable cases to be made for running the DB through the Application Delivery Controller (ADC). Resources are not as finite anymore, especially on BIG-IPs, and the added benefits include monitoring, flexibility, scaling and control. As an architect I always want more options and as a sydadmin I was stable solutions that let me sleep at night. The ADC has come of age and the benefits outweigh the main negative which is one more potential point of failure for a critical infrastructure component.

The changes that have made me change my mind is first, the resource issue on the ADC. Even from our BIG-IP 1600 series, our so-called “entry-level” point, our 10.2 release allows for passing of 1 Gigabit per second. On the SSL side, we’re talking about 5000 transactions per second of encrypted traffic. Many of the ADCs I’ve used in production spend a large amount of their time mostly idle, just serving front-end traffic and could easily handle the additional load of database connections. I’ve seen these boxes pushed to the limits and it doesn’t worry me nearly as much as it did even five years ago to run database connections through them for fear of overload.

But question still exists why bother?

Once we rule out the “hardware can’t handle it” argument, the second benefit is the ability to monitor the databases, built into our ADC. As Ryan Corder demonstrates in his entry Monitoring Open Source databases with BIG-IP, monitoring Postgres and MySQL is a snap with BIG-IP. This only makes me sleep better at night. I can setup replication to another local instance and create my own high-availability hot/standby cluster without all the overhead of a software clustered solution. Or, I can have the ability to instantly recognize outages and using iRules make intelligent traffic flow changes on the fly, without having to include my monitoring system. We all know how it works today, the monitoring system finds a problem, sends out a page to a system administrator (happy sys-admin day by the way guys and gals!) and meanwhile traffic is down until the problem can be resolved. How about this: the ADC finds the problem beginning with the very first request that has an issue and makes a decision to route traffic around the problem, and the sysadmin doesn’t have to run a fire-drill at that instant.

I’m already a long way towards sold on this now. But finally there’s the idea hinted at above, the flexibility of having the ADC in the way. This is the flexibility of making routing decisions based on layer-7 content. This is the flexibility of putting the databases where you need them and relying on the ADC to optimize TCP, or perhaps even to accelerate connections using BIG-IP WAN optimization. This is the flexibility of opening long-distance VMotion and having your database follow, all made possible by having an ADC in the architecture.

So, should I run my database through BIG-IP?

So, should you? It depends of course, if you’re a mom-and-pop shop with one site and no growth, probably not! But if you’re larger:

        * Could you benefit from having more fine-grained control over the uptime and availability of your DB?

        * Are you running MySQL or PostgreSQL? If you’re running Oracle, Sybase or MS-SQL, what kind of applications connect to your DBs?

        * Is there a better connection manager solution available?

        * Would the ADC conflict with your other high availability solution?

        * Do you have a fairly complex architecture that could require multiple sites?

        * Do you have an architecture that can change rapidly based on business needs?

Hopefully this will be another arrow in the quiver of the lofty Internet Architects ( :-) ) out there enabling them to successfully nail down another great infrastructure design.

Until later, I give all of the System Administrators out there the rest of the day off! May your pager be quiet and your systems remain up!