我的情景是:
SIP干线连接到Kamailio服务器,该服务器在本地连接到多个Asterisk服务器,并应在这些星号服务器之间进行负载均衡。怎么样? Kamailio服务器中有一个mysql数据库表,它将来电的sip标题的TO
部分映射到星号的IP之一。
Kamailio应该读取sip标头并在数据库内搜索,并在获取IP后,将呼叫转发到正确的星号服务器。
例如,传入sip标头内的To
值为123456
,因此kamailio会查询数据库并查找123456
内的数字192.168.1.10
,因此应将调用转发给服务器192.168.1.10
。
我已经从它的网站上阅读了多篇文章和Kamailio的帮助,但找不到与此方案相关的任何内容。 有谁知道怎么写kamailio.cfg里面的路线?
答案 0 :(得分:1)
有一些方法可以做到这一点。其中之一是使用调度程序模块。
此模块提供SIP负载均衡器功能,可用作SIP流量调度程序。您可以选择许多负载平衡和流量分配算法,例如:循环,基于权重的负载平衡,呼叫负载分配以及SIP消息属性上的散列。
该模块可用作无状态负载均衡器;它不依赖于任何呼叫状态跟踪模块。如果启用主动/非活动网关的自动发现,则需要TM模块。
它非常轻巧,因此适合处理繁重的SIP流量。由于该模块占用空间小,能够从纯文本文件加载平衡规则,因此适用于嵌入式系统。
您需要添加一个dispatcher.list
文件,其中包含星号的IP列表,如下所示:
1 sip:192.168.0.10 #asterisk 01
1 sip:192.168.0.11 #asterisk 02
然后,在转发请求之前,您将执行ds_select_dst(1, 0);
确保为调度程序模块指定列表文件:
loadmodule "dispatcher.so"
modparam("dispatcher", "list_file", "/var/run/kamailio/dispatcher.list")
如果要使用数据库而不是文件,可以通过指定db:
来实现modparam("dispatcher", "db_url", "mysql://user:passwb@localhost/database")
此外,还有其他参数用于指定数据库表等。
中阅读更多内容答案 1 :(得分:0)
随机或循环调用通常由调度员或负载均衡调用完成。
如果您需要查询数据库,您可以选择使用AVPOPS模块(允许对数据库进行自定义查询)和使用HTABLE进行缓存响应。
avp_db_query("select password, ha1 from subscriber where username='$tu'",
"$avp(678);$avp(679)");
http://www.opensips.org/html/docs/modules/1.7.x/avpops.html#id293960
肯定你也有PIKE和DDoS保护,因为db可以做更少的sql查询然后kamailio和/或攻击工具,如SIPP / SIPSack。这会降低你的数据库并且难以恢复。