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?
A sort of transactional deployment process would work here. Essentially what you would do is:
It's easier to do something like this when you have a VM container provider like VMware, AWS, Heroku, OpenStack, etc.