浅谈网络块设备的弹性扩容

2021-08-06 19:34韦伟于兆勇李冰利
计算机时代 2021年7期
关键词:存储

韦伟 于兆勇 李冰利

摘  要: 近些年各個领域的数据都出现爆炸性的增长, 而市面上为用户提供的存储服务也越来越多,但大多数存在存储容量受限,增加容量时价格昂贵,灾备空间有限等问题。文章研究了Linux的一个内核模块Network Block Device(NBD),并利用NBD来实现远程存储设备在本地服务器上的弹性挂载,从而实现本地服务的弹性扩容。

关键词: Linux内核; 内核模块; 网络块设备; 存储

中图分类号:TP399          文献标识码: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 引言

目前,互联网蓬勃发展,大数据时代已悄然来临。各行各业,无时无刻都会有巨大的数据量产生,这些数据也包括个人日常生活产生的数据,与每个人息息相关。

数据是无限的财富,如果应用好这些大数据,将会给企业和个人带来意想不到的收获及惊喜。但是想要更好地分析应用这些数据,首先就要使数据得到便捷安全的存储。目前市面上为用户提供的存储服务有很多,各自都有其不同的特点,但大多数存在存储容量受限,增加容量或者限时价格昂贵,或者单个文件传输大小受到一定限制,灾备空间有限等问题。本文重点研究Linux内核模块中的网络块设备NBD(Network Block Device),利用网络块设备来实现本地服务器上的弹性挂载,从而实现本地服务的扩容。

1 Linux内核

Linux为开源电脑操作系统内核,最早Linux内核是90年代初由Linus发布的,其采取开源社区的形式,全球无数程序员每天都在为内核中无偿的提供思想和代码的帮助,使得Linux内核变得越来越强大,现在已经发展到最新的5.5版本,是一个成熟的商用的操作系统。

Linux内核结构示意图如图1所示。包括两个方面,一个是用户空间,另一个是内核空间。用户空间主要作用是运行应用程序,常用的是glibc库,它能够封装系统调用接口,用户空间运行的进程有自己的独立的虚拟地址空间,和内核地址空间区分开来。内核地址空间有三层,分别是系统调用层、Linux内核层和依赖体系结构的代码层。系统调用层为用户和内核空间通信通信提供方式;Linux内核层是独立于体系结构的内核代码,它适用于任何体系结构;依赖体系结构的代码层(BSP)作用是兼容不用处理器或者平台[1]。本文所研究的网络块设备NBD,位于Linux的内核空间的内核层。

2 网络块设备

网络块设备1997年由Pavel Machek开发的,它是一个轻量级且快速的开源网络存储软件,能够将位于远端机器上的存储空间映射为本地的虚拟磁盘,提供给本地用户使用。在大家的共同努力下,网络块设备越来越趋于成熟稳定,而且能够支持SMP、64位体系结构等特性[2]。目前它是Linux内核的规范组件,并且在一定的领域中被广泛使用。它的主要作用能够让用户通过网络访问某个块设或者设备镜像。这个功能正好能够很好解决用户存在的存储容量受限,或者单个文件传输大小受到一定的限制,容灾等问题。

在Linux中,每个网络块设备均为一个node,通常,网络块设备访问的不是本地的物理存储,而是将远端的存储设备映射成本地块设备的虚拟驱动,实际访问的是挂载在本地的远端存储设备[3]。也就是说,A用户在本地能够访问远端B用户机器上的固定的物理磁盘,这样可以将资源最大化的使用起来。网络块设备包括客户端和服务端两部分,其基本原理如图2所示。

2.1 网络块设备服务器端

nbd_server是网络块设备服务器端的核心对象,由channel这个通道对象来完成网络传输,文件服务器fileserver来完成读写数据集的操作[4]。服务器端最初一级的进程初始化数据文件集和一些基本参数后进行无限的循环等待,以接受来自不同用户的登录。有用户登录成功,产生第二级进程,然后再派生出若干第三级线程,等待这些线程完成,线程全部结束则表示传输完毕。

2.2 网络块设备客户端

网络块设备客户端一方面是响应块设备的读写请求的服务方,另一方面是服务器端的客户方。客户端上的驱动程序主要完成与本地文件的交互,以及向网络发送传送读写请求。网络块设备是基于TCP的网路传输,服务器端和客户端通过BSD Socket接口实现网络传输,Linux系统一般提供多达256个网络块设备[5]。

