0

I am working on a cloud based application which installed under Ubuntu as you would otherwise expected. For example, the server is installed as follow:

apt-get install snapserver

We have nearly 20 packages as part of the project now.

We do not yet have a running cluster, but are thinking that at some point we'd have many computers running with the software, some computers as frontends, and some computers as backends.

My question is: how do you usually update a live cluster? My concern is that new code may generate new entries in the database that are not compatible with the old code. If that happens and a client access a server that still runs the old version, it could end up crashing.

What is the best practice in this case?

Alexis Wilke
  • 2,210
  • 1
  • 20
  • 37

1 Answers1

0

A sort of transactional deployment process would work here. Essentially what you would do is:

  • spin up a second cluster
  • copy current production data to a new database server (ensure you keep this DB updated with current data)
  • spin up second application processes
  • run system tests
    • if system tests pass, kill old cluster
    • if system tests fail, back to dev, shut down newly setup cluster

It's easier to do something like this when you have a VM container provider like VMware, AWS, Heroku, OpenStack, etc.

Ron E
  • 111
  • 3
  • So what you are saying, more or less, is to create a duplicate (make sure it works) and then switch to the duplicate at once? That's an interesting concept. I hadn't thought of that! It could make things safer and it's probably not that expensive to double the VMs for 2 or 3 days... Cool. – Alexis Wilke Mar 02 '14 at 03:11