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