李成笔记网

专注域名、站长SEO知识分享与实战技巧

kamailio学习之负载配置(DISPATCH)

kamailio作为高性能的SIP负载服务器,拥有多种负载均衡算法满足不同的业务场景需要,本文将介绍kamailio作为负载均衡服务器的配置方法。

dispatch模块

kamailio负载通过dispatch模块实现,具体配置如下

  1. 编辑配置文件:/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
}
  1. 配置要负载的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”: 如果未实现该算法,则选择集合中的第一个条目
  1. 配置完毕加载路由
###### 查看当前已配置的路由信息
/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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言