Список форумов Asterisk Forum Asterisk Forum
The Asterisk Open Source PBX - Russian Community
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ПравилаПравила   ГруппыГруппы   ИзбранноеИзбранное    LinksСсылки   РегистрацияРегистрация 
 RSSRSS   ПрофильПрофиль   Войти и проверить личные сообщения   ВходВход 

Openser (kamailio) в качестве load balanser-a
На страницу 1, 2  След.
 
Список форумов Asterisk Forum -> OpenSER    вывод темы на печать
Предыдущая тема :: Следующая тема  
Автор Сообщение
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Ср Авг 27, 2008 12:55    Заголовок сообщения: Openser (kamailio) в качестве load balanser-a

Специалисты по Openser (который теперь kamailio) давайте делиться опытом. Рускоязычной инфы очень мало по нему, а в англоязычной не всегда все понятно.
Второй месяц работаю над созданием нормального load balansera к * в количестве n штук. Схема работы

Теперь обясняю как это работает.
Есть некоторая сеть где сидит некоторое количество абонентов, и есть другая сеть которая за натом. Решили делать лоадбалансинг для того чтобы улучшить надежность нашей IP-PBX Asterisk. В качестве балансировщика поставили openser, и в качестве PBX 2 Asterisk.
Все клиенты регятся только на Openser-е, на астериске только звонки, запись разговоров, очереди и т.д. и т.п.
Долго и упорно изучал опесер, читал книгу http://www.asteriskforum.ru/viewtopic.php?t=2237, читал сайт www.openser.org, который нынче вот здесь http://www.kamailio.net/, а также http://www.voip.rus.net/, http://www.voip-info.org/.
Добился в итоге неплохих результатов. В принципе все работает. Балансировщик свою задачу выполняет, в statefull режиме пакеты туда сюда маршрутизиует. Asterisk-и загружены равномерно.
Для клиентов которые тусуются за nat-ом созданы правила позволяющие его преодолевать и заворачивает трафик на mediaproxy.

В общем не буду подробно останавливаться на разъяснении конфигурационного файла, который лежит в атаче.

В общем в принципе достаточно рабочая конфигурация но есть пару НО.

1. Хотелось бы сделать чтобы уже установленные звонки не зависели от состояния asterisk. Т.е. чтобы rtp траффик шел напрямую от mvts до openser. Падает астериск а текущим разговорам пофигу. canreinvite=yes не помогает.

2. Возникают иногда ситации. Юзверь куда-то звонит, но набирает неправильно номер. Ему отдается сообщение service unvailable c кодом 503. Затем это сообщение транслируется оконечному устройству которое инициировало звонок, а т.к. это ошибка то это устройство звонок останавливает а на openser-е возникает незаконченная транзакция, т.к. INVITE был, a Cancel или Bye не было. Транзакция залипает на стадии отправки пакета с методом Ask. В итоге имеем, следующий звонок этого клиента интерпретируется Openser -ом ни как новая транзакция а как продолжение предыдущей и звонок маршрутится не туда куда нужно и соответсвенно звонок никуда не уходит. Если пару минут подождать то транзакция удаляется и можно звонить снова. Но это не очень хорошо.

Вижу выход только в отлавливании сообщения с кодом 503 и отправки в секцию где транзакция будет прибиваться. т.е. в onreply_route[1] ищем статус 503 и отправляем в route(5), где убиваем транзакцию при помощи t_release(). Вроде должно работать однако ситуация повторяется.

Вот это пока 2 мои трудности, может кто может мне помочь их решить.

Взамен отвечу на любые вопросы по моей конфигурации openser -а. Думаю многим бы это пригодилось.

Давайте пополнять русcкоязычное комьюнити openser. Штука очень полезная для VoIP.


Последний раз редактировалось: ZloMurz (Ср Авг 27, 2008 13:14)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ToxaP



Зарегистрирован:
13.05.2006
Сообщения: 327

Статус: Оффлайн 

СообщениеДобавлено: Ср Авг 27, 2008 13:11    Заголовок сообщения:

