kamailio作为高性能的SIP负载服务器,拥有多种负载均衡算法满足不同的业务场景需要,本文将介绍kamailio作为负载均衡服务器的配置方法。
dispatch模块
kamailio负载通过dispatch模块实现,具体配置如下
- 编辑配置文件:/user/local/kamailio-5.6.1/etc/kamailio/kamailio.cfg
####### 头部添加
#!define WITH_DISPATCH
###### 在Modules Section 最后添加
#!ifdef WITH_DISPATCH
loadmodule "dispatcher.so"
#!endifdisable_tcp=no
###### 绑定监听
listen=udp:x.x.x.x:5060
listen=tcp:x.x.x.x:5060
###### 在 setting module-specific parameters 最后添加。数据库或配置文件方式二选一
#!ifdef WITH_DISPATCH
###### 数据库配置方式
modparam("dispatcher", "db_url", DBURL)
modparam("dispatcher", "table_name", "dispatcher")
###### 配置文件方式
modparam("dispatcher", "list_file", "/usr/local/kamailio/kamailio-5.6.1/etc/kamailio/dispatcher.list")
modparam("dispatcher", "force_dst", 1)
#!endif
###### 在 Routing Logic 最后添加
request_route{
....
route(PSTN);
route(DISPATCH);
....
}
###### 在配置文件末尾添加
route[DISPATCH] {
#!ifdef WITH_DISPATCH
# round robin dispatching on gateways group '1'
if(!ds_select_dst("0", "0")) {
send_reply("404", "No destination");
exit;
}
t_on_failure("RTF_DISPATCH");
route(RELAY);
exit;
#!endif
}
# Try next destionations in failure route
failure_route[RTF_DISPATCH] {
#!ifdef WITH_DISPATCH
if (t_is_canceled()) {
exit;
}
# next DST - only for 500 or local timeout
if (t_check_status("500")
or (t_branch_timeout() and !t_branch_replied())) {
if(ds_next_dst()) {
t_on_failure("RTF_DISPATCH");
route(RELAY);
exit;
}
}
#!endif
}
- 配置要负载的sip服务器
###### 若使用数据库方式
insert into dispatcher(id,setid,destination,priority,flags,description)
values(5,0,'sip:192.168.1.8:5060', 1, 0, 'fs1');
insert into dispatcher(id,setid,destination,priority,flags,description)
values(6,0,'sip:192.168.1.9:5060', 1, 0, 'fs2');
###### 若采用配置文件方式 则新建/usr/local/kamailio/kamailio-5.6.1/etc/kamailio/dispatcher.list文件,并填充以下数据
# line format
# setid(int) destination(sip uri) flags(int,opt) priority(int,opt) attributes(str,opt)
0 sip:192.168.1.8:5060
0 sip:192.168.1.9:5060
其中:setid 代表一组sip服务器,与ds_select_dst(param1,param2)中第一个参数对应,转发时将根据param2 负载算法进行转发,负载算法如下:
用于选择目标地址的算法(接受变量):
“0”: 在callid上哈希
“1”:在“from uri“上哈希
“2”: 在“to uri“上哈希
“3”:在“request uri”上哈希
“4”:加权轮询(下一个目的地)
“5”:通过授权用 户名( authorization-username )哈希
“6”:随机(使用rand())
“7”: 哈希 PVs字符串的内容。注意:仅当设置参数hash_pvar时,此方法才有效。
“8”: 选择集合中的第一个条目
“9”: pvar_algo_pattern参数用于确定每个服务器上的负载。如果未指定参数,则选择集合中的第
一个条目
“X”: 如果未实现该算法,则选择集合中的第一个条目
- 配置完毕加载路由
###### 查看当前已配置的路由信息
/usr/local/kamailio-5.6.1/sbin/kamailio dispatcher show
###### 查看当前已加载的路由信息
/usr/local/kamailio-5.6.1/sbin/kamailio dispatcher dump
###### 重新加载路由信息
/usr/local/kamailio-5.6.1/sbin/kamailio dispatcher reload