Rolling Deployments

Latest response

Sorry if this has been discussed before.

 

Our setup:

 

4 Node cluster using production profile sitting behind an apache load balancer.

 

Here is what we want to do.

On application updates we want to remove one node from the cluster and update and test the software on that isolated node.

This would give us a 3 node cluster, with node 4 not participaiting in the cluster: no jboss cache update, no session replication etc.

Telling apache to not use that node is the easy part.

 

Does anybody know the best way to do this.  Also we do not have the JBoss Operations Network software.

 

Thanks.

Responses

Hi,

 

> no jboss cache update, no session replication

 

Just to be clear, I assume you mean that the isolated node does not participate in those, not that you don't use them at all.

 

 

There are a few ways to do this, and some are easier but have more stringent conditions:

1) Do you know if it is safe to have both versions in the same cluster? Doing this would require that there are *no* changes to how the data is stored in classes (or somewhat unlikely that the developers correctly implement all the Serializable stuff). If in any doubt, consider it not safe.

2) Can you handle production load (at the time you're doing the update) with 50% production capacity.

3) Are you using mod_cluster or mod_jk/proxy/whatever.

 

 

If you are sure that being in the same cluster is safe, and data can be replication between different versions, and either the app logic can handle failover to a different version (or you accept the risk of breakage if you lose a node during the update), then you can simply re-add the node to the cluster and proceed to the next one.

 

Usually the only time I would risk this is when the update only involves urgent but minor logic changes, or changes to resources like images, text, JSPs, and so on. If in doubt, don't do it since you could cause a major outage if it doesn't work like you expect.

 

 

The second way is by utilising a "dual cluster" setup, where two JBoss clusters are running in parallel. For this, the important question is whether you can handle the full production load with 50% production capacity. It is quite common that you have non-peak times (e.g. overnight) where you can do that but still need to be operational, it is easier.

 

We have a knowledge base article about this at https://access.redhat.com/knowledge/solutions/30204, which should help you out.