Схему залей пожалуйста в attach.
_________________
"Фантазия важнее знания.", Альберт Эйнштейн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ys
Модератор


Зарегистрирован:
28.04.2005
Сообщения: 688
Откуда: Петербург

Статус: Оффлайн 

СообщениеДобавлено: Ср Авг 27, 2008 19:02    Заголовок сообщения:

По поводу пункта два, мне кажется, что такие сообщения должны попадать в блок failure_route[1] а не onreply_route[1].
_________________
ys
http://voip.rus.net/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
anest
Модератор


Зарегистрирован:
28.11.2004
Сообщения: 5636

Статус: Оффлайн 

СообщениеДобавлено: Ср Авг 27, 2008 19:10    Заголовок сообщения:

ZloMurz, зачёт! Good
тему подвешу наверх - свежа и актуальна, (хоть и не Астериск напрямую, будет приятным исключением).
в виде исключения разрешаю в данной теме постить полные конфиги (только используйте теги).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Чт Авг 28, 2008 10:00    Заголовок сообщения:

to ys.

Цитата:

t_on_failure(failure_route)
Функция определяет блок, который будет обрабатывать ответы на SIP запросы в том случае, если транзакция завершилась с отрицательным результатом


Цитата:

t_on_reply(reply_route)
Функция определяет блок, который будет обрабатывать ответы на SIP запросы, управление которому передается каждый раз при приеме (промежуточных и финальных ) ответов в пределах транзакции.


я конечно пытался обрабатывать ситуацию именно в failure_route, но
Код:

if (status=~"(503)")
    {
        xlog("L_INFO", "503\n");
    }


в failure_route статус 503 не ловит, а onreply_route ловит.

Сейчас вот запустил openserctl monitor и вижу в Transaction Statistics что inuse_transactions = 0 после того как совершаю вызов на неправильный или несуществующий номер, т.е. походу залипших транзакций в памяти не остается. Вот тогда интересно что мешает следующему звонку повторить весь путь а не идти сразу на обработку ACK запросов.

Added after 3 hours 10 minutes:

Ура. Very Happy Кажется победил!!!
Достаточно было внести в конфигурацию
Код:
disable_dns_blacklist=yes

и все стало нормально отрабатываться.
Так что если кто столкнется с траблой когда на оконечку прилетает 473 Filtering destination смело ставьте эту опцию.

Вопрос по canreinvite все еще актуален.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ToxaP



Зарегистрирован:
13.05.2006
Сообщения: 327

Статус: Оффлайн 

СообщениеДобавлено: Чт Авг 28, 2008 13:30    Заголовок сообщения: Re: Openser (kamailio) в качестве load balanser-a

ZloMurz писал(а):
1. Хотелось бы сделать чтобы уже установленные звонки не зависели от состояния asterisk. Т.е. чтобы rtp траффик шел напрямую от mvts до openser. Падает астериск а текущим разговорам пофигу. canreinvite=yes не помогает.


А зачем вы тут используете asterisk? У вас ведь пользователи на kamailio.

_________________
"Фантазия важнее знания.", Альберт Эйнштейн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Пт Авг 29, 2008 19:00    Заголовок сообщения:

Потому что kamailio это софтсвитч, и он не обладает функциями PBX. Мы достаточно широко юзаем asterisk в качестве PBX но надежность его работы при большом количестве одновременных звонков совсем не устраивает. Именно для этого и пытаемся внедрить балансировщик нагрузки. Но хочется сделать действительно безотказное рещение чтобы еще и при падении астериска не разрывался медиапоток.

В итоге хотим сделать чтобы сам опенсер крутился на кластере из 2-ух машин и обслуживал кучу астерисков, часть из которых будет обеспечивать связью офис, а другая предоставлять клиентам телефонии различные SIP фишки.
Еще есть задумка попробовать вместо астериска callweaver. Кстати сразу вопрос кто-нить юзал его, стоит возиться?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ToxaP



Зарегистрирован:
13.05.2006
Сообщения: 327

