您当前的位置是:  首页 > 新闻 > 国内 >
 首页 > 新闻 > 国内 >

kamailio/OpenSIPS 学习笔记-如何实现IPPBX均衡负载

2018-05-03 10:00:32   作者:james.zhu    来源:Asterisk开源派   评论:0  点击:


  IPPBX的目前企业通信中最为常用的通信设备,IPPBX负责整个企业内部呼叫和呼入呼出等相关的通信功能。很多企业IPPBX支持了云的安装部署方式。如果作企业IPPBX的运营,运营商平台必须可以实现多个企业IPPBX的均衡负载,保证IPPBX的正常工作。开源软交换OpenSIPS或kamailio就可以帮助运营商针对IPPBX做均衡负载。本次分享重点介绍如何使用OpenSIPS结合IPPBX实现多台IPPBX的均衡负载。
  1、在本次分享中,测试环境包括:opensips支持dispatch 和 balancer 模块,两台完全一样的IPPBX和相同的用户账号和密码。注册用户可以同时注册到两台IPPBX(Asterisk,FreePBX或者FreeSWITCH都可以实现),另外,如果对PSTN进行呼叫的话(必须支持PSTN的接入设备),呼叫则会根据均衡负载规则调度到不同的IPPBX。
  2、在测试呼叫之前,我们首先配置脚本文件和界面配置。首先,需要在cfg文件中,加载dispatcher和均衡负载模块:
  loadmodule "dispatcher.so"modparam("dispatcher","db_url","mysql://opensips:opensipsrw@localhost/opensips")modparam("dispatcher","dst_avp","$avp(1)")modparam("dispatcher","grp_avp","$avp(2)")modparam("dispatcher","cnt_avp","$avp(3)")
  加载loadbalance 模块:
  loadmodule "load_balancer.so"modparam("load_balancer", "db_url","mysql://opensips:opensipsrw@localhost/opensips") # 修改到相应的用户密码modparam("load_balancer", "probing_method", "OPTIONS")modparam("load_balancer", "probing_interval", 30)
  添加调度注册机制:
  使用调度注册请求检测if(is_method("REGISTER")) {if (!ds_select_dst("1", "2","f")) { # 强制使用了 To-URIsl_send_reply("500","No route to PBX");exit;}
  xlog("--- destination selected $du \n");t_on_failure("REGISTER_FAILOVER");route(RELAY);}
  # 调度注册请求结束if ($rU==NULL) {# request with no Username in RURIsl_send_reply("484","Address Incomplete");exit;}
  # 添加对其他请求的均衡负载处理if ( !load_balance("1","channel")) {send_reply("500","No Destination available");exit;}
  t_on_failure("GW_FAILOVER");
  # 请求路由失败的管理failure_route[GW_FAILOVER] {if (t_was_cancelled()) {exit;}
  # failure detection with redirect to next available trunkif (t_check_status("(408)|([56][0-9][0-9])")) {xlog("Failed trunk $rd/$du detected \n");if ( load_balance("1","channel") ) {t_on_failure("GW_FAILOVER");t_relay();exit;}
  send_reply("500","All GW are down");}
  }
  然后,通过界面添加均衡负载设置:
  最后,通过界面添加dispatch的模块设置:
  3、如果以上配置环境配置成功的话,用户可以分别进行以下测试:
  • 使用软电话呼叫任意一个号码,例如186XXXX。此时,第一个呼叫会路由到第一个IPPBX出局。因为我们是测试环境,IPPBX可以设置一个语音提示,对呼入的呼叫播放语音,提示用户已经呼入到第一个IPPBX。
  • 置于此呼叫为等待状态,使用另外的软电话呼叫同样的号码,如果配置成功的话,呼叫会进入到第二台IPPBX,第二台IPPBX播放另外不同的语音提示。
  • 用户也可以使用不同的软电话分别进行注册和重新注册测试,用户通过sngrep来检测注册的IP地址。如果配置成功的话,用户可能会发现,重新注册流程总是注册到被同一个软电话终端注册过的服务器。
  这里的测试环境相对比较简单,我们仅通过此示例提供了均衡负载的思路和一个简单的配置环境。当然,如果用户需要做运营级的产品,可能还要考虑很多非常有挑战性的因素,这些因素包括:
  • 如何使用虚拟IP地址做路由处理。
  • 如何设置心跳来判断IPPBX是否正常工作。
  • 如何设置号码路由呼叫不同的落地资源。
  • 如何保证呼叫接通状态?因为这里的loadbanlance是无状态设置模式(stateless),必须保证用户可以路由到可工作的IPPBX。
  • 如何实现注册数据库和用户的数据同步设置。
  • 是否考虑使用最新的OpenSIPS cluster 模块来进行设置。
  • PSTN 接入设备的逃生处理。
  4、在以上的分享中,我们首先介绍了实现此测试需要的环境,然后介绍了cfg文件配置和相应的界面配置(添加loadbalance和dispatch模块)。最后,根据配置环境,用户分别使用软电话实现对其两台IPPBX的呼叫测试。两台IPPBX通过软交换的均衡负载设置对呼叫进行了不同的路由管理设置,然后进入到IPPBX,对终端播放一个语音提示。最后,如果用户需要部署真正的生产环境时需要考虑的几个因素。
  参考资料:
  http://www.kamailio.org.cn/doku.php?id=dispatcher_dispatcher_load-balancer_module_released
  http://wiki.kolmisoft.com/index.php/Implementations


  关注微信公众号:asterisk-cn,获得有价值的行业分享
  freepbx 技术论坛:www.ippbx.org.cn
  Asterisk, freepbx技术文档: www.freepbx.org.cn
  欧米(Omni)智能客服解决方案
  融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com

【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

专题