Страница 1 из 1

kamailio настройка балансировки

СообщениеДобавлено: 18 ноя 2015, 13:22
maksimovkv
Добрый день!
Хочу собрать следующую схему. Пользователи регистрируются на kamailio, звонки от них от них балансируются на ноды астериска.
То есть приходит звонок от пользователя на kamailio, он посылает его на на одну из нод астериска .
Астериск принимает вызов, выполняет какое-то приложение если надо и отправляет вызов обратно к kamailio и он свою очередь отдает этот вызов конечно пользователю.
При тесте у меня получается что-то типа петли инвайтов.То есть инвайт от пользователя летит на камалио, он отправляет его на ноду, вызов возвращается и опять попадает в секцию инвайт и вызов опять уходит на астер, а не на конечного пользователя.Не могу понять как правильно это дело смашрутизировать, может нужно какие-то условия написать для каждых инвайтов или т.п.
Пересмотрел кучу конфигов, но не могу понять саму концепцию.
Вот что в конфиге
if (is_method("INVITE"))
{
record_route();
sl_send_reply("100","Trying");
ds_select_dst("1", "4");
forward();
xlog("L_NOTICE", "Balancing call to asterisk => $du, from $fU \n");
route(LOCATION);
route(RELAY);
}
}

Re: kamailio настройка балансировки

СообщениеДобавлено: 18 ноя 2015, 15:28
Pechen

Re: kamailio настройка балансировки

СообщениеДобавлено: 18 ноя 2015, 16:16
maksimovkv
Уже читал эту статью, сделано примерно тоже самое.Но почему-то инвайты которые приходят от нод попадают опять в секцию где описано балансировка и опять летят на эти же ноды, и в итоге получается петля.Как адресовать инвайты от нод, которые приходят от камалио конечным пользователем, не могу понять
if (is_method("INVITE"))
{
record_route();
sl_send_reply("100","Trying");
ds_select_dst("1", "4");
forward();

пришел инвайт на камалио и ушел на ноды.От нод идет инвайт и попадет сюда же и опять уходит на ноды.
Почему не уходит сюда
route(LOCATION);
route(RELAY);
}
}

секция

Re: kamailio настройка балансировки

СообщениеДобавлено: 19 ноя 2015, 14:44
maksimovkv
Разобрался, можно закрыть тему.

Re: kamailio настройка балансировки

СообщениеДобавлено: 19 ноя 2015, 14:50
april22
напишите для потомков

Re: kamailio настройка балансировки

СообщениеДобавлено: 21 ноя 2015, 13:34
Samael28
Дайте угадаю, через что-то типа
if (ds_is_in_list("$si", ..) {
...
}
в смысле проверять, если адрес реквеста - одна из нод, тогда отсылаем на юзера? )

Re: kamailio настройка балансировки

СообщениеДобавлено: 24 ноя 2015, 15:19
maksimovkv
да верно, нужно было написать условие, если приходит инвайт приходит от нод, направлять его конечного пользователя.
На писал так
if (is_method("INVITE")) {
if(src_ip==ip_одной из нод & method=="INVITE"){
log("the message was sent from localhost!\n");
route(LOCATION);
route(RELAY);
}
else
{if(src_ip==ip_одной из нод & method=="INVITE"){
log("the message was sent from localhost!\n");
route(LOCATION);
route(RELAY);
}

С kamailio только разбираюсь , по началу было сложно понять саму концепцию.Вот как интересно будет работать перехват вызова в данной схеме, пока не понятно. Наверно надо использовать конкретный модуль для реализации.

Re: kamailio настройка балансировки

СообщениеДобавлено: 25 ноя 2015, 09:14
virus_net
Интересная тема. Сам давно хочу попробовать, но все руки не доходят.
Помимо перехватов как минимум есть ещё вопросы про очереди и работу BLF в такой схеме.

maksimovkv писал(а):звонки от них от них балансируются на ноды астериска.

А звонки к ним ?

Re: kamailio настройка балансировки

СообщениеДобавлено: 25 ноя 2015, 09:38
maksimovkv
Да даже если рассматривать какой то внутренний звонок.приходит вызов его нужно перехватить с другого аппарата - понятно что оба телефона должны быть в одной группе.
Где прописывается принадлежность того или иного юзера к группе, и как это сохранить при балансировке вызова.
На счет очереди - если на всех нодах поднять очередь, причем через базу - наверно все заработает, в том числе и синхронизация позиций в очереди, ведь для всех нод (астериск) она будет в базе.