PDA

Voir la version complète : Comment configurer un Trunk Sip via un Round Robin ?



Bladator
13/10/2010, 13h25
Bonjour,

Est-il possible de faire du Round Robin via Asterisk ?

J'explique ma problématique :

J'ai 2 lignes T2, le Trunk Sip s'effectue par les 2 routeurs, seulement voilà la majorité des appels vers l'extérieure passe par le 1er Routeur jusqu'à sa saturation (Ce sont nos macros qui sont écrits comme cela).
J'aimerai donc faire du Round Robin afin de répartir la charge des appels, un coup sur le Routeur1 et ensuite via le Routeur2 puis Routeur1, ainsi de suite...


Configuration actuelle :

---- SIP.CONF ----
[Routeur1]
type=friend
host=X.X.X.10
canreinvite=no

[Routeur2]
type=friend
host=X.X.X.11
canreinvite=no

---- EXTENSIONS.CONF ----
[macro-VersNumeroExterne]
exten => s,1,Set(CALLERID(num)=${ARG1})
exten => s,n,Dial(SIP/Routeur1/${ARG2})
exten => s,n,Dial(SIP/Routeur2/${ARG2})


Configuration souhaité :

---- SIP.CONF ----
[Routeurs]
type=friend
host=routeurs.domaine.local
canreinvite=no

---- EXTENSIONS.CONF ----
[macro-VersNumeroExterne]
exten => s,1,Set(CALLERID(num)=${ARG1})
exten => s,n,Dial(SIP/Routeurs/${ARG2})


Du côté DNS, le round robin fonctionne très bien après avoir fait plusieurs pings à partir du serveur Asterisk, X.X.X.10 et X.X.X.11 aléatoire.

Seulement voilà, à l'aide d'un "sip show peer routeurs" je n'ai associer qu'une adresse IP qui est le X.X.X.10.

Je souhaiterai que l'adresse IP associé change toute les 30secondes par exemple, mais je ne sais quels variables utilisées afin de forcer une requête de résolutions de noms.


Merci d'avance pour vos suggestions !

tomarch
13/10/2010, 14h25
je pense que tu peux te baser sur ce tuto :
http://www.asterisk-france.org/content.php/41-Tuto-Utilisation-des-customs-trunks-avec-freepbx

ffossard
14/10/2010, 09h55
je pense que tu peux te baser sur ce tuto :
http://www.asterisk-france.org/content.php/41-Tuto-Utilisation-des-customs-trunks-avec-freepbx

Je pensais à une solution de ce type, mais j'utiliserai plutôt une variable globale qu'un stockage en astDB, pas besoin que la valeur survive à un restart, l'écriture sur le disque dur est superflue :wahoo:

cedricscha
14/10/2010, 10h05
j'avais fais ceci, sur un de mes serveurs ......



[AppelSortant]
exten = _XXXX.,1,Random(50:sortie2)
exten = _XXXX.,n,Dial(SIP/Sortie1/${EXTEN})
exten = _XXXX.,n(sortie2),Dial(SIP/Sortie2/${EXTEN})

fastm3
14/10/2010, 14h57
Je pensais à une solution de ce type, mais j'utiliserai plutôt une variable globale qu'un stockage en astDB, pas besoin que la valeur survive à un restart, l'écriture sur le disque dur est superflue :wahoo:
C'etait fait pour 5 trunks initialement...Un simple reload effacera la globale. C'est pas superflu. :laser:
:D
Le fsync dans une config normale aura lieu de toutes facons regulierement donc lors d'un dial, ca ne change strictement rien. Une idee des perfs de astdb pour la 1.8: https://reviewboard.asterisk.org/r/825/
Je gere en fait les distributions de trunks complexes avec un agi perl nettement plus lourd...:D
Quel pinailleur ce gourou...;)
Cheers !!
Fastm3.

ffossard
14/10/2010, 18h26
je sais :D
Sûr qu'un reload efface les variables globales ? (avec le clearglobalvars=no par défaut, elles sont censées survivre au reload)

fastm3
14/10/2010, 19h39
je sais :D
Sûr qu'un reload efface les variables globales ? (avec le clearglobalvars=no par défaut, elles sont censées survivre au reload)
Pfff, ca m'enerve, tu as effectivement raison si on ne l'a pas setté. :ouimaitre:
Fastm3.

Bladator
28/10/2010, 09h40
Merci pour l'ensemble de vos réponses.

Voici ce que j'ai mis en production et qui fonctionne très bien :

[macro-VersNumeroExterne]
;COUNT = 1 ou 2
exten => s,1,Set(COUNT=${DB(SIP/Routeur)})
exten => s,n,Set(COUNT=$[${COUNT} + 1])
exten => s,n,Set(COUNT=${IF($[ ${COUNT} = 3]?1:${COUNT})})
exten => s,n,Set(DB(SIP/Routeur)=${COUNT})
exten => s,n,Set(CALLERID(num)=${ARG1})
exten => s,n,Dial(SIP/Routeur${COUNT}/${ARG2})