We currently have a Java based web application that runs on WebSphere and accesses SQL Server 2008.

The application requires frequent code and file changes and hence we update the EAR files in WebSphere at least once in a month, but typically more often. It is a database intensive application. Downtimes are extremely expensive for us and right now we try to do it during our least load times (around 3am on weekdays). Going forward it looks like this isn't going to be an option (especially considering the frequent updates to our application) and we are looking for a better hosting setup like a cluster. We are hoping to resolve some of our other problems as well through the new setup (for which, till now, we have been resorting to workarounds).

We have a multi-node cluster in mind. My understanding of clusters is primitive, so if any assumption below is wrong, please let me know.

The following are our new requirements:
a) We should be able to deploy new versions of the application without any (or just a few seconds) downtime.
b) Load balancing of web requests.
c) Capable of handling a failover.

Here are a few questions I have:
1) What kind of server setup would you recommend?
2) Considering we have a database, is it really possible to ensure near zero downtime unless we have two clusters - one for the DB and one for the web layer of the application?
3) If we had just one cluster for the web layer (and the DB on a dedicated server), would that enable us to deploy new versions of the application without downtimes on WebSphere?
4) Our Java application was written to be run on a single JVM. If we deploy it on WebSphere, would WS automatically make the application run on a cluster? Or would we have to make use of a cluster-aware JVM like Terracota?

Any other tips/knowledge that you would like to pass on to someone who has not gone beyond single servers in experience would be highly appreciated.

Thanks in advance for all your answers.

link|improve this question
feedback

1 Answer

Sounds like you need two clusters. You need a load balanced cluster for the web application with a load balancer in front of the web servers to balance the web traffic so that if one server goes down the other handles the load. This way you can take one machine out of the cluster, upgrade it make the database changes, then remove the machine with the old version and put in the machine with then new version in.

On the database side you'll want an Active/Passive cluster. This will allow the service to be restarted within seconds in the event of a hardware failure on the note which is running the SQL instance. This will not do anything to prevent outages in the event of a bad release, or if the database release process locks database objects. This will also not scale the load of the database between the two (or more) nodes of the cluster. SQL Clusters run the SQL instance on a single physical node at any one time.

link|improve this answer
Thanks for that answer! Unfortunately, our release process includes database locks. But we are trying to see if we can do without it. – Skylark Oct 4 '10 at 16:38
feedback

Your Answer

 
or
required, but never shown

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