韋偉 于兆勇 李冰利
摘? 要: 近些年各個領(lǐng)域的數(shù)據(jù)都出現(xiàn)爆炸性的增長, 而市面上為用戶提供的存儲服務(wù)也越來越多,但大多數(shù)存在存儲容量受限,增加容量時價格昂貴,災(zāi)備空間有限等問題。文章研究了Linux的一個內(nèi)核模塊Network Block Device(NBD),并利用NBD來實現(xiàn)遠(yuǎn)程存儲設(shè)備在本地服務(wù)器上的彈性掛載,從而實現(xiàn)本地服務(wù)的彈性擴(kuò)容。
關(guān)鍵詞: Linux內(nèi)核; 內(nèi)核模塊; 網(wǎng)絡(luò)塊設(shè)備; 存儲
中圖分類號:TP399? ? ? ? ? 文獻(xiàn)標(biāo)識碼:A? ? ? 文章編號:1006-8228(2021)07-28-03
Discussion on the elastic expansion using Network Block Device
Wei Wei, Yu Zhaoyong, Li Bingli
(AVIC The First Aircraft Institute, Xi'an, Shannxi 710089, China)
Abstract: In recent years, the data in various fields are explosively increased, and the storage services available for users have being more and more, but most of them have the problems of limited storage capacity, high price when increasing capacity, limited disaster recovery space and so on. This paper studies Network Block Device (NBD), a kernel module of Linux, and uses NBD to realize the elastic mounting of remote storage devices on local servers, so as to realize the elastic expansion of local services.
Key words: Linux kernel; kernel module; Network Block Device; storage
0 引言
目前,互聯(lián)網(wǎng)蓬勃發(fā)展,大數(shù)據(jù)時代已悄然來臨。各行各業(yè),無時無刻都會有巨大的數(shù)據(jù)量產(chǎn)生,這些數(shù)據(jù)也包括個人日常生活產(chǎn)生的數(shù)據(jù),與每個人息息相關(guān)。
數(shù)據(jù)是無限的財富,如果應(yīng)用好這些大數(shù)據(jù),將會給企業(yè)和個人帶來意想不到的收獲及驚喜。但是想要更好地分析應(yīng)用這些數(shù)據(jù),首先就要使數(shù)據(jù)得到便捷安全的存儲。目前市面上為用戶提供的存儲服務(wù)有很多,各自都有其不同的特點,但大多數(shù)存在存儲容量受限,增加容量或者限時價格昂貴,或者單個文件傳輸大小受到一定限制,災(zāi)備空間有限等問題。本文重點研究Linux內(nèi)核模塊中的網(wǎng)絡(luò)塊設(shè)備NBD(Network Block Device),利用網(wǎng)絡(luò)塊設(shè)備來實現(xiàn)本地服務(wù)器上的彈性掛載,從而實現(xiàn)本地服務(wù)的擴(kuò)容。
1 Linux內(nèi)核
Linux為開源電腦操作系統(tǒng)內(nèi)核,最早Linux內(nèi)核是90年代初由Linus發(fā)布的,其采取開源社區(qū)的形式,全球無數(shù)程序員每天都在為內(nèi)核中無償?shù)奶峁┧枷牒痛a的幫助,使得Linux內(nèi)核變得越來越強(qiáng)大,現(xiàn)在已經(jīng)發(fā)展到最新的5.5版本,是一個成熟的商用的操作系統(tǒng)。
Linux內(nèi)核結(jié)構(gòu)示意圖如圖1所示。包括兩個方面,一個是用戶空間,另一個是內(nèi)核空間。用戶空間主要作用是運行應(yīng)用程序,常用的是glibc庫,它能夠封裝系統(tǒng)調(diào)用接口,用戶空間運行的進(jìn)程有自己的獨立的虛擬地址空間,和內(nèi)核地址空間區(qū)分開來。內(nèi)核地址空間有三層,分別是系統(tǒng)調(diào)用層、Linux內(nèi)核層和依賴體系結(jié)構(gòu)的代碼層。系統(tǒng)調(diào)用層為用戶和內(nèi)核空間通信通信提供方式;Linux內(nèi)核層是獨立于體系結(jié)構(gòu)的內(nèi)核代碼,它適用于任何體系結(jié)構(gòu);依賴體系結(jié)構(gòu)的代碼層(BSP)作用是兼容不用處理器或者平臺[1]。本文所研究的網(wǎng)絡(luò)塊設(shè)備NBD,位于Linux的內(nèi)核空間的內(nèi)核層。
2 網(wǎng)絡(luò)塊設(shè)備
網(wǎng)絡(luò)塊設(shè)備1997年由Pavel Machek開發(fā)的,它是一個輕量級且快速的開源網(wǎng)絡(luò)存儲軟件,能夠?qū)⑽挥谶h(yuǎn)端機(jī)器上的存儲空間映射為本地的虛擬磁盤,提供給本地用戶使用。在大家的共同努力下,網(wǎng)絡(luò)塊設(shè)備越來越趨于成熟穩(wěn)定,而且能夠支持SMP、64位體系結(jié)構(gòu)等特性[2]。目前它是Linux內(nèi)核的規(guī)范組件,并且在一定的領(lǐng)域中被廣泛使用。它的主要作用能夠讓用戶通過網(wǎng)絡(luò)訪問某個塊設(shè)或者設(shè)備鏡像。這個功能正好能夠很好解決用戶存在的存儲容量受限,或者單個文件傳輸大小受到一定的限制,容災(zāi)等問題。
在Linux中,每個網(wǎng)絡(luò)塊設(shè)備均為一個node,通常,網(wǎng)絡(luò)塊設(shè)備訪問的不是本地的物理存儲,而是將遠(yuǎn)端的存儲設(shè)備映射成本地塊設(shè)備的虛擬驅(qū)動,實際訪問的是掛載在本地的遠(yuǎn)端存儲設(shè)備[3]。也就是說,A用戶在本地能夠訪問遠(yuǎn)端B用戶機(jī)器上的固定的物理磁盤,這樣可以將資源最大化的使用起來。網(wǎng)絡(luò)塊設(shè)備包括客戶端和服務(wù)端兩部分,其基本原理如圖2所示。
2.1 網(wǎng)絡(luò)塊設(shè)備服務(wù)器端
nbd_server是網(wǎng)絡(luò)塊設(shè)備服務(wù)器端的核心對象,由channel這個通道對象來完成網(wǎng)絡(luò)傳輸,文件服務(wù)器fileserver來完成讀寫數(shù)據(jù)集的操作[4]。服務(wù)器端最初一級的進(jìn)程初始化數(shù)據(jù)文件集和一些基本參數(shù)后進(jìn)行無限的循環(huán)等待,以接受來自不同用戶的登錄。有用戶登錄成功,產(chǎn)生第二級進(jìn)程,然后再派生出若干第三級線程,等待這些線程完成,線程全部結(jié)束則表示傳輸完畢。
2.2 網(wǎng)絡(luò)塊設(shè)備客戶端
網(wǎng)絡(luò)塊設(shè)備客戶端一方面是響應(yīng)塊設(shè)備的讀寫請求的服務(wù)方,另一方面是服務(wù)器端的客戶方??蛻舳松系尿?qū)動程序主要完成與本地文件的交互,以及向網(wǎng)絡(luò)發(fā)送傳送讀寫請求。網(wǎng)絡(luò)塊設(shè)備是基于TCP的網(wǎng)路傳輸,服務(wù)器端和客戶端通過BSD Socket接口實現(xiàn)網(wǎng)絡(luò)傳輸,Linux系統(tǒng)一般提供多達(dá)256個網(wǎng)絡(luò)塊設(shè)備[5]。
nbd_client為客戶端的核心對象,它獨立地完成和驅(qū)動層的交互,其子對象Storageserver則來完成網(wǎng)絡(luò)傳輸,對象channel來完成傳輸通道的任務(wù)。這樣不僅可以使程序更加清晰,也可以在不同的對象上添加多種多樣的功能。
3 網(wǎng)絡(luò)塊設(shè)備使用
3.1 網(wǎng)絡(luò)塊設(shè)備服務(wù)器端的操作
⑴ 安裝nbd-server。
# apt-get install ndb-server
⑵ 服務(wù)器端啟動nbd-server,監(jiān)聽1234端口,使用nbd-disk0映像文件,即將/var/tmp/nbd-disk0這塊磁盤共享出來,供客戶端共享使用。
# nbd-server 1234 /var/tmp/nbd-disk0
3.2 網(wǎng)絡(luò)塊設(shè)備客戶端的操作
⑴ 安裝 nbd-client。
# apt-get install nbd-client
⑵ 客戶端需要加載NBD模塊,否則不支持NBD功能。
# modprobe nbd
⑶ 查看NBD設(shè)備是否建立。
# lsmod | grep nbd? nbd 26400 0
⑷ 查看本機(jī)的NBD設(shè)備是否加載,不加載不可以使用。
# ls /dev/nbd* -hl
brw-r-----1 root disk 43, 0 Nov 27 06:40/dev/nbd0
⑸ 將/dev/nbd0設(shè)備與主機(jī)連接。/dev/nbd0是本機(jī)的一個磁盤,192.168.1.1是服務(wù)器的IP,1234是服務(wù)器端共享NBD設(shè)備的端口。
# nbd-client 192.168.1.1 1234 /dev/nbd0
⑹ 連接成功后,可以查看到nbd-client進(jìn)程。
# ps -ef | grep nbd
root 3156 1 0 06:44 pts/0 00:00:00 nbd-client
192.168.1.1 1234 /dev/nbd0
# mkfs.ext3 /dev/nbd0 //需要格式化這個塊設(shè)備。
# mkdir /mnt/nbd0 //掛載這個塊設(shè)備。
# mount /dev/nbd0 /mnt/nbd0
# cd /mnt/nbd0
# nbd-client -d /dev/nbd0 //斷開這個塊設(shè)備。
每次客戶端讀寫網(wǎng)絡(luò)塊設(shè)備,網(wǎng)絡(luò)塊設(shè)備內(nèi)核驅(qū)動將通過TCP發(fā)送請求,服務(wù)器端執(zhí)行請求,同時回復(fù)客戶端。它可以在低磁盤空間或者無磁盤空間的機(jī)器上使用,掛載其他服務(wù)器上的空間充當(dāng)自己的空間[6]。它和Linux內(nèi)核中的NFS 網(wǎng)絡(luò)文件系統(tǒng)(Network File System)不同,NFS能夠?qū)崿F(xiàn)通過網(wǎng)絡(luò)掛載各種文件系統(tǒng)并進(jìn)行訪問,但是它只能實現(xiàn)簡單對文件系統(tǒng)內(nèi)的文件進(jìn)行讀寫操作,不能進(jìn)行改變掛載點的分區(qū)格式這種更底層的操作。網(wǎng)絡(luò)塊設(shè)備則可以在客戶端虛擬的塊設(shè)備上創(chuàng)建任何的文件系統(tǒng),從而達(dá)到動態(tài)彈性擴(kuò)容、災(zāi)備等目的。
4 驗證測試結(jié)果
本次實驗主要是測試在存儲容量不足時,通過掛載三個網(wǎng)絡(luò)塊設(shè)備來實現(xiàn)動態(tài)彈性擴(kuò)容,并且測試添加新的節(jié)點之后能否正常運行以及對讀寫速率的影響程度。
測試系統(tǒng)為三臺Linux客戶端和一臺Linux服務(wù)器,均運行Ubuntu系統(tǒng),內(nèi)核版本都為linux5.5,Linux內(nèi)核中網(wǎng)絡(luò)塊設(shè)備版本為3.8,客戶端已經(jīng)加載網(wǎng)絡(luò)塊設(shè)備內(nèi)核模塊,該實驗是在廣域網(wǎng)全雙工百兆網(wǎng)絡(luò)環(huán)境下進(jìn)行的。測試結(jié)果如表1所示。
從表1可以看出,通過掛載三個網(wǎng)絡(luò)塊設(shè)備來實現(xiàn)動態(tài)彈性擴(kuò)容,并且添加新的節(jié)點之后不影響正常運行并且對讀寫速率的影響不大。
5 結(jié)束語
經(jīng)試驗證明,Linux內(nèi)核中的網(wǎng)絡(luò)塊設(shè)備能夠很好的運用遠(yuǎn)程存儲實現(xiàn)本地存儲的動態(tài)擴(kuò)容,后期還可以掛載多余設(shè)備進(jìn)行災(zāi)備等實驗,這樣能很好解決本地存儲空間不足的問題。這給目前海量數(shù)據(jù)存儲提出了一個新的思路,在提倡降本增效的今天,具有非常重要的意義。網(wǎng)絡(luò)塊設(shè)備還可以和其他的存儲架構(gòu)如Hadoop結(jié)合,在集群的基礎(chǔ)上實現(xiàn)彈性擴(kuò)容。
參考文獻(xiàn)(References):
[1] 陳莉君,康華.Linux操作系統(tǒng)原理與應(yīng)用[M].清華大學(xué)出版社,2006.
[2] Wikipedia. Network block device.2014,4,http://en.wikipedia.org/wiki/Network_block_device
[3] 馬琦,郭玉東.Linux下網(wǎng)絡(luò)塊設(shè)備的設(shè)計和實現(xiàn)[J].微機(jī)發(fā)展.2013.5:12-13,27
[4] 劉玉珍,單丹,連自鋒.Linux下網(wǎng)絡(luò)塊設(shè)備的研究與實現(xiàn)[J].世界科技研究與發(fā)展.2011.2:265-2
[5] 陳莉君,王森,康華. 日志結(jié)構(gòu)云存儲中緩存的設(shè)計與實現(xiàn)[J].西安郵電大學(xué)學(xué)報,2013.18(5):76-80
[6] 韋偉,李冰利,張偉東.云存儲系統(tǒng)中網(wǎng)絡(luò)塊設(shè)備的研究和應(yīng)用[J].計算機(jī)與數(shù)字工程,2015.12:2243-2246