czwartek, 2 października 2014

Prosty load balancer oparty na round-robin dla połączeń wychodzących - Asterisk


Dzisiaj szybki i prosty round-robin w Asterisku, który losuje pomiędzy trunkA i trunkB, gdzie pójdzie połączenie wychodzące:

extensions.conf

[macro-stacjonarne]
exten => s,1,NoOp(DZWONIE DO ${ARG1})
exten => s,n,GotoIf($[${RAND(1,2)} > 1]?trunkA:trunkB)
exten => s,n(trunkA),Dial(SIP/trunkA/${ARG1})
exten => s,n,Hangup
exten => s,n(trunkB),Dial(SIP/trunkB/${ARG1})
exten => s,n,Hangup


Rozwiązanie można nawet wykorzystać w ostateczności jako failover, jeśli ma się tylko 2 trunki (ale nie polecał bym, lepiej jednak zrobić failover, który będzie badał status ewentualnie stan trunka)