nbd_client为客户端的核心对象,它独立地完成和驱动层的交互,其子对象Storageserver则来完成网络传输,对象channel来完成传输通道的任务。这样不仅可以使程序更加清晰,也可以在不同的对象上添加多种多样的功能。

3 网络块设备使用

3.1 网络块设备服务器端的操作

⑴ 安装nbd-server。

# apt-get install ndb-server

⑵ 服务器端启动nbd-server,监听1234端口,使用nbd-disk0映像文件,即將/var/tmp/nbd-disk0这块磁盘共享出来,供客户端共享使用。

# nbd-server 1234 /var/tmp/nbd-disk0

3.2 网络块设备客户端的操作

⑴ 安装 nbd-client。

# apt-get install nbd-client

⑵ 客户端需要加载NBD模块,否则不支持NBD功能。

# modprobe nbd

⑶ 查看NBD设备是否建立。

# lsmod | grep nbd  nbd 26400 0

⑷ 查看本机的NBD设备是否加载,不加载不可以使用。

# ls /dev/nbd* -hl

brw-r-----1 root disk 43, 0 Nov 27 06:40/dev/nbd0

⑸ 将/dev/nbd0设备与主机连接。/dev/nbd0是本机的一个磁盘,192.168.1.1是服务器的IP,1234是服务器端共享NBD设备的端口。

# nbd-client 192.168.1.1 1234 /dev/nbd0

⑹ 连接成功后,可以查看到nbd-client进程。

# 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 //需要格式化这个块设备。

# mkdir /mnt/nbd0 //挂载这个块设备。

# mount /dev/nbd0 /mnt/nbd0

# cd /mnt/nbd0

# nbd-client -d /dev/nbd0 //断开这个块设备。

每次客户端读写网络块设备,网络块设备内核驱动将通过TCP发送请求,服务器端执行请求,同时回复客户端。它可以在低磁盘空间或者无磁盘空间的机器上使用,挂载其他服务器上的空间充当自己的空间[6]。它和Linux内核中的NFS 网络文件系统(Network File System)不同,NFS能够实现通过网络挂载各种文件系统并进行访问,但是它只能实现简单对文件系统内的文件进行读写操作,不能进行改变挂载点的分区格式这种更底层的操作。网络块设备则可以在客户端虚拟的块设备上创建任何的文件系统,从而达到动态弹性扩容、灾备等目的。

4 验证测试结果

本次实验主要是测试在存储容量不足时,通过挂载三个网络块设备来实现动态弹性扩容,并且测试添加新的节点之后能否正常运行以及对读写速率的影响程度。

测试系统为三台Linux客户端和一台Linux服务器,均运行Ubuntu系统,内核版本都为linux5.5,Linux内核中网络块设备版本为3.8,客户端已经加载网络块设备内核模块,该实验是在广域网全双工百兆网络环境下进行的。测试结果如表1所示。

从表1可以看出,通过挂载三个网络块设备来实现动态弹性扩容,并且添加新的节点之后不影响正常运行并且对读写速率的影响不大。

5 结束语

经试验证明,Linux内核中的网络块设备能够很好的运用远程存储实现本地存储的动态扩容,后期还可以挂载多余设备进行灾备等实验,这样能很好解决本地存储空间不足的问题。这给目前海量数据存储提出了一个新的思路,在提倡降本增效的今天,具有非常重要的意义。网络块设备还可以和其他的存储架构如Hadoop结合,在集群的基础上实现弹性扩容。

参考文献(References):

[1] 陈莉君,康华.Linux操作系统原理与应用[M].清华大学出版社,2006.

[2] Wikipedia. Network block device.2014,4,http://en.wikipedia.org/wiki/Network_block_device

[3] 马琦,郭玉东.Linux下网络块设备的设计和实现[J].微机发展.2013.5:12-13,27

[4] 刘玉珍,单丹,连自锋.Linux下网络块设备的研究与实现[J].世界科技研究与发展.2011.2:265-2

[5] 陈莉君,王森,康华. 日志结构云存储中缓存的设计与实现[J].西安邮电大学学报,2013.18(5):76-80

[6] 韦伟,李冰利,张伟东.云存储系统中网络块设备的研究和应用[J].计算机与数字工程,2015.12:2243-2246

猜你喜欢
存储
档案管理中电子文件的存储探究
条形码技术在涂装生产中的应用
云计算与虚拟化
某医院数据中心虚拟化的设计与实现
烟台新型自动气象站数据本地存储的设计及实现
关于SQL语言及存储过程
基于Hadoop的业务过程模型管理方法研究
存储对桌面云的影响分析