汪敏
(江蘇科技大學 計算機科學與工程學院,江蘇 鎮江 212003)
基于netlink的linux服務器集群統一外設事件監聽機制
汪敏
(江蘇科技大學 計算機科學與工程學院,江蘇 鎮江 212003)
針對大型分布式服務器集群系統中缺乏對于外設事件統一的監聽機制,設計了一種對于未經允許的可拔插事件、未經允許的外部存儲設備分區事件等外設事件的統一監聽機制,首先在被監控服務器端啟動過程中加載外設事件接收模塊和服務進程,然后由外設事件處理進程監聽netlink多播組,最終由外設事件處理進程將外設事件通過網絡發送給服務器端監控進程。通過本監聽機制的設計,提高了服務器集群系統的整體安全性。
計算機網絡;服務器集群;netlink;事件監聽
在linux服務器集群中,通常存在多臺服務器終端,而在大型的服務器架構中,許多服務器終端是分布在不同的地理位置的,在服務器運行過程中,對于像未經允許的可拔插設備訪問事件、未經允許的外部存儲設備分區掛載事件等外設異步事件缺乏有效而又實時的監聽方法。文中設計了一種基于netlink通訊的服務器集群統一外設事件監聽方法,提高了服務器集群的安全性。
目前,現有技術中還不存在一種在linux服務器集群內部統一的外設事件監聽方法。而且,對于單個的服務器內部的外設事件監聽而言,主要依靠用戶空間的設備文件系統守護進程udevd[1-5]來搜集外設事件來動態的改變設備文件系統目錄/dev下的設備節點信息,不存在其他的、單獨的外設事件用戶空間接收程序,而設備文件系統守護進程udevd可定制性較差,難以實現通過改變現有的udevd守護進程來統一的監聽服務器集群內部的所有的外設事件的方法。
實現對于內核空間消息的監聽以及內核空間與用戶空間的信息傳遞有很多種方法,但是相比較于增加系統調用[6-10]去實現外設事件監聽接口,采用netlink去實現通訊接口,有很多優點,比如說不需要增加內核代碼,不需要重復編譯內核,只需要在啟動系統的時候動態加載的相應的內核模塊,而且netlink協議本身實現了事件的異步通知,所以能夠保證內核事件接收的實時性。
一種基于netlink的linux服務器集群統一外設事件監聽方法,包括以下步驟:
1)被監控服務器端在系統啟動過程中加載外設事件內核接收模塊,同時開啟監控進程遠程服務進程,等待多個監控服務器端監控進程發來登錄請求;
2)監控服務器端的監控進程向被監控服務器端的遠程服務進程發送登錄請求;
3)被監控服務器端遠程服務進程接收登錄請求并利用fork()系統調用函數創建子進程,用于驗證登陸帳戶信息,并由父進程繼續監控端口,查看是否有新的登錄請求;
4)被監控服務器端服務進程接收到登錄請求后,創建子進程,子進程開啟外設事件處理進程,利用外設事件處理進程監聽相關的netlink多播組,其中子進程與外設事件處理進程通過共享內存實現全雙工通訊;
5)外設事件內核接收模塊通過內核線程統一接收相關外設事件,并按照外設事件先后順序以及優先級發送給相關的netlink多播組;
6)外設事件處理進程將外設事件通過子進程發送給父進程進而通過網絡發送給監控服務器端監控進程。
圖1顯示了系統的總體架構以及相關的工作流程。

圖1 系統架構圖
在圖1中,監控進程遠程服務模塊有兩個子進程,用以處理登錄請求,并且這兩個子進程分別關注不同的外設事件處理程序。圖1中兩個不同的外設事件處理程序,用以監聽相同的netlink多播組,能夠實現對于相同的外設事件有多個不同外設事件處理程序去處理的實用功能。
內核空間的外設事件內核接收模塊用于解決最為關鍵的外設事件的統一接收問題,如圖2所示,文中的外設事件內核接收模塊主要提供兩部分功能:一是實現hw_event_send(int priority,struct mxc_hw_event new_event)函數對于驅動外設事件按照發生順序以及優先級向內核線程傳遞的功能;二是實現kernel_thread(hw_event_thread,NULL,CLONE_KERNEL)內核線程對于外設事件的接收以及按照它的發生順序向用戶空間廣播的過程。

圖2 被監控端服務器架構
對于第一部分功能,文中主要是通過EXPORT_SYMBOL(hw_event_send)將hw_event_send()函數導出符號,可以在各個外設的驅動中使用該函數,將外設事件按照它的優先級和發生順序發送給內核線程。設備驅動在使用該函數的時候分了兩種情況,如圖3設備驅動1在使用該函數傳遞外設事件的時候處于中斷上下文,而設備驅動2和設備驅動3在使用該函數傳遞外設事件的時候處在非中斷上下文中,通過對于in_interrupt()的返回值判斷,能夠知道當前使用該函數的驅動是否處在中斷上下文中;通過對于中斷上下文的判斷,如果事件是在中斷上下文中觸發的,則先直接通過函數netlink_broadcast去廣播;如果廣播失敗的話,就掛入內核線程處理隊列,使用wake_up()函數喚醒內核線程。
圖3顯示了上述過程在Ubuntu Server端中的關鍵執行代碼。

