在云计算和大数据时代,存储系统的高效利用成为企业和组织不可或缺的一部分。Ceph是一个开源、分布式对象存储解决方案,它提供了一个统一的接口来管理多种类型的存储设备,包括块设备(Block Device)。RBD(RADOS Block Device)是Ceph中用于将对象存储抽象为块设备的一个特性,这样就可以直接在应用程序中使用传统的块设备API,如SCSI命令。
RBD镜像与nbd
RBD镜像是Ceph集群中的一个概念,它代表了一组对象,以一种逻辑上的方式组织起来。每个RBD镜像都有一个唯一的ID,可以被映射到本地文件系统上,从而使得用户能够通过标准文件操作来读写数据。nbd(Network Block Device),又称网络块设备,是一种允许远程主机访问本地硬件或软件磁盘驱动器的一个协议。
rbd-nbd工具介绍
rbd-nbd是一个用于将RBD镜像导出为nbd服务端,然后客户端可以通过nwd连接到这个服务端,并将其作为普通的本地磁盘来挂载。这意味着你不需要安装任何特殊的驱动或者插入物理磁盘,只要你的系统支持NBD协议,你就可以访问远程位于ceph节点上的rdb卷。
使用步骤
1. 安装rdb-tools包
首先确保你的服务器已经安装了ceph-radosgw
, ceph-mon
, 和 ceph-osd
等组件,因为这些都是创建并运行一个功能完整的Ceph集群所必需的一部分。如果没有安装相关依赖,需要按照文档指示进行安装配置。
2. 创建并格式化rdb镜像
# 创建一个名为myimage.rdb,大小为10GB 的新的cinder卷$ rados mkvolume myimage --pool data --size 10G
然后格式化该卷:
$ rados create myimage /path/to/myimage -p data --format=2 --size=10G -k /path/to/your/keyring/file | tee /dev/stderr > output.log &> output.log &
3. 配置nwb服务端启动脚本
编辑配置文件,使其包含以下内容:
#!/bin/sh# 设置环境变量CEPH_CONF_PATH=/etc/ceph/cluster.conf;export CEPH_CONFPATH="/etc/ceph/cluster.conf";# 启动NWB服务端以导出指定名称和id(RBD) 的Volume。sudo -E bash -c "exec nwd-server --socket-path=/var/lib/nwd/socket"
执行chmod +x ./start_nwb.sh && ./start_nwb.sh 来启动脚本,这会让你看到类似这样的输出:
2019-07-08 14:30:00 INFO: Listening on socket path '/var/lib/nwd/socket'2019-07-08 14:30:00 INFO: Ready to accept NWD connections.
4. 客户端挂载远程rdb卷至局部目录下:
打开另外一台服务器,在其中启动客户端进程并尝试挂载这个网络共享出来:
sudo apt-get install nwd-client # 如果还没有安装的话则需要先下载并编译。sudo nwd-client connect <server_ip>:<port> <local_mount_point>
这里 <server_ip>
是运行NWB server实例所在主机IP地址;<port>
是NWD Server监听之用的TCP 端口号;<local_mount_point>
是你希望mount此网络共享出来的地方。在成功连接后,你应该能看到mount点下的内容如下图所示:
结论
总结来说,将RDB图片转换成可供其他主机访问的是非常重要且方便的一个功能,而它通常涉及到一些复杂的手段,如设置路由规则、防火墙策略以及安全考虑。但是如果我们只是想让我们的开发者能够更容易地测试他们代码,我们可能只需要简单地使用如上述描述的情景即可实现目标。此外,由于这种方法并不涉及物理硬件,我们也避免了由于硬件限制而引起的问题,比如空间不足等问题。