Статус: Оффлайн 

СообщениеДобавлено: Вс Авг 31, 2008 09:37    Заголовок сообщения:

Я не много о другом. О том, что входящий звонок можно сразу с меры на опенсер отправить и привести далее на телефон.

Хотя я думаю вы защищаетесь не с той стороны. Как часто * то падает? Может не стоит ее до такого то доводить?
т.е. если вы на уровне распределения нагрузки разбросаете звонки по астерискам, то почему ему то падать?

_________________
"Фантазия важнее знания.", Альберт Эйнштейн
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
anest
Модератор


Зарегистрирован:
28.11.2004
Сообщения: 5636

Статус: Оффлайн 

СообщениеДобавлено: Пн Сен 01, 2008 04:01    Заголовок сообщения: Re: Openser (kamailio) в качестве load balanser-a

ZloMurz писал(а):
...Openser (который теперь kamailio)...

кстати.. а что тогда есть OpenSIPS? или уже несколько клонов? тогда какой самый "правильный"?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ys
Модератор


Зарегистрирован:
28.04.2005
Сообщения: 688
Откуда: Петербург

Статус: Оффлайн 

СообщениеДобавлено: Пн Сен 01, 2008 08:47    Заголовок сообщения:

Пока непонятно.
Тот, кто из них будет сильнее развиваться, тот и правильный.
Время покажет.

_________________
ys
http://voip.rus.net/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Пн Сен 01, 2008 09:25    Заголовок сообщения:

ToxaP писал(а):

Хотя я думаю вы защищаетесь не с той стороны. Как часто * то падает? Может не стоит ее до такого то доводить?
т.е. если вы на уровне распределения нагрузки разбросаете звонки по астерискам, то почему ему то падать?

Кстати наверное согласен Smile

Added after 4 minutes:

2 anest:
я когда начал курить OpenSer то он и был OpenSer-ом, а как-то прихожу на работу набираю сайт ихний а меня редиректит на OpenSIPs, а про то что опенсер таки стал kamailio узнал несколько позже. Я так понял что разработчики kamailio это в некотором роде "консерваторы" и для них главное стабильность, а конфликт приведший к разделению проекта, произошел со стороны OpenSIPs -вцев. Но могу ошибаться.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Tron



Зарегистрирован:
14.07.2008
Сообщения: 10

Статус: Оффлайн 

СообщениеДобавлено: Пн Сен 08, 2008 10:54    Заголовок сообщения:

А какой из них OpenSIPS или Kamailio больше всего приближен к OpenSER ? С кого из них начать изучение?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Пн Сен 08, 2008 11:13    Заголовок сообщения:

Пока разницы никакой, они не успели еще сильно разлететься.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Руут



Зарегистрирован:
14.08.2008
Сообщения: 143
Откуда: Киев

Статус: Оффлайн 

СообщениеДобавлено: Чт Сен 25, 2008 07:06    Заголовок сообщения:

И все же.Может кто нибудь подскажет, к чему привело такое разделение проекта?С чем в данный момент легче работать?Или нет наверное не так.Что более стабильнее на данный момент?Спасибо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Чт Сен 25, 2008 12:04    Заголовок сообщения:

Пока это разделение не принципиально. Оба одинаково сложны в изучении имхо. Лично я выбрал kamailio, ибо он таки опенсер, просто с другим названием. Так что рекомендую разбираться с ним.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Руут



Зарегистрирован:
14.08.2008
Сообщения: 143
Откуда: Киев

Статус: Оффлайн 

СообщениеДобавлено: Чт Сен 25, 2008 13:25    Заголовок сообщения:

Спасибо за ответ.Будем тогда пробовать kamailio.В принципе нужно только поставить и "пропускать" через него несколько звонков.А там видно будет)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tma



Зарегистрирован:
11.07.2005
Сообщения: 361

Статус: Оффлайн 

СообщениеДобавлено: Вт Сен 30, 2008 20:29    Заголовок сообщения:

ZloMurz писал(а):

