在關(guān)于OpenSIPS學(xué)習(xí)筆記中的前幾個章節(jié)中,筆者詳細(xì)說明了關(guān)于集群模塊的使用和各種業(yè)務(wù)場景。很多讀者看完以前的文章就提出要做OpenSIPS集群,這讓筆者非常無語。集群僅是一個比較寬泛的概念,它可以支持很多具體的業(yè)務(wù)場景的集群,而且針對不同的集群方案,其部署和使用的模塊都非常不同,因此,如果非常寬泛地討論這些問題就沒有任何意義。其中,在集群部署中,通過OpenSIPS集群注冊是最常用的OpenSIPS或者Kamailio平臺應(yīng)用場景之一。關(guān)于集群和其他模塊說明,讀者可以參考:
OpenSIPS學(xué)習(xí)筆記-cluster集群模塊配置-dialog集群機(jī)制設(shè)置-集群節(jié)點(diǎn)環(huán)境配置示例-2
用戶通過注冊綁定共享的方式,支持SIP賬號通過OpenSIPS部署的各個節(jié)點(diǎn)實(shí)現(xiàn)SIP注冊功能。OpenSIPS的集群模塊來保證每個SIP注冊對其他節(jié)點(diǎn)的廣播,另外,因為集群模塊中的每個節(jié)點(diǎn)可以支持同一類型數(shù)據(jù)的能力,因此,這種集群加節(jié)點(diǎn)共享的處理能力可以自動實(shí)現(xiàn)一個高可靠性部署方式,一個節(jié)點(diǎn)出現(xiàn)故障,其他節(jié)點(diǎn)可以支持SIP注冊進(jìn)行工作。下面,筆者使用一個簡單全共享配置示例介紹如何配置集群注冊示例和簡單測試流程。
配置前說明:
- 已經(jīng)創(chuàng)建好節(jié)點(diǎn)實(shí)例,并且保證幾個實(shí)例之間互通互聯(lián),開啟相應(yīng)的端口。此要求在上一個章節(jié)中已經(jīng)說明
- 已經(jīng)安裝好OpenSIPS 的控制界面
- 需要SIP用戶端預(yù)先準(zhǔn)備好安裝軟電話或者物理話機(jī)
- 為了保持內(nèi)網(wǎng)的連通性,節(jié)點(diǎn)均在僅在同一云平臺同一區(qū)域
配置集群注冊示例需要大概經(jīng)過以下幾個步驟:
第一步,每個節(jié)點(diǎn)的用戶需要訪問控制界面,設(shè)置flags 為“seed”模式。從seed字面意思我們也可以大概的含義,就是為了節(jié)點(diǎn)那個找到相應(yīng)的傳播節(jié)點(diǎn),這樣做的目的是為了集群模塊配合各個節(jié)點(diǎn)能夠正常成功啟動,確保每個節(jié)點(diǎn)在找到相應(yīng)互相支持的節(jié)點(diǎn)后才能確認(rèn)為一個正常狀態(tài)的節(jié)點(diǎn)。完成了集群模塊的成功啟動以后,節(jié)點(diǎn)之間才真正能夠互聯(lián)互通,互相廣播。因此,這一步是非常重要的一步,用戶必須確保此步驟成功設(shè)置(需要配合后續(xù)配置文件的設(shè)置)。
然后,用戶需要編輯OpenSIPS的cfg配置文件,修改相應(yīng)的配置參數(shù)。這里,一定要注意自己的集群ID,node-ID和自己表示的node-ID,參考前面章節(jié)的配置說明,這里修改為全共享設(shè)置。
- modparam("usrloc", "location_cluster", __CLUSTER_ID__)
- modparam("usrloc", "working_mode_preset", "full-sharing-cluster")
通過”full-sharing-cluster“ 實(shí)現(xiàn)對其他節(jié)點(diǎn)進(jìn)行廣播。
接下來,在各個節(jié)點(diǎn)修改為自己相應(yīng)的配置以后,各個節(jié)點(diǎn)需要完成集群同步,因此節(jié)點(diǎn)需要重新啟動自己的實(shí)例。
第四步,各個節(jié)點(diǎn)用戶分別創(chuàng)建一個獨(dú)立的SIP用戶。為了保持測試的完整性,用戶通過OpenSIPS 控制界面或者CLI 命令根據(jù)節(jié)點(diǎn)不同創(chuàng)建不同的user和subscriber, 例如1X01, 這里X表示集群中的node ID,如果在節(jié)點(diǎn)3,就是1301。 注意,在上次文章中,我們示例創(chuàng)建了4個節(jié)點(diǎn)。為了簡單測試,我們的密碼使用的也是1X01密碼。
通過SIP 1000(以前創(chuàng)建的SIP賬號),進(jìn)行注冊測試。SIP 1000重新注冊,通過CLI命令檢查其地址狀態(tài):
watch -n0.5 'timeout 1 opensips-cli -x mi ul_dump | grep "AOR\":\|Contact\":"'
如果一切配置成功的話,從本地節(jié)點(diǎn)可以看到其他的SIP賬號,例如, 1201,1301,甚至于1401等節(jié)點(diǎn)的SIP賬號使用不同終端注冊的狀態(tài):
如果節(jié)點(diǎn)在“seed”節(jié)點(diǎn)時,用戶可以執(zhí)行集群同步命令查看狀態(tài),返回狀態(tài)應(yīng)該是OK狀態(tài)。
opensips-cli -x mi ul_cluster_sync
在呼叫測試流程,我們簡單測試其中一種情況。測試通過非注冊節(jié)點(diǎn)進(jìn)行呼叫。用戶可以使用SIP 1000對1X01等其他SIP用戶帳戶進(jìn)行呼叫,然后用戶1X01對1000SIP用戶帳戶進(jìn)行呼叫,通過命令sngrep觀察其呼叫流程。如果呼叫到一個1X01在非注冊節(jié)點(diǎn)的呼叫時,本地節(jié)點(diǎn)的呼叫會直接呼叫到1X01終端,不經(jīng)過注冊節(jié)點(diǎn)。通過不同SIP終端進(jìn)行不同的并發(fā)呼叫,通過命令sngrep抓取呼叫路徑。確保所有節(jié)點(diǎn)都介入了呼叫,在各個節(jié)點(diǎn)通過命令查看所有節(jié)點(diǎn)的呼叫跟蹤記錄。測試集群中每個節(jié)點(diǎn)數(shù)據(jù)同步的可持續(xù)性場景中,需要每個節(jié)點(diǎn)都重新啟動OpenSIPS,從其中一個節(jié)點(diǎn)數(shù)據(jù)同步到其他的節(jié)點(diǎn)中。其中,具有“seed”狀態(tài)的節(jié)點(diǎn)負(fù)責(zé)執(zhí)行節(jié)點(diǎn)數(shù)據(jù)的同步。在同步數(shù)據(jù)時一定要注意,同步數(shù)據(jù)初始總是一個為空的狀態(tài),這樣可以保證集群數(shù)據(jù)都是絕對干凈的數(shù)據(jù)狀態(tài),否則,所有數(shù)據(jù)可能發(fā)生沖突。因為同步不同節(jié)點(diǎn)的數(shù)據(jù)的處理流程比較復(fù)雜,用戶可以通過查看5555端口的數(shù)據(jù)進(jìn)行跟蹤:
ngrep -tqd any -W byline -il '^((?!clusterer-internal).)*$' port 5555
不同節(jié)點(diǎn)示例需要根據(jù)是否是“seed” 節(jié)點(diǎn)來執(zhí)行不同的命令完成特別操作,所以節(jié)點(diǎn)之間的協(xié)同必須一致。如果是在“seed” 節(jié)點(diǎn),用戶執(zhí)行:
service opensips restart
opensips-cli -x mi ul_dump
opensips-cli -x mi ul_cluster_sync
opensips-cli -x mi ul_dump
經(jīng)過命令查詢,確保全部數(shù)據(jù)成功同步處理,查看其狀態(tài):
如果是其他節(jié)點(diǎn)的實(shí)例,執(zhí)行以下命令:
- service opensips restart
- opensips-cli -x mi ul_dump
確保已經(jīng)收到同步數(shù)據(jù),同步成功。
最后,在本文章中筆者重點(diǎn)分享了如何在OpenSIPS中實(shí)現(xiàn)集群注冊的配置示例。筆者通過幾個主要的步驟分享了如何配置控制界面設(shè)置,如何修改cfg配置文件,加載配置參數(shù)以及如何進(jìn)行集群測試和節(jié)點(diǎn)同步中需要注意的一些問題。
因為資源有限,筆者在測試環(huán)境中肯定存在很多不足之處,包括云平臺,跨國家地域之間的跨平臺測試和終端網(wǎng)絡(luò)等測試,這些測試需要更多的集群環(huán)境和不同的測試點(diǎn)才能完成。這里僅是一個拋磚引玉,希望對計劃做基于OpenSIPS對計劃做SIP集群注冊的用戶有一定幫助。
參考資料:
www.OpenSIPS.org
www.hiastar.com
- 關(guān)于Asterisk文檔,參考:www.asterisk.org.cn
- 融合通信/IPPBX/FreePBX商業(yè)解決方案:www.hiastar.com
- 最新Asterisk完整中文用戶手冊詳解:www.asterisk.org.cn
- Freepbx/FreeSBC技術(shù)文檔: www.freepbx.org.cn
- 如何使用免費(fèi)會話邊界控制器-FreeSBC,qq技術(shù)分享群:334023047
- 關(guān)注微信公眾號:asterisk-cn,獲得有價值的通信行業(yè)技術(shù)分享