opensips的dispatcher模塊筆記

操作系統 :CentOS 7.6_x64

opensips版本:2.4.9

dispatcher模塊模塊實現了基於目的地址的調度功能,可用作無狀態負載均衡,但不能保證均勻分配。今天整理下CentOS7環境下opensips2.4.9的dispatcher模塊使用示例,並提供運行效果視頻。

我將從以下幾方面進行展開:

  • 模塊數據庫說明

  • 模塊參數說明

  • 模塊函數說明

  • 模塊使用示例

dispatcher模塊官方文檔:https://opensips.org/docs/modules/2.4.x/dispatcher.html

 

一、模塊數據庫說明

數據表:dispatcher

這裏大概列舉下字段說明,具體信息參考官方文檔:

https://www.opensips.org/Documentation/Install-DBSchema-2-4#GEN-DB-DISPATCHER

 

字段說明:

  • setid
    目的地址的id值,相同setid可以由多個地址,具體選擇那個地址可根據設定的算法進行選擇。

  • destination
    目的地址,示例:
    sip:192.168.1.100:5060

  • socket
    本地用來發送探測包(options或info)的socket地址,必須是opensips已綁定的地址。
    比如opensip地址是 192.168.1.101 ,這裏的socket可以是:
    udp:192.168.1.101:5060
    tcp:192.168.1.101:5060

  • state
    對目的地的狀態檢測結果
    0 可用
    1 不可用
    2 檢測中

  • weight
    權重。

  • priority
    優先級。

  • attrs
    可理解爲自定義標籤。

  • description
    描述信息,可用來備註該條目的用途。

二、模塊參數說明

這裏列舉下常用參數,完整內容參考官方文檔。

模塊文件:dispatcher.so
模塊參數如下:

  • partition
    分區,用於定義數據源。

  • table_name
    用於設置數據表,默認是 dispatcher 表。

  • db_url
    用於設置數據庫連接信息。

  • ds_probing_mode
    探測模式,定義如下:
    0 :僅檢查處於探測中的網關
    1 :檢查所有網關

  • ds_ping_interval
    ping的間隔,默認是0秒(關閉ping)。

  • ds_ping_method
    ping方法,默認是發 OPTIONS 包,可以配置爲發 INFO 包:
    modparam("dispatcher", "ds_ping_method", "INFO")

  • ds_ping_from
    sip消息的from頭

  • ds_ping_maxfwd
    ping消息的最大轉發次數。

  • ds_probing_threshhold
    從可用狀態到探測中,需要連續檢查的次數,默認值爲3次。

此外還有設置各個列名的參數,可根據實際情況使用。

模塊加載及配置數據庫
文件:opensips.cfg

配置示例可從如下渠道獲取:

關注微信公衆號(聊聊博文,文末可掃碼)後回覆 20240327 獲取。

三、函數說明

這裏列下常用的ds_select_dst函數,其它函數參考官方文檔。

ds_select_dst(set, alg [, (flags M max_results)*])

該函數從給定的集合中選取一條路由,會重寫sip的目的地址,在opensips內部則體現爲重新 $du

  • set
    集合id,對應數據庫中的setid字段。

  • alg
    目的地址選擇算法,同一個setid下有多條記錄時適用。
    部分算法說明(更多說明參考官方文檔):
    0 :根據callid的哈希值
    1 :根據from uri的哈希值
    2 :根據to uri的哈希值
    3 :根據request uri的哈希值
    4 :帶權重的輪詢
    5 :根據authorization-username的哈希值
    6 :隨機算法

函數使用示例可從如下渠道獲取:

關注微信公衆號(聊聊博文,文末可掃碼)後回覆 20240327 獲取。

四、使用示例

這裏演示下dispatcher模塊的加載,及使用該模塊實現話務調度的功能。

機器列表:

freeswitchA :192.168.137.31:5080
opensips :192.168.137.33:5060
freeswitchB :192.168.137.32:5080

測試目標:
將freeeswitchA呼叫opensips的通話路由到freeswitchB機器。

1、數據庫配置

數據表:dispatcher

將1001這個組的呼叫路由到freeswitchB機器:

INSERT INTO `opensips`.`dispatcher` (`id`, `setid`, `destination`, `socket`, `attrs`, `description`) 
VALUES (1, 1001, 'sip:192.168.137.32:5080', 'udp:192.168.137.33:5060', 'fstest1', 'freeswitchB gw');

數據庫效果:

2、cfg配置

文件:opensips.cfg

配置:

 3、運行效果

fs機器:192.168.137.31

測試命令:

originate {}sofia/external/111@192.168.137.33:5060 &echo

運行效果如下:

 抓包效果:

 運行效果視頻可從如下渠道獲取:

關注微信公衆號(聊聊博文,文末可掃碼)後回覆 2024032701 獲取。

五、資源下載

本文涉及資源,可以從如下途徑獲取:

 關注微信公衆號(聊聊博文,文末可掃碼)後回覆 20240327 獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章