Skip to content

Opensips blog

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

  • Talant Blogs about 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, пример, русском

Post navigation

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

Leave a Reply Cancel reply

You must be logged in to post a comment.

My Profile

Eremin Pavel

Voip developer

P: 79227502213

E: eremina.net@gmail.com

Hire me on Freelancer.com

Управление

  • Register
  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Облако

AMI (4) asterisk (19) centos (5) centos 7 (4) certbot (2) certificate (2) debian (3) dispatcher (2) duplicate (2) elastix (3) error (4) events (2) fail (3) freepbx (8) g729 (2) google (2) how to (2) install (2) ios (2) issabel (4) issue (2) json (2) Kamailio (12) limit (2) Load (3) local (2) Mysql (8) nat (2) opensips (16) opensips-cli (3) PAMI (2) performance (2) pjsip (2) provisioning (2) push (2) rtpengine (5) rtpproxy (2) SBC (3) ssh (3) timeout (3) tls (5) transcoding (2) voip (4) webrtc2sip (3) windows (3)

Recent Posts

  • TLS
  • Opensips. MI. Json. Zabbix.
  • Opensips-cli. Json. jq.
  • Register here to leave comments or asks something
  • Opensips 3.2, Homer 7

Archives

  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • May 2021
  • April 2021
  • March 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • September 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • January 2018
  • December 2017
  • November 2017
  • July 2017
  • June 2017
  • May 2017
  • February 2016
  • December 2015
  • August 2015
  • June 2015
  • April 2015
  • February 2015
  • November 2014
  • September 2014
  • July 2014
  • June 2014
  • May 2014
  • August 2013
  • July 2013
  • April 2013
  • September 2012

Categories

  • ansible
  • Asterisk
  • ChannelRedirect
  • freepbx_tips
  • freeswitch
  • kamailio
  • opensips
  • rtpengine
  • SQL запросы
  • ssl\tls
  • Unix вопросы
  • vmware
  • Без рубрики
  • Безопасность
  • Городские номера
  • Готовые решения
  • Общее
  • переадресация
  • Проблемы в коде
  • Проблемы при настройке
  • Эксперт

Meta

  • Register
  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

© 2022 Opensips blog

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