Here is a current “HA” setup that I have for a customer.
– Two FreePBX systems, in different geographical locations (two of their offices). Just some FYI, this requirement right here made HA a non-viable option as it didn’t support servers in two different locations.
– Node B backs up and restores Node A on a time schedule.
– Both FreePBX’s share a centralize database (also master/slave sync’d) so that updates and data can be stored and accessed by both boxes if needed.
– Kamailio SIP Proxy cluster, as they have 5 locations and over 700 users. All the users connect to the SIP Proxy. The SIP Proxy is also monitoring the state of SIP on Node A and Node B. If Node A is unresponsive, it will use Node B.
– Inbound/Outbound trunk are also connecting and routing through the SIP proxy so the same thing can happen in regards to Inbound calls, it will send the call to the right PBX that all the users are on.
Now if you’re wondering “How do the devices know which SIP Proxy to use, etc, etc.” it’s called not using IPs for everything involved with SIP and using FQDN’s with SRV and NAPTR records. Pretty much how places like Flowroute and other providers do. One single FQDN to put into the phones (proxy.domain.com) and it will determine which of the SIP proxies is responding and up and send the user’s phone requests there. Same with the PBX systems (using PJSIP for SRV support).
Because the bottom line is this, there is no true “HA” solution for SIP because of how it works. In order for you to have a true “HA” system you can not have have B2BUA’s as the only piece of it. You would need a multi-system platform for signalling, media, etc, etc, etc so that things can handle the pieces of the call and be able to share them (if possible) with it’s backup/hot spare.