如何使用负载平衡在Kamailio上创建简单的故障转移?

时间:2014-05-28 02:53:49

标签: kamailio

我的dispatcher.list文件中列出了3个位置。 2意味着彼此负载平衡。目前它完美地工作,因为日志显示呼叫在两个位置之间进行循环。

但是,我一直在浏览在线文档和示例,但无法弄清楚如何仅将第三个位置用作故障转移。

我对应该激活故障转移的故障的定义是:

  1. 目的地没有回复(已关闭)
  2. 来自目的地的任何失败回复
  3. 我们使用2个sip提供商。 1给我们2个中继负载平衡,第2个我们仅用于故障转移,以防第一个提供商出现故障或因任何原因无法路由呼叫。

    我觉得这是一个应该易于实现的常见问题,但我找不到允许我正确执行此操作的文档。

    这是我的Kamailio.cfg文件:我正在使用的配置文件是由其他人为我们使用的其他系统创建的。不确定它是否需要它所拥有的一切。

    # $Id: dispatcher.cfg,v 1.1 2004/08/10 16:51:36 dcm Exp $
    # sample config file for dispatcher module
    debug=2          # debug level (cmd line: -dddddddddd)
    #fork=yes
    fork=yes
    log_stderror=no  # (cmd line: -E)
    memdbg=5
    memlog=5
    log_facility=LOG_LOCAL0
    
    disable_tcp=yes
    children=4
    check_via=no      # (cmd. line: -v)
    dns=off           # (cmd. line: -r)
    rev_dns=off       # (cmd. line: -R)
    port=5060
    listen=udp:0.0.0.0:5060
    
    
    # ------------------ module loading ----------------------------------
    #mpath="modules_k:modules"
    mpath="/usr/local/lib64/kamailio/modules_k/:/usr/local/lib64/kamailio/modules/"
    loadmodule "tm.so"
    loadmodule "mi_fifo.so"
    loadmodule "sl.so"
    loadmodule "rr.so"
    loadmodule "pv.so"
    loadmodule "maxfwd.so"
    loadmodule "usrloc.so"
    loadmodule "textops.so"
    loadmodule "siputils.so"
    loadmodule "xlog.so"
    loadmodule "mi_rpc.so"
    loadmodule "dispatcher.so"
    loadmodule "ctl"
    
    # ----------------- setting module-specific parameters ---------------
    # ----- mi_fifo params -----
    modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
    # ----- rr params -----
    # add value to ;lr param to cope with most of the UAs
    modparam("rr", "enable_full_lr", 1)
    # do not append from tag to the RR (no need for this script)
    modparam("rr", "append_fromtag", 0)
    # ----------------- setting module-specific parameters ---------------
    # ----- tm params -----
    modparam("tm", "fr_timer", 2000)
    modparam("tm", "fr_inv_timer", 40000)
    # -- dispatcher params --
    modparam("dispatcher", "list_file", "/usr/local/etc/kamailio/dispatcher.list")
    modparam("dispatcher", "flags", 3)
    modparam("dispatcher", "dst_avp", "$avp(i:271)")
    modparam("dispatcher", "grp_avp", "$avp(i:272)")
    modparam("dispatcher", "cnt_avp", "$avp(i:273)")
    modparam("dispatcher", "ds_ping_method", "OPTIONS")
    modparam("dispatcher", "ds_ping_interval", 30)
    modparam("dispatcher", "ds_probing_mode", 1) 
    modparam("dispatcher", "ds_probing_threshhold", 3) 
    
    route{
        if ( !mf_process_maxfwd_header("10") )
        {
            sl_send_reply("483","To Many Hops");
            drop();
        };
    
        if (is_method("INVITE") || is_method("REGISTER")) {
            ds_select_domain("1", "4");
          sl_send_reply("100","Trying");
          forward();#uri:host, uri:port);
    
            xlog("L_INFO","Redirect response URL constructed:  $ru\n");
    
            sl_send_reply("302", "Moved Temporarily");
            exit;
        }
    }
    

    这是我的dispatcher.list文件:

    #Load Balance
    1 sip:1.1.1.1:5060 2
    1 sip:2.2.2.2:5060 2
    
    #Fail Over if the above can't be used
    2 sip:3.3.3.3:5060 2
    

1 个答案:

答案 0 :(得分:3)

将第三个网关添加为组“1”中的最后一行,并为调度程序模块设置参数use_default:

  

use_default int

     

如果参数设置为1,则目标集中的最后一个地址将用作发送请求的最终选项。例如,当想要将呼叫发送到anouncement服务器时,它非常有用:“网关已满,请稍后再试”。

     

默认值为“0”。

     

例如 modparam("dispatcher", "use_default", 1) in kamailio.cfg

Source