您當(dāng)前的位置是:  首頁(yè) > 新聞 > 國(guó)內(nèi) >
 首頁(yè) > 新聞 > 國(guó)內(nèi) >

kamailio/OpenSIPS 學(xué)習(xí)筆記-如何實(shí)現(xiàn)IPPBX均衡負(fù)載

2018-05-03 10:00:32   作者:james.zhu    來(lái)源:Asterisk開(kāi)源派   評(píng)論:0  點(diǎn)擊:


  IPPBX的目前企業(yè)通信中最為常用的通信設(shè)備,IPPBX負(fù)責(zé)整個(gè)企業(yè)內(nèi)部呼叫和呼入呼出等相關(guān)的通信功能。很多企業(yè)IPPBX支持了云的安裝部署方式。如果作企業(yè)IPPBX的運(yùn)營(yíng),運(yùn)營(yíng)商平臺(tái)必須可以實(shí)現(xiàn)多個(gè)企業(yè)IPPBX的均衡負(fù)載,保證IPPBX的正常工作。開(kāi)源軟交換OpenSIPS或kamailio就可以幫助運(yùn)營(yíng)商針對(duì)IPPBX做均衡負(fù)載。本次分享重點(diǎn)介紹如何使用OpenSIPS結(jié)合IPPBX實(shí)現(xiàn)多臺(tái)IPPBX的均衡負(fù)載。
  1、在本次分享中,測(cè)試環(huán)境包括:opensips支持dispatch 和 balancer 模塊,兩臺(tái)完全一樣的IPPBX和相同的用戶(hù)賬號(hào)和密碼。注冊(cè)用戶(hù)可以同時(shí)注冊(cè)到兩臺(tái)IPPBX(Asterisk,FreePBX或者FreeSWITCH都可以實(shí)現(xiàn)),另外,如果對(duì)PSTN進(jìn)行呼叫的話(huà)(必須支持PSTN的接入設(shè)備),呼叫則會(huì)根據(jù)均衡負(fù)載規(guī)則調(diào)度到不同的IPPBX。
  2、在測(cè)試呼叫之前,我們首先配置腳本文件和界面配置。首先,需要在cfg文件中,加載dispatcher和均衡負(fù)載模塊:
  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") # 修改到相應(yīng)的用戶(hù)密碼modparam("load_balancer", "probing_method", "OPTIONS")modparam("load_balancer", "probing_interval", 30)
  添加調(diào)度注冊(cè)機(jī)制:
  使用調(diào)度注冊(cè)請(qǐng)求檢測(cè)if(is_method("REGISTER")) {if (!ds_select_dst("1", "2","f")) { # 強(qiáng)制使用了 To-URIsl_send_reply("500","No route to PBX");exit;}
  xlog("--- destination selected $du \n");t_on_failure("REGISTER_FAILOVER");route(RELAY);}
  # 調(diào)度注冊(cè)請(qǐng)求結(jié)束if ($rU==NULL) {# request with no Username in RURIsl_send_reply("484","Address Incomplete");exit;}
  # 添加對(duì)其他請(qǐng)求的均衡負(fù)載處理if ( !load_balance("1","channel")) {send_reply("500","No Destination available");exit;}
  t_on_failure("GW_FAILOVER");
  # 請(qǐng)求路由失敗的管理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");}
  }
  然后,通過(guò)界面添加均衡負(fù)載設(shè)置:
  最后,通過(guò)界面添加dispatch的模塊設(shè)置:
  3、如果以上配置環(huán)境配置成功的話(huà),用戶(hù)可以分別進(jìn)行以下測(cè)試:
  • 使用軟電話(huà)呼叫任意一個(gè)號(hào)碼,例如186XXXX。此時(shí),第一個(gè)呼叫會(huì)路由到第一個(gè)IPPBX出局。因?yàn)槲覀兪菧y(cè)試環(huán)境,IPPBX可以設(shè)置一個(gè)語(yǔ)音提示,對(duì)呼入的呼叫播放語(yǔ)音,提示用戶(hù)已經(jīng)呼入到第一個(gè)IPPBX。
  • 置于此呼叫為等待狀態(tài),使用另外的軟電話(huà)呼叫同樣的號(hào)碼,如果配置成功的話(huà),呼叫會(huì)進(jìn)入到第二臺(tái)IPPBX,第二臺(tái)IPPBX播放另外不同的語(yǔ)音提示。
  • 用戶(hù)也可以使用不同的軟電話(huà)分別進(jìn)行注冊(cè)和重新注冊(cè)測(cè)試,用戶(hù)通過(guò)sngrep來(lái)檢測(cè)注冊(cè)的IP地址。如果配置成功的話(huà),用戶(hù)可能會(huì)發(fā)現(xiàn),重新注冊(cè)流程總是注冊(cè)到被同一個(gè)軟電話(huà)終端注冊(cè)過(guò)的服務(wù)器。
  這里的測(cè)試環(huán)境相對(duì)比較簡(jiǎn)單,我們僅通過(guò)此示例提供了均衡負(fù)載的思路和一個(gè)簡(jiǎn)單的配置環(huán)境。當(dāng)然,如果用戶(hù)需要做運(yùn)營(yíng)級(jí)的產(chǎn)品,可能還要考慮很多非常有挑戰(zhàn)性的因素,這些因素包括:
  • 如何使用虛擬IP地址做路由處理。
  • 如何設(shè)置心跳來(lái)判斷IPPBX是否正常工作。
  • 如何設(shè)置號(hào)碼路由呼叫不同的落地資源。
  • 如何保證呼叫接通狀態(tài)?因?yàn)檫@里的loadbanlance是無(wú)狀態(tài)設(shè)置模式(stateless),必須保證用戶(hù)可以路由到可工作的IPPBX。
  • 如何實(shí)現(xiàn)注冊(cè)數(shù)據(jù)庫(kù)和用戶(hù)的數(shù)據(jù)同步設(shè)置。
  • 是否考慮使用最新的OpenSIPS cluster 模塊來(lái)進(jìn)行設(shè)置。
  • PSTN 接入設(shè)備的逃生處理。
  4、在以上的分享中,我們首先介紹了實(shí)現(xiàn)此測(cè)試需要的環(huán)境,然后介紹了cfg文件配置和相應(yīng)的界面配置(添加loadbalance和dispatch模塊)。最后,根據(jù)配置環(huán)境,用戶(hù)分別使用軟電話(huà)實(shí)現(xiàn)對(duì)其兩臺(tái)IPPBX的呼叫測(cè)試。兩臺(tái)IPPBX通過(guò)軟交換的均衡負(fù)載設(shè)置對(duì)呼叫進(jìn)行了不同的路由管理設(shè)置,然后進(jìn)入到IPPBX,對(duì)終端播放一個(gè)語(yǔ)音提示。最后,如果用戶(hù)需要部署真正的生產(chǎn)環(huán)境時(shí)需要考慮的幾個(gè)因素。
  參考資料:
  http://www.kamailio.org.cn/doku.php?id=dispatcher_dispatcher_load-balancer_module_released
  http://wiki.kolmisoft.com/index.php/Implementations


  關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的行業(yè)分享
  freepbx 技術(shù)論壇:www.ippbx.org.cn
  Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
  歐米(Omni)智能客服解決方案
  融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com

【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

專(zhuān)題