Pour ce qui est de la bascule des téléphones, je te conseille de regarder aussi du coté de DNS-SRV. Il n'est pas obligatoire de passer par une IP partagée.

Le plus chiant gérer sera les appels entrants.
Il faudra décider si tu as un même trunk sip sur les deux serveurs mais qu'il n'est actif que d'un coté à la fois ou éventuellement avoir un compte sip différant par serveur mais un opérateur capable d'envoyer l'appel sur le compte du serveur backup si le principal est déconnecté.

Je donne un exemple simple mais sale pour dupliquer une conf entre deux freepbx mais en étant connecté à l'opérateur avec un compte sip différant

Export sur la prod

Code:
#!/bin/sh
# sert a dupliquer la configuration locale pour l'envoyer vers le serveur de secours

# Copie: la base asterisk mysql, la base interne asterisk, le repertoire /etc/asterisk
# et les fichiers son 
SQLUSER=asteriskuser
SQLPASS=xxxxxxx

TMP=/data/tmp

DESTDISTANT=transfert_data@secours:

# copie des repertoires

( cd /etc && tar czf $TMP/astconfig.tar.gz asterisk )
( cd /var/www/html/admin && tar czf $TMP/freepbxmodules.tar.gz modules ) 
( cd /var/lib/asterisk &&  tar czf $TMP/moh.tar.gz moh* )
( cd /var/lib/asterisk/sounds  &&  tar czf $TMP/snd_custom.tar.gz custom) 

# sauvegarde mysql
mysqldump -u $SQLUSER --password=$SQLPASS asterisk > $TMP/asterisk.sql

# sauvegarde astdb
php /usr/local/scripts/bascule/dumpastdb_pra.php


( cd $TMP && scp astdb.dump asterisk.sql freepbxmodules.tar.gz astconfig.tar.gz moh.tar.gz snd_custom.tar.gz  $DESTDISTANT )

import sur le secours

Code:
# importe dans la conf asterisk les données de prod, mais désative les trunks
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


SQLUSER=asteriskuser
SQLPASS=xxxxx

DATADIR=/home/transfert_data

# import des fichiers de conf 
tar zxpf $DATADIR/astconfig.tar.gz -C /etc
tar zxpf $DATADIR/freepbxmodules.tar.gz -C /var/www/html/admin/
tar zxpf $DATADIR/moh.tar.gz -C /var/lib/asterisk
tar zxpf $DATADIR/snd_custom.tar.gz -C /var/lib/asterisk/sounds


# import astdb
/usr/local/scripts/bascule/restore_prodastdb.php


# converti les comptes des trunks en change login mot de passe
#axialys
sed -i 's/username_trunk1/username_trunk2/g'  $DATADIR/asterisk.sql
sed -i 's/pass_trunk1/pass_trunk2/g'  $DATADIR/asterisk.sql

# importbase mysql
mysql -u $SQLUSER --password=$SQLPASS asterisk < $DATADIR/asterisk.sql


# relance asterisk
amportal a reload