圖3 關鍵代碼
在函數hw_event_send(int priority,struct mxc_hw_event new_event)中包含兩個參數:一個是外設事件的優先級,另外一個是外設事件形式參數的定義。在hw_event_send()函數中包含著兩層判斷,一層是上面已經提到的關于中斷上下文的判斷,一層則是對于外設事件優先級的判斷。如果是高優先級的外設事件,同樣的,需要首先通過函數netlink_broadcast去廣播到用戶空間。對于普通優先級并且是非中斷上下文觸發的外設事件,則是由內核線程
kernel_thread(hw_event_thread,NULL,CLONE_KERNEL)負責接收的,當在外設事件發送函數hw_event_send()中有外設事件需要傳遞給內核線程的時候,總是會調用wake_up()喚醒函數,去喚醒等待隊列,這主要是由于在內核線程等待外設事件的時候,總是會 wait_event_interruptible()改變當前的內核線程運行狀態為可中斷睡眠狀態。
如圖2所示,文中將多播組設置成#define HW_EVENT_ GROUP 2,在內核模塊中通過NETLINK_CB(skb).dst_group =HW_EVENT_GROUP初始化多播組為2,這樣在用戶空間就可以設置多個外設事件處理進程來監聽該多播組,就可以實現多個監控服務器端去監聽特定的內核事件的功能[11-16]。
如圖4顯示了當沒有拔插事件在被監控服務器端發生的時候,登錄的三號服務器沒有異常的事件發生,和圖4對比的是當有拔插事件發生的時候,圖5顯示了當前有西部數據的存儲設備插入了被監控服務器端。同時顯示了插入的存儲設備具體信息。

圖4 無拔插事件的被監控服務器端

圖5 有拔插事件的被監控端服務器
文中的目的在于解決大型服務器集群中出現的未經授權外設事件接入所引起的安全問題,進而提出了的一種基于netlink的linux服務器集群統一外設事件監聽方法,用以實現對于linux集群內部重要的外設事件的監聽,具有多終端同時監聽、統一和實時接收服務器內部外設事件且編程方法簡單易實現等優點。
[1]李坤麗,張大方,關洪濤,等.虛擬路由器管控平面的設計與實現[J].計算機工程,2014(5):94-98,102.
[2]宋婉貞,田洪濤.基于Profibus實現netLINK網關與PLC的通訊[J].電子工業專用設備,2012,41(2):50-53.
[3]尹家生,周健,辜麗川,等.基于Linux的高速網絡流量采集與分析模型研究[J].計算機工程與應用,2006,42(10):151-154.
[4]李惠娟,王汝傳,任勛益,等.基于Netfilter的數據包捕獲技術研究[J].計算機科學,2007,34(6):81-83.
[5]章曉明,杜春燕,陸建德,等.IPsec VPN中Netlink消息通信機制的研究和設計 [J].計算機工程與應用,2006,42(34): 139-141.
[6]李惠娟,王汝傳,任勛益,等.基于Netfilter的數據包捕獲技術研究[J].計算機科學,2007,34(6):81-83.
[7]杜飛,劉心松,邱元杰,等.netlink套接字在系統通信中的應用研究[J].微計算機信息,2006,22(9):95-97,233.
[8]鄭子輝,楊東升,尹震宇,等.數控現場總線NCSF監測分析系統的設計與實現[J].組合機床與自動化加工技術,2011(5):46-50,55.
[9]董昱,馬鑫.基于netlink機制內核空間與用戶空間通信的分析[J].測控技術,2007,26(9):57-58,60.
[10]周莉,柯健,顧小晶,等.Netlink套接字在Linux系統通信中的應用研究[J].計算機與現代化,2007(3):109-111.
[11]陳浩.Linux下用戶態和內核態內存共享的實現[J].電腦編程技巧與維護,2011(4):25-27.
[12]劉斌,朱程榮.Linux內核與用戶空間通信機制研究[J].電腦知識與技術,2012,8(16):3816-3817,3849.
[13]劉文峰,李程遠,李善平,等.嵌入式Linux操作系統的研究[J].浙江大學學報(工學版),2004,38(4):447-452.
[14]周莉,黃憲,陸建德,等.Linux 2.6內核IPSec支持機構的研究與分析[J].計算機技術與發展,2007,17(5):191-194,198.
[15]郭全生,舒繼武,毛希平,等.基于LVS系統的負載動態平衡設計與實現[J].計算機研究與發展,2004,41(6):923-929.
[16]林闖,李寅,萬劍雄.計算機網絡服務質量優化方法研究綜述[J].計算機學報,2011(1):1-14.
Unified monitoring mechanism of peripheral events based on netlink of Linux server clusters
WANG Min
(College of Computer Science and Engineering,Jiangsu Science and Technology University,Zhenjiang 212003,China)
The large-scale distributed server clusters system are lack of the unified monitoring mechanism of peripheral events .The unpermitted external storage partition and plug events are included in the mechanism.Firstly,peripheral events process and the service process are started by the monitoring server in its starting progress.And then the handling process of peripheral events monitor the netlink communication.At the end,peripheral events handling process send the peripheral events to the monitoring process through the network.The safety of whole large-scale distributed linux server clusters are promoted after the design of this mechanism.
computer network;server cluster;netlink;event monitor
TN91
A
1674-6236(2016)23-0076-03
2015-11-30稿件編號:201511297
汪 敏(1990—),男,江蘇揚州人,碩士。研究方向:信息安全。