我的设想是:
sip中继连接到kamailio服务器,kamailio服务器在本地连接到多个星号服务器,并应在这些星号服务器之间进行负载平衡调用。怎样?kamailio服务器中有一个mysql数据库表,它将传入呼叫的sip报头的TO
部分映射到星号的一个ip。
kamailio应该读取sip头并在数据库中搜索,在获得ip后,将调用转发到适当的星号服务器。
例如,传入sip报头中的值To
是123456
所以kamailio会查询数据库,并找到123456
在192.168.1.10
中的数字,所以应该将调用转发到服务器192.168.1.10
。
我已经阅读了多篇文章和Kamailio在其网站上的帮助,但找不到与此场景相关的任何内容。
有人知道如何在kamailio.cfg中编写路由吗?
最佳答案
有一些方法可以做到这一点。其中之一是使用dispatcher模块。
该模块提供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);
请确保为Dispatcher模块指定列表文件:
loadmodule "dispatcher.so"
modparam("dispatcher", "list_file", "/var/run/kamailio/dispatcher.list")
如果要使用数据库而不是文件,可以通过指定数据库来执行此操作:
modparam("dispatcher", "db_url", "mysql://user:passwb@localhost/database")
此外,还有其他参数用于指定数据库表等。
您可以在kamailio dispatcher documentation中阅读更多内容。
关于database - Kamailio:如何根据IP地址在多个Asterisk服务器之间实现负载均衡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48627262/