Help: Howto Implement HA & Redundancy w Ultramonkey?

Hi All.

First the sincere community thanks and advanced apology for the topic choice (I know this gets covered a bit so please don’t flame me). I am relatively new to Asterisk and the community resources have been fantastic however, I am having a hard time finding a comprehensive resource on how to setup HA / Redundancy, and what to expect from such a configuration, start to finish.

I really want to make sure my expectations are correct and the method I choose follows a pathway that will be supported with future versions (From what I’ve read 1.6 will tackle some issues in the HA / Failover space).

My current understanding leads me to believe I should deploy the following architecture:

  • UltraMonkey
  • SEP
  • Dundi

Requirements / Expected Outcome:
I have 3 identical boxes I want to use in this exercise, lets calls them servers 1,2,3 (S1, S2, S3)

a. That S1 acts as ‘The Primary’ failover box for S3
b. That S2 acts as ‘The Primary’ failover box for S1
c. That S3 acts as ‘The Primary’ failover box for S2
d. That S1 acts as ‘The Secondary’ failover box for S2
e. That S2 acts as ‘The Secondary’ failover box for S3
f. That S3 acts as ‘The Secondary’ failover box for S1
g. Internal extension registrations from the same pool of phones (and agents) are balanced (randomly) across S1,2,3.

Issue I am not concerned with:

a. Maintenance - I am happy to maintain individual .conf’s (As I am working on some generation tools to make this easier)
b. Security - It’s a lab.
c. Database Replication / Performance - I actually want to write a DB2 interface for * as I am a huge fan of Express C
d. Network Performance - For my first cut I am not too worried about setting up all my NIC’s and going nuts on the routing, although this will come later.

I also want to understand if it is possible for a call to be active (let’s say for arguments sake that it is internal SIP to SIP via S1 and S2) and S1 goes down, is it possible to have this call remain active without a need to redial?

I am really not looking at commercial options, and I don’t want to invest too much in setting this up, as I read this is being addressed at in 1.6

SIP Providers
I have a number of SIP Lines with my VOIP Provider that I register in my SIP Conf. What is the best way of splitting these across the servers?

Thanks in advance for any help / corrections / even flames - as an output I really want to put together a guide of my experience from Novice through to HA Environment, hopefully this will help give something back to the community, unless of course there is already one that fits the described purpose…


Registering out can be a bit tricky. If say you have S1 register out and it goes down how would you know to set S2 to now register. I would maybe write a PHP script that checks the other two machines (from each machine) to see if it is up. If the primary is down then it will register out.

Also have a look at heartbeat. Maybe you can have it set that if heartbeat kicks in to then start registering.

If a call fails I would think that they would have to re-dial again. I personally can’t think of anything that will save the call when the box goes down.

Sorry if I am unclear on this message. It has been a long night :wink:

This may not be exactly what you need, but I mention it as only food for thought. I have set up a redundant Asterisk server using heartbeat and assigned allias IP addresses as the address of the registration server. Remember to specify this in the various (SIP DUNDI IAX) files. This works well in an active-passive configuration since the registration address follows the active server. I also used mysql realtime to hold realtime extension mapping and sip registrations and realtime static for config file details. There are many ways to share this of course, but since I was only interested in a two node cluster, I set up shared space on the two machines with DRDB establishing a “mirror” between the two machines and DRDBLINKS to assign the mappings to config files and mysql data. Of course, heartbeat handles the allias IP address mappings and service starting and stopping. It works well, but again, only active-passive. I used used cheap server hardware that can easily handle hundreds of extensions. Of course, TELCO switch may also be required depending on the type of ZAP interfaces you are using.