0: reduce ttl of dns to ~60s
1: bring up vm2==vm1
2: upgrade vm2
2.1: test vm2
2.2: shutdown vm2, take DO snapshot
2.3: instanciate vm/droplet of vm2
3: point/change dns from vm1 to vm2
4: wait for traffic to die on vm1
5: shutdown vm1
6: possibly increase ttl in dns again
Next round, same procedure. This is not ready for HA -- easiest way there is running 2 vms like now, but with haproxy in front (so the vm has ha-varnish-3appservers), along with heart-beat and a shared ip. I don't thing DO supports that -- and it is probably not worth the hassle if you can live with dns changeover-time==downtime (say, minutes modulus wrongly configured dns caches).With a couple of dedicated ips, you can usually get away with vm2 taking vm1s ip (and vice-versa) -- but again that depends on your session set-up and/or if dropping sessions are ok. With sessions in some kind of replicated cache/db (eg: redis, mysql) -- you could probably set vm2 to slave over/replicate sessions, then do the dns [ed: or ip] switch[over].