Skip to content

Opensips blog

Заметки voip инженера

  • Готовые сервисы
    • PUSH NOTIFICATIONS API
  • Kamailio
  • Opensips
  • О себе и реквизиты

Load Balancing SIP

2014-07-25 yooxyman

UAC — > LB -> (PROXY1 | PROXY2 | … ) -> UAS

Задача: раскидать звонки между sip proxy, сначала на PROXY1, в случае его недоступности на PROXY2.

В идеале если хочется распределять нагрузку между несколькими прокси серверами, то нужно делать LB  в режиме stateless (использовать функцию forward() совместо с модулем dispatcher) однако в таком случае нет возможности сделать failover в случае падения одного из проксей, т.к. response нельзя поймать в отдельный блок. (хотя возможно разместив код в разделе onreply_route… надо будет проверить).

Сначала учтем ситуацию что в сообщении уже содержится route и вызовем функцию loose_route. без нее вы рискуете на некоторых звонках, это зависит от вашего окружения, получить зацикливание сообщений ACK. Нужно обязательно проверить, чтобы loose вызывался для ACK сообщений и участвующих в диалоге, а не для первых сообщений в диалоге, т.к. это может привести к пробеганию через ваш прокси трафика на чужие сервера, либо на поставщиков услуг, что страшнее, т.к. это сразу минус бабки.

Ниже представлен конфиг:

request_route {
if (loose_route()) {                                                #Если сообщение содержит Route: то функция выдаст 1. Если его там нет, то 0. Здесь мы проверяем, есть ли в сообщении Route и если да, то…
xlog(«L_INFO»,»ACK TRansported…»);   #Выводим в лог любую хрень полезную для понимания
t_relay();                                                                 #Оправляем сообщение согласно этому заголовку Route. 
exit;                                                                            #Завершаем выполнение скрипта, т.к. больше LB делать ничего не надо. 
}

if (!ds_select_domain(«1», «8»))                   # Здест мы пользуемся функцией которая выберет для нас адрес прокси (proxy1) и подставит его в URI (первая строчка в SIP сообщении)
{
xlog(«L_ALERT»,»404 No route $ru»); # ВЫводим в лог сообщение елси ни один из проксей не доступен.
send_reply(«404″,»No route»);                  #Посылаем «клиенту» 404 сообщение, мол, нет возможности отправить вызов.
exit;                                                                          # Завершаем скрипт
} else {
t_on_failure(«RTF_DISPATCH»);            # Если таки прокси для сообщения определен, то привязываем ответ к разделу «RTF_DISPATH», там мы поймаем ответ, и если он говорит о проблеме с прокси, то                                                                                             отправим сообщение на другой прокси.
 xlog(«L_ALERT»,»Passed dispatcher $ru via $du $rm»);   # Запишем в лог информацию о том, что сообщение будет отправленно на $ru.(при вызове функции ds_select_domain $ru меняется на новый
route(RELAY);                                                      # собственно отправляем сообщение в раздел где оно отправится к $ru.
}
}

 

 

Posted in Без рубрики, Готовые решенияTagged Balancing, Kamailio, Load, Load-Balancing, opensips, пример, русском

Навигация по записям

call_control cdrtool maxsessiontime
uac_auth cseq increase Решение solve

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

My Profile

Eremin Pavel

Voip developer

P: 79227502213

E: eremina.net@gmail.com

Hire me on Freelancer.com

Облако

AMI (4) asterisk (18) centos (4) centos 7 (3) certbot (2) certificate (2) debian (2) duplicate (2) elastix (3) error (3) events (2) fail (3) freepbx (8) g729 (2) google (2) ios (2) issabel (4) issue (2) Kamailio (8) limit (2) Load (3) local (2) Mysql (8) nat (2) opensips (11) PAMI (2) performance (2) pjsip (2) provisioning (2) push (2) re-invite (2) rtpengine (2) SBC (2) server (2) ssh (2) ssl (2) tcp (2) timeout (2) tls (3) vmware (2) voip (2) wav (2) webrtc (2) windows (3) zoiper (2)

Свежие записи

  • asterisk 16. webrtc. sipml5
  • esxi useful command. vmware.
  • opensips as SBC
  • sipdump per day. compressed. heplify.
  • kamailio. siremis. xmlrpc. jsonrpc.

Управление

  • Войти
  • Лента записей
  • Лента комментариев
  • WordPress.org

© 2021 Opensips blog

Proudly powered by WordPress | Theme: x-blog by wpthemespace.com