Еще есть задумка попробовать вместо астериска callweaver. Кстати сразу вопрос кто-нить юзал его, стоит возиться?


Я сейчас с ним активно вожусь... Здесь http://www.asterisk-support.ru/forum/19/ оставляю впечатления...

_________________
Maksim Timofejev
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Ср Окт 08, 2008 05:21    Заголовок сообщения:

Скрещиваю asterisk c kamailio(openser). Столкнулся с такой сиуацией. Для преодоления NAT-а юзается mediaproxy. Звонок такой: vasya@domen.ru -> kamailio -> asterisk -> kamailio -> petya@domen.ru. Mediaproxy послушно открывает всем желающим порты и готов проксировать траф. Но пиры vasya@domen.ru и asterisk гоняют траф без медиапрокси. Стоит мне на софтфоне нажать на секунду hold и вернуться обратно, медиа трафик начинает ходить через медиапрокси.
В принципе и так всех слышно, просто странно как-то себя ведет связка. Я полагаю траф начинает ходит через медиапрокси после re-INVITE. Вот думаю чей это косяк kamailio или asterisk.

Может есть у кого соображения на сей счет?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ALD



Зарегистрирован:
14.12.2008
Сообщения: 47

Статус: Оффлайн 

СообщениеДобавлено: Пн Дек 15, 2008 01:27    Заголовок сообщения:

А как бы в этой схеме уменьшить timeout ответа от умершего астреска ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Пн Дек 15, 2008 08:20    Заголовок сообщения:

покажи конфиг где ты делаешь выбор астериска, у меня умерший астер просто выпадает и система даже не пытается на него звонить
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ALD



Зарегистрирован:
14.12.2008
Сообщения: 47

Статус: Оффлайн 

СообщениеДобавлено: Пн Дек 15, 2008 13:26    Заголовок сообщения:

Лови, причем если без failure_route[7] то она вообще не переходит на работающий астерикс.
OpenSER 1.2.3 на FreeBSD ставил из портов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Пн Дек 15, 2008 15:17    Заголовок сообщения:

Попробуй так, у меня нормально работает:

Код:

ds_select_dst("1","4");
forward();
return;

Т.е. отдаешь астеру не t_relay-ем, а forward-ом. У меня с t_relay тоже помню долго тупил опенсер с обнаружением нерабочей ноды астериска
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ALD



Зарегистрирован:
14.12.2008
Сообщения: 47

Статус: Оффлайн 

СообщениеДобавлено: Пн Дек 15, 2008 20:16    Заголовок сообщения:

с forward() перестал отбой со стороны клиента не приниматься. т.е. кладу трубку на сере срабатывает правило на это msg:len >= 2048

Added after 47 minutes:

В итоге оставил t_relay() и выставил
modparam("tm", "fr_timer", 3)
modparam("tm", "fr_inv_timer", 120)

Т.е. ждем ответа от астерикса не более 3х секунд, а если получили ответ то уже 120.
Переключение практически не заметно со стороны клиента.

Относительно forward() то выяснил, что функции forward() и send() не сохраняют состояние т.е. перекидывают сообщение и и забывают про транзакцию...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZloMurz



Зарегистрирован:
31.01.2008
Сообщения: 303

Статус: Оффлайн 

СообщениеДобавлено: Вт Дек 16, 2008 05:52    Заголовок сообщения:

Очень хорошо, попробуюSmile

Added after 38 minutes:

Большущий респект, допилил свой опенсер, теперь как часы работает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ALD



Зарегистрирован:
14.12.2008
Сообщения: 47

Статус: Оффлайн 

СообщениеДобавлено: Ср Дек 17, 2008 16:54    Заголовок сообщения:

Кстати, вопрос, а зачем транзитить через меру ? Можно же сразу с астериска по h.323 на циску отдавать...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Список форумов Asterisk Forum -> OpenSER На страницу 1, 2  След. Ответить на тему
Страница 1 из 2

Добавить в Избранное

 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
You cannot attach files in this forum
You cannot download files in this forum