• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 資訊 > 文章精選 >
     首頁(yè) > 資訊 > 文章精選 >

    OpenSIPS學(xué)習筆記-cluster集群模塊配置-dialog集群機制設置-集群節點(diǎn)環(huán)境配置示例-2

    2021-03-18 10:22:17   作者:james.zhu    來(lái)源:Asterisk開(kāi)源派   評論:0  點(diǎn)擊:


      在上一個(gè)章節,筆者介紹了集群注冊的基本配置方式和各種機制的優(yōu)缺點(diǎn)。本章節中,筆者將進(jìn)一步介紹關(guān)于OpenSIPS集群支持的另外一種常見(jiàn)的場(chǎng)景-dialog的集群。dialog集群是OpenSIPS在高并發(fā)環(huán)境中一定需要考慮的配置功能。通過(guò)集群部署方式,可以保證呼叫中的dialog能夠正確處理完成。
      除了介紹dialog集群以外,筆者將介紹如何配置OpenSIPS集群機制,通過(guò)集群注冊的部署來(lái)演示集群的環(huán)境,并且最后介紹幾個(gè)集群CLI 命令。
      1關(guān)于OpenSIPS的dialog集群背景介紹
      大家可能都知道,OpenSIPS的dialog模塊在SIP呼叫中起著(zhù)非常重要的作用,各種應用場(chǎng)景都需要dialog支持,例如計費,呼叫控制,超時(shí)設置等。如果呼叫在處理過(guò)程中出現故障的話(huà),顯然,這些應用場(chǎng)景也不能得到保障。為了在高并發(fā)或者大規模部署中保證dialog的數據處理的穩定性,OpenSIPS支持了對dialog的集群設置。集群的節點(diǎn)通過(guò)tag并且來(lái)共享一些業(yè)務(wù)層面的要求,例如,在節點(diǎn)中,如果呼叫完成后,哪個(gè)節點(diǎn)處理了BYE請求, 在集群中,哪個(gè)節點(diǎn)生成CDR 呼叫建立等。這些數據不可能在全部節點(diǎn)都在同一時(shí)間進(jìn)行各自處理,必須有一個(gè)節點(diǎn)服務(wù)器進(jìn)行處理。
      2OpenSIPS中Dialog集群的基本思路
      和對注冊集群的部署來(lái)說(shuō),dialog的集群相對比較簡(jiǎn)單。其中部分設置的思路是相同的。完整細節的配置說(shuō)明,讀者可以參考官方文檔,這里僅為了后續部分章節中的內容支持,這里重點(diǎn)強調一些主要的知識點(diǎn):
    • 在復制集群環(huán)境中,所有的節點(diǎn)被組成一個(gè)組,在同樣的集群中使用anycast方式進(jìn)行廣播(非其他cast方式),關(guān)于其他cast方式的不同,讀者參考網(wǎng)絡(luò )資料。
    • 所有dialog數據在整個(gè)cluster中進(jìn)行復制處理
    • 通過(guò)BIN 協(xié)議復制數據
    • 集群中的所有節點(diǎn)共享同一IP地址
    • 通過(guò)dialog的更新來(lái)實(shí)現節點(diǎn)數據的交互,例如,執行了re-ininvite等流程。
      dialog集群部署方式同時(shí)使用了一個(gè)tag 標簽的形式,通過(guò)對節點(diǎn)標識標簽的方式實(shí)現dialog節點(diǎn)的集群備份(HA)設置。另外,為了實(shí)現對呼叫的某些業(yè)務(wù)數據的共享,通過(guò)集群引擎,在dialog集群使用了共享profile的方式來(lái)實(shí)現集群文件共享。每個(gè)節點(diǎn)廣播自己的共享profile文件,無(wú)需外部數據庫支持。接下來(lái)的幾個(gè)章節中,筆者將進(jìn)一步介紹dialog標簽在集群部署時(shí)代使用,節點(diǎn)共享dialog profile實(shí)現dialog 數據的同步共享。
      3OpenSIPS環(huán)境中dialog集群的tag標簽說(shuō)明
      筆者在前面很多文章中已經(jīng)講過(guò),dialog是跟蹤呼叫的手段。在呼叫過(guò)程中,dialog可以跟蹤呼叫時(shí)長(cháng),CDR計費統計,請求處理等狀態(tài)。讀者可以先閱讀以下文章:
      OpenSIPS學(xué)習筆記-Dialog的五種狀態(tài)及配置示例
      dialog的tag標簽是OpenSIPS中對節點(diǎn)業(yè)務(wù)進(jìn)行管理的一個(gè)手段。在OpenSIPS的環(huán)境中,集群節點(diǎn)需要通過(guò)一定的標識來(lái)對業(yè)務(wù)流程中某些特定的流程做出標識處理,dialog上添加一個(gè) tag標簽對邏輯進(jìn)行標識是一個(gè)比較好的方法。具體來(lái)說(shuō),dialog tag標簽具有以下幾個(gè)方面的特征:
    • 每個(gè)dialog指定到一個(gè)tag標簽
    • 每個(gè)節點(diǎn)能夠意識到所有被使用的tag標簽
      一個(gè)活動(dòng)的節點(diǎn)實(shí)例僅支持一個(gè)特定tag標簽,活動(dòng)的實(shí)例處理dialog的ping廣播消息,dialog的生命周期管理
      如果一個(gè)活動(dòng)的節點(diǎn)出現故障以后,備用節點(diǎn)將會(huì )啟動(dòng)來(lái)繼續為標識的tag服務(wù)。這里將需要一個(gè)高可靠性處理,通過(guò)主備方式進(jìn)行HA的處理。tag的狀態(tài)將會(huì )遷移到另外一個(gè)備用的節點(diǎn)上。注意,一個(gè)節點(diǎn)可以支持多個(gè)活動(dòng)的tag標簽來(lái)支持多種業(yè)務(wù)需求。
      dialog 標簽的語(yǔ)法設置相對比較簡(jiǎn)單,示例如下:
      loadmodule "dialog.so'
      modparam("dialog", "dialog replication cluster", 1)
      modparam("clusterer", "sharing tag", "vip=active")  // 另外一個(gè)做passive
      {
      create dialog();
      set_dlg_sharing_tag("vip");
      }
      具體關(guān)于OpenSIPS dialog 集群HA的處理示例。節點(diǎn)需要通過(guò)一個(gè)主從備份的方式,通過(guò)tag標簽對呼叫業(yè)務(wù)中的特定流程進(jìn)行跟蹤處理。節點(diǎn)雙方互相標識。基本的處理思路如下圖例:
     
      此圖例以及以下圖例均來(lái)自于互聯(lián)網(wǎng)資源
      在以上示例中,呼叫可能通過(guò)幾個(gè)不同的節點(diǎn)來(lái)處理每個(gè)呼叫具體的流程,因此,各個(gè)節點(diǎn)的tag需要對其具體流程進(jìn)行跟蹤來(lái)監控一個(gè)完整的呼叫記錄和CDR。為了保證你呼叫的流程的完整性,所有的dialog,包括后續請求的dialog都要通過(guò)具體的標簽做記錄備份,最后,所有節點(diǎn)共享dialog 文件數據。如果丟失了ACK 請求的dialog記錄信息或者BYE的消息,系統就會(huì )丟失完整的CDR記錄,當然也不可能繼續在此記錄上做計費的功能。
      4OpenSIPS中dialog集群的dialog profile討論
      在分布式部署的OpenSIPS 平臺的呼叫環(huán)境中,因為負載均衡或者其他的業(yè)務(wù)要求的需要,一個(gè)SIP呼叫可能通過(guò)不同的路徑節點(diǎn)來(lái)實(shí)現。特別涉及到一些計費功能時(shí),或者一些對呼叫數量有限制的場(chǎng)景中,dialog profile 也需要通過(guò)節點(diǎn)共享dialog profile,通過(guò)profile來(lái)限定一些服務(wù)要求。通過(guò)集群部署共享dialog profile是非常必要的。和注冊集群的方式不同,注冊集群需要數據庫的處理來(lái)協(xié)同共享數據,但是,dialog profile 共享無(wú)需其他的外部資源,它僅需要OpenSIPS 集群模塊引擎和BIN 響應來(lái)完成。通過(guò)集群方式共享Dialog profile有以下幾個(gè)方面的特點(diǎn):
    • 通過(guò)集群引擎可以共享 profile的meta data數據
    • dialog 文件復制各自獨立
    • 無(wú)需要求外部數據庫引擎中存儲處理
    • 依賴(lài)BIN 協(xié)議配合工作
    • 每個(gè)節點(diǎn)僅廣播屬于自己的profile size
    • 每個(gè)節點(diǎn)通過(guò)收到的prifile總值介紹所有的size
    • 無(wú)需擔心節點(diǎn)故障
    • 架構設計相對比較輕,相對比較有更高的效率
      dialog profile 設置語(yǔ)法如下:
      loadmodule "dialog.so"
      modparam("dialog', "profile replication cluster", 2)
      # 這里 b表示BIN 協(xié)議,也可以是s, 表示shared  通過(guò)noSQL 數據庫處理
      modparam("dialog""profiles no value", "all calls/b")
      create_dialog();
      set_dis_profile("all_call/b") # /b使用方式同上
      5OpenSIPS環(huán)境下集群注冊的配置
      集群部署是一個(gè)非常復雜的環(huán)境。在配置集群環(huán)境前,讀者需要首先明確測試環(huán)境的配置和核心配置文件,還有節點(diǎn)之間的網(wǎng)絡(luò )環(huán)境。特別是節點(diǎn)之間的網(wǎng)絡(luò )需要保證都能夠互相通信,相關(guān)的端口和安全策略必須一致。如果在基于云平臺測試環(huán)境中,用戶(hù)最好把所有的節點(diǎn)都部署在同一區域,保證你內網(wǎng)可以互通,而且安全策略可以互相信任。
      因為資源能力有限,相對于生產(chǎn)環(huán)境,筆者的測試環(huán)境僅限于一個(gè)集群平臺,支持3-5個(gè)節點(diǎn)的互通。為了實(shí)現簡(jiǎn)單配置,筆者使用的是靜態(tài)配置方式,通過(guò)界面數據庫設置節點(diǎn)數據,而不是通過(guò)動(dòng)態(tài)加載節點(diǎn)的方式來(lái)實(shí)現的,所以我們需要預設好所有的節點(diǎn),假設節點(diǎn)環(huán)境配置和我們操作的節點(diǎn)數據,環(huán)境,安全策略都是相同的,并且能夠正常共享數據庫數據。
      首先,我們需要通過(guò)OpenSIPS 控制界面,添加集群節點(diǎn)數據,添加到主要參數包括:Cluster ID,Node ID,BIN URL和端口5555,SIP地址和具體節點(diǎn)描述信息。如果未安裝OpenSIPS GUI的話(huà),用戶(hù)需要首先成功安裝好GUI控制界面。特別提醒,筆者僅說(shuō)明一個(gè)節點(diǎn)的配置,其他節點(diǎn)的配置也需要完全一致設置為我們示例的配置,但是一定要注意自己的node id和其他鄰居節點(diǎn)的節點(diǎn)的地址和id的不同。
      通過(guò)控制界面添加了節點(diǎn)以后,然后修改cfg 配置文件,加載必要的集群引擎,數據庫和BIN 協(xié)議配置:
    • loadmodule "clusterer.so"
    • modparam("clusterer", "my_node_id", __NODE_ID__)  # 主要自己的ID
    • modparam("clusterer", "db_mode", 1)
    • modparam("clusterer", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
      加載BIN 協(xié)議配置:
    • loadmodule "proto_bin.so"
    • listen = bin:eth0:5555 # 用戶(hù)也可以監聽(tīng)IP地址
      添加以上必要設置以后,集群引擎停止,這里,一定要保證所有的節點(diǎn)的OpenSIPS能夠停止,然后所有節點(diǎn)保證同步好所有數據以后,再重新開(kāi)啟。用戶(hù)必須對集群中的各個(gè)節點(diǎn)需要做多次測試,保證數據庫可以同步,保證BIN監控正常。經(jīng)過(guò)一段時(shí)間的測試,各個(gè)節點(diǎn)數據能夠正常以后,我們才能進(jìn)行其他注冊等業(yè)務(wù)功能的測試。如果節點(diǎn)之間都能夠同步,集群服務(wù)器可以正常工作的話(huà),用戶(hù)可以通過(guò)集群命令看到其他節點(diǎn)的數據狀態(tài),其中一個(gè)節點(diǎn)執行以下命令,可以看到節點(diǎn)列表:
    • opensips-cli -x mi clusterer_list
    • opensips-cli -x mi clusterer_list_topology
      
      最后,如果所有節點(diǎn)可以正常通信以后,用戶(hù)可以測試節點(diǎn)之間的連通性。具體測試方式很多,用戶(hù)可以在本地通過(guò)防火墻命令過(guò)濾某個(gè)節點(diǎn)的IP(例如:ufw insert 1 allow from 節點(diǎn)IP to any),然后再通過(guò)以上命令查看這些節點(diǎn)的狀態(tài),然后在關(guān)閉過(guò)濾的節點(diǎn)地址重新檢查所有節點(diǎn)狀態(tài)。全部完成以上所有的節點(diǎn)的測試以后,我們才能繼續進(jìn)行下一步的全共享集群注冊的配置示例操作。
      完成以上配置以后,筆者將在后續章節具體介紹如何配置集群注冊示例(包括full sharing, federation 和no SQL配置),共享dialog profile配置示例,安裝配置mongodb實(shí)現以上功能。
      6總結
      在本文章中筆者介紹了關(guān)于dialog 和dialog profile共享的配置處理流程。在對集群dialog的設置部署中,筆者介紹了dialog的HA設置方式和標簽tag的設置,針對呼叫流程中不同的業(yè)務(wù)做標識處理,通過(guò)tag實(shí)現對節點(diǎn)呼叫的完整監控。另外,筆者也介紹了關(guān)于集群場(chǎng)景配置的非常重要的流程,包括基本的集群配置,節點(diǎn)配置和控制界面對節點(diǎn)的設置,然后介紹了通過(guò)防火墻過(guò)濾等手段如何對節點(diǎn)故障的測試。
      再次說(shuō)明,筆者測試的集群節點(diǎn)必須都需要同步同一的配置場(chǎng)景,包括網(wǎng)絡(luò )環(huán)境,安全策略和端口等狀態(tài)都需要完全一致。在保證節點(diǎn)環(huán)境相同的情況下,我們才能繼續進(jìn)行集群注冊部署配置和dialog profile共享配置的流程。另外,筆者測試環(huán)境相對簡(jiǎn)單,在生產(chǎn)環(huán)境中,可能很多用戶(hù)需要根據自己的場(chǎng)景中一定的調整,筆者僅是拋磚引玉,希望讀者對OpenSIPS的集群部署有一個(gè)完整清晰的概念,集群部署中涉及的太多細節需要通過(guò)不斷實(shí)踐才能完成。
      參考資料:
      https://opensips.org/html/docs/modules/2.4.x/clusterer.html
      https://www.researchgate.net/publication/261427896_Secure_cluster-based_SIP_service_over_Ad_hoc_networks/link/549dbcce0cf2fedbc31198cb/download
      https://blog.opensips.org/2018/03/23/clustering-ongoing-calls-with-opensips-2-4/
      www.freesbc.cn
      關(guān)于A(yíng)sterisk文檔,參考:www.asterisk.org.cn
    • 融合通信/IPPBX/FreePBX商業(yè)解決方案:www.hiastar.com
    • 最新Asterisk完整中文用戶(hù)手冊詳解:www.asterisk.org.cn
    • Freepbx/FreeSBC技術(shù)文檔: www.freepbx.org.cn
    • 如何使用免費會(huì )話(huà)邊界控制器-FreeSBC,qq技術(shù)分享群:334023047
    • 關(guān)注微信公眾號:asterisk-cn,獲得有價(jià)值的通信行業(yè)技術(shù)分享
    【免責聲明】本文僅代表作者本人觀(guān)點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對文中陳述、觀(guān)點(diǎn)判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

    相關(guān)閱讀:

    專(zhuān)題

    CTI論壇會(huì )員企業(yè)

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 泸水县| 渑池县| 平阴县| 潜江市| 尤溪县| 贵州省| 山西省| 南平市| 西平县| 中江县| 江口县| 大新县| 永顺县| 新兴县| 沅江市| 庆城县| 德令哈市| 新乐市| 榆树市| 阜康市| 资中县| 三门峡市| 门头沟区| 德昌县| 交口县| 南部县| 平山县| 周宁县| 大方县| 清涧县| 开原市| 贵定县| 甘洛县| 宜兴市| 蕲春县| 永德县| 射洪县| 仙桃市| 茌平县| 抚州市| 东台市| http://444 http://444 http://444 http://444 http://444 http://444