Ejemplo sencillo de redundancia en Asterisk

Leo aquí un ejemplo bastante sencillo de como implementar redundancia de servidores Asterisk. El ejemplo no es muy completo, pero da una idea general sobre como seguir la implementación.

La idea es tener 2 servidores Asterisk conectados entre sí mediante SIP o IAX2, y que si al intentar realizar una llamada uno de ellos encuentra un problema, se la pase al otro, teniendo en cuenta que no se deben de formar bucles. Por tanto, el esquema es el siguiente:

cluster1.png

Configuración en el Nodo1:

; ———Start: [cluster-local] —————-
[cluster-local]
exten => _[12]X,1,Verbose(${FROM_CLUSTER})
exten => _[12]X,2,Dial(SIP/${EXTEN},20,rt)
exten => _[12]X,3,GotoIf($[«${FROM_CLUSTER}» == «1»]?_[12]X,6)
exten => _[12]X,4,Set(CALLERID(num)=9999${CALLERID(num)})
exten => _[12]X,5,Dial(SIP/cluster-node2/${EXTEN},20,rt)
;
exten => _[12]X,6,Congestion()
; ———End: [cluster-local] ——————

; ———Start: [cluster-from-remote] —————-
[cluster-from-remote]
exten => _.,1,Set(_FROM_CLUSTER=1)
exten => _.,2,Set(CALLERID(num)=${CALLERID(num):4})
exten => _.,3,Goto(cluster-local,${EXTEN},1)
; ———End: [cluster-from-remote] ——————

Configuración en el Nodo2:

; ———Start: [cluster-local] —————-
[cluster-local]
exten => _[12]X,1,Verbose(${FROM_CLUSTER})
exten => _[12]X,2,Dial(SIP/${EXTEN},20,rt)
exten => _[12]X,3,GotoIf($[«${FROM_CLUSTER}» == «1»]?_[12]X,6)
exten => _[12]X,4,Set(CALLERID(num)=9999${CALLERID(num)})
exten => _[12]X,5,Dial(SIP/cluster-node1/${EXTEN},20,rt)
;
exten => _[12]X,6,Congestion()
; ———End: [cluster-local] ——————

; ———Start: [cluster-from-remote] —————-
[cluster-from-remote]
exten => _.,1,Set(_FROM_CLUSTER=1)
exten => _.,2,Set(CALLERID(num)=${CALLERID(num):4})
exten => _.,3,Goto(cluster-local,${EXTEN},1)
; ———End: [cluster-from-remote] ——————

Las llamadas siempre entran el el contexto cluster-local, se intenta la llamada, y en caso de no conseguirlo, se la envía al otro nodo. Este la recibe en su contexto cluster-from-remote, activa un flag para no devolverle la llamada otra vez en caso de fallo e intenta realizar la llamada.

Es una solución bastante «casera», pero no todo el mundo esta por la labor de ponerse un cluster…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *