So, perhaps of a nuanced take (or maybe just a different perspective), if it’s of any value..
When I think of HA, the first thought that comes to my mind is “FT (Fault Tolerance)” or “HA”? and the second thought that comes up is (at what level?). For the record, I think previous posts may address this at many levels so please feel free to disregard this post, sprinkle with go-away dust, or a combination.
So let me clarify if folks are still reading.. The distinction between FT and HA I borrow from VMware, where 2 VMs are redundant at the OS level in some way. FT, of course, locksteps CPU threads, RAM content, I/O, etc. so that if one node goes down, it’s not suppoed to noticeable. There are requirements on affinities, vmotioning (in the vmware world), etc. Ok - so that’s if an app just can’t go down, even for a very short time.
HA has had downtime in terms of accessibility so that a secondary node comes up when the primary fails in an active/passive type of configuration. That’s fine for SLAs guaranteeing uptime at 99.n% and there are of course a few tradeoffs vs full FT.
However, there’s a third option, which is where the “at what level” comes into play, which is asking “what” needs to stay online. For example, if it’s a SQL server, clustering is available at its own level where critical DBs stay up either on shared storage or via log mirroring, and the application / web server is what’s OK to lose for a few minutes.
Of course, redundnacy is what’s behind all of it - at the storage (hw and fs), I/O, compute/app-tier, etc. It’s just what’s appropriate based on need.
So.. I probably just went off on a tangent in terms of what OP is looking to do, and the simple approach may be fine. I just wanted to offer that there are some nuances in terms of what approach I’d take from an architectural standpoint prior to applying a technology solution.
Hope this adds something, no problem if it’s different or too out in left field for anyone 