写点什么

HBlock 应用实践与性能测试:解锁老旧服务器存储潜力,打造高效稳定的存储集群

作者:Geek_2dc40b
  • 2024-09-02
    北京
  • 本文字数:8227 字

    阅读完需:约 27 分钟

HBlock应用实践与性能测试:解锁老旧服务器存储潜力,打造高效稳定的存储集群

背景

随着技术的快速发展,企业会面临新旧服务器更替的问题,被替换掉的老旧服务器资源不仅占据了大量的物理空间,而且在能耗、维护成本等方面也给公司带来了不小的负担。使用 HBlock 盘活老旧服务器重新作为存储设备,充分利用其剩余价值,不仅能节省公司成本,带来经济价值和提升企业效益,还有助于减少环境负担,符合当前绿色、低碳的可持续发展理念。

HBlock 作为一款轻量级的存储集群控制器,在老旧服务器盘活作为存储设备的尝试中,表现出了突出的优势,本文将从安装部署、应用场景、实战表现、价值赋能、总体感受五个方面,展示 Hblock 技术在老旧服务器盘活作为存储设备中的性能和稳定性表现。

HBlock 的简单介绍

HBlock(存储资源盘活系统)是一款轻量级的存储集群控制器,实现了全用户态的软件定义存储,将通用服务器及其管理的闲置存储资源转换成高可用的虚拟磁盘,通过标准 iSCSI 协议提供分布式块存储服务,挂载给本地服务器(或其他远程服务器)使用,实现对资源的集约利用。

一. 安装部署(服务端部署)

硬件配置信息

  • 服务端:

ecs-hblock-1:16 核 | 16GB 弹性云服务器 CentOS 7.2 64 位 100G 数据盘 200G 数据盘

ecs-hblock-2:4 核 | 8GB 弹性云服务器 CentOS 7.5 64 位 100G 数据盘

ecs-hblock-3:4 核 | 16GB 弹性云服务器 CentOS 7.2 64 位 300G 数据盘







1. 第一步,在天翼云官网下载 HBlock 的软件安装包、相关插件及手册等资料,上传安装包到服务器并解压

https://www.ctyun.cn/document/10066310/10070367




2. 第二步,安装 Hblock

./stor install
复制代码




3. 第三步,初始化

使用 WEB 浏览器访问: https://SERVER_IP:PORT


3.1 选择集群版


3.2 设置系统名称、登录用户名、登录密码



3.3 添加服务器



3.4 输入节点名称、服务器 IP、端口号(默认端口号 1443)、数据目录。若该服务器有多个数据目录,目录之间用逗号隔开






3.5 设置故障域级别,然后点击<开始初始化>



4. 第四步,创建 iSCI、创建卷

4.1 登录 HBlock



4.2 创建 iSCI 目标(位置:服务-iSCI 目标)



4.3 创建卷(位置:服务-卷)



5. HBlock 的 Web 管理界面关键功能截图

  • 以下分别是 iSCSI 目标管理截图、服务器管理截图、卷管理截图




二. 应用场景(客户端部署)

场景说明

  • 行业:媒体行业

  • 使用场景说明:公司在长期的运营过程中积累了大量珍贵的历史数据,主要包括视频图片文件等,这些数据的存储和管理,对公司业务发展至关重要。我们使用 HBlock 盘活老旧服务器重新作为存储设备,主要用于存储不方便迁移至云端的历史数据。

硬件信息配置

  • 客户端:

ecs-hblock-client:4 核 | 16GB 弹性云服务器 CentOS 7.2 64 位


1. 第一步,安装 iscsi-initiator-utils

yum -y install iscsi-initiator-utils
复制代码


2. 第二步,安装并配置 MPIO

2.1 安装 MPIO

yum install device-mapper-multipath device-mapper-multipath-libs
复制代码



2.2 配置 MPIO

cd /usr/share/doc/device-mapper-multipath-0.4.9/cp ./multipath.conf /etc/multipath.confcd /etc
vi multipath.conf## 在/etc/multipath.conf 中增加如下配置defaults { user_friendly_names yes find_multipaths yes uid_attribute "ID_WWN"}devices { device { vendor "CTYUN" product "iSCSI LUN Device" path_grouping_policy failover path_checker tur path_selector "round-robin 0" hardware_handler "1 alua" rr_weight priorities no_path_retry queue prio alua }}
systemctl restart multipathdsystemctl enable multipathd
复制代码



3. 第三步,在服务端查询 LUN 及 iSCSI Target

HBlock 服务端:查询要连接的 LUN 及 LUN 对应 iSCSI Target 的详细信息

# 在服务端执行./stor lun ls -n lun1./stor lun ls -n lun2./stor target ls -n target1
复制代码



4. 第四步,发现 Target IQN

iscsiadm -m discovery -t st -p 192.168.1.163iscsiadm -m discovery -t st -p 192.168.1.80iscsiadm -m discovery -t st -p 192.168.1.51
复制代码


5. 第五步,登录 iSCSI 存储

iscsiadm -m node -T iqn.2012-08.cn.ctyunapi.oos:target1.1 -p 192.168.1.163:3260 -liscsiadm -m node -T iqn.2012-08.cn.ctyunapi.oos:target1.2 -p 192.168.1.80:3260 -liscsiadm -m node -T iqn.2012-08.cn.ctyunapi.oos:target1.3 -p 192.168.1.51:3260 -l
复制代码


6. 第六步,设备显示会话情况,查看当前 iSCSI 连接

iscsiadm -m sessionlsscsi #查看新增磁盘
复制代码


7. 第七步,查看 MPIO 设备、磁盘对应的 LUN 的 WWID

lsscsimultipath -llll /dev/mapper/mpathbll /dev/mapper/mpatha/lib/udev/scsi_id --whitelisted --device=/dev/sda/lib/udev/scsi_id --whitelisted --device=/dev/sdb/lib/udev/scsi_id --whitelisted --device=/dev/sdc/lib/udev/scsi_id --whitelisted --device=/dev/sdd/lib/udev/scsi_id --whitelisted --device=/dev/sde/lib/udev/scsi_id --whitelisted --device=/dev/sdf
复制代码



8. 最后一步,将 iSCSI 磁盘分区挂载到本地目录上

lsblkmkfs -t ext4 /dev/mapper/mpathbmkdir /mnt/disk_mpathbmount /dev/mapper/mpathb /mnt/disk_mpathb
mkfs -t ext4 /dev/mapper/mpathamkdir /mnt/disk_mpathamount /dev/mapper/mpatha /mnt/disk_mpatha
lsblk
复制代码






三. 实战表现(使用 fio 针对挂载盘进行性能测试)

1. 应用场景对存储系统的具体需求

  • ‍使用场景:存储历史数据,包括视频、图片等文件

  • ‍对存储系统的要求:主要是数据传输稳定可靠,其次对大文件的上传下载速度有一定的要求

2. fio 测试参数的简单示例

根据不同的业务需求,设置不同的参数。

以下是几个简单示例及结果

2.1 顺序读

# 顺序读(任务数:1)fio --name=read_4M_10G_1_disk_mpatha --directory=/mnt/disk_mpatha --ioengine=libaio --rw=read --bs=4M --direct=1 --size=10G --numjobs=1 --refill_buffers --group_reporting
# 测试结果read_4M_10G_1_disk_mpatha: (g=0): rw=read, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=libaio, iodepth=1fio-3.7Starting 1 processread_4M_10G_1_disk_mpatha: Laying out IO file (1 file / 10240MiB)
read_4M_10G_1_disk_mpatha: (groupid=0, jobs=1): err= 0: pid=13231: Thu Aug 15 14:30:03 2024 read: IOPS=28, BW=114MiB/s (119MB/s)(10.0GiB/89972msec) slat (usec): min=246, max=1745, avg=308.08, stdev=37.62 clat (usec): min=7906, max=45070, avg=34830.72, stdev=914.49 lat (usec): min=8251, max=46821, avg=35139.44, stdev=920.66 clat percentiles (usec): | 1.00th=[34866], 5.00th=[34866], 10.00th=[34866], 20.00th=[34866], | 30.00th=[34866], 40.00th=[34866], 50.00th=[34866], 60.00th=[34866], | 70.00th=[34866], 80.00th=[34866], 90.00th=[34866], 95.00th=[34866], | 99.00th=[34866], 99.50th=[34866], 99.90th=[35390], 99.95th=[36439], | 99.99th=[44827] bw ( KiB/s): min=114459, max=131072, per=99.96%, avg=116501.98, stdev=3539.70, samples=179 iops : min= 27, max= 32, avg=28.37, stdev= 0.94, samples=179 lat (msec) : 10=0.08%, 20=0.04%, 50=99.88% cpu : usr=0.03%, sys=0.88%, ctx=2566, majf=0, minf=544 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued rwts: total=2560,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs): READ: bw=114MiB/s (119MB/s), 114MiB/s-114MiB/s (119MB/s-119MB/s), io=10.0GiB (10.7GB), run=89972-89972msec
Disk stats (read/write): dm-0: ios=20429/4, merge=0/1, ticks=402438/95, in_queue=402590, util=99.75%, aggrios=6826/2, aggrmerge=0/0, aggrticks=133393/31, aggrin_queue=133425, aggrutil=98.89% sda: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00% sdc: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00% sde: ios=20480/6, merge=0/0, ticks=400180/95, in_queue=400275, util=98.89%
复制代码

2.2 顺序写

# 顺序写(任务数:1)fio --name=write_4M_10G_1_disk_mpatha --directory=/mnt/disk_mpatha --ioengine=libaio --rw=write --bs=4M --direct=1 --size=10G --numjobs=1 --refill_buffers --group_reporting --end_fsync=1
# 测试结果write_4M_10G_1_disk_mpatha: (g=0): rw=write, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=libaio, iodepth=1fio-3.7Starting 1 processwrite_4M_10G_1_disk_mpatha: Laying out IO file (1 file / 10240MiB)
write_4M_10G_1_disk_mpatha: (groupid=0, jobs=1): err= 0: pid=15496: Thu Aug 15 15:15:37 2024 write: IOPS=18, BW=74.9MiB/s (78.6MB/s)(10.0GiB/136670msec) slat (usec): min=256, max=852, avg=302.36, stdev=41.47 clat (msec): min=15, max=147, avg=52.18, stdev= 8.80 lat (msec): min=16, max=147, avg=52.48, stdev= 8.79 clat percentiles (msec): | 1.00th=[ 35], 5.00th=[ 35], 10.00th=[ 52], 20.00th=[ 52], | 30.00th=[ 52], 40.00th=[ 52], 50.00th=[ 53], 60.00th=[ 53], | 70.00th=[ 53], 80.00th=[ 53], 90.00th=[ 54], 95.00th=[ 59], | 99.00th=[ 93], 99.50th=[ 101], 99.90th=[ 122], 99.95th=[ 131], | 99.99th=[ 148] bw ( KiB/s): min=49152, max=98304, per=100.00%, avg=76749.11, stdev=6981.26, samples=273 iops : min= 12, max= 24, avg=18.68, stdev= 1.72, samples=273 lat (msec) : 20=0.04%, 50=8.32%, 100=91.17%, 250=0.47% cpu : usr=1.60%, sys=0.61%, ctx=2590, majf=0, minf=28 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued rwts: total=0,2560,0,1 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs): WRITE: bw=74.9MiB/s (78.6MB/s), 74.9MiB/s-74.9MiB/s (78.6MB/s-78.6MB/s), io=10.0GiB (10.7GB), run=136670-136670msec
Disk stats (read/write): dm-0: ios=0/20549, merge=0/218, ticks=0/749574, in_queue=749561, util=98.37%, aggrios=0/6868, aggrmerge=0/0, aggrticks=0/248523, aggrin_queue=248522, aggrutil=97.89% sda: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00% sdc: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00% sde: ios=0/20605, merge=0/0, ticks=0/745569, in_queue=745568, util=97.89%
复制代码

2.3 随机读

# 随机读(任务数:1)fio --name=randread_4M_10G_1_disk_mpatha --directory=/mnt/disk_mpatha --ioengine=libaio --rw=randread --bs=4M --direct=1 --size=10G --numjobs=1 --refill_buffers --group_reporting
# 测试结果randread_4M_10G_1_disk_mpatha: (g=0): rw=randread, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=libaio, iodepth=1fio-3.7Starting 1 processrandread_4M_10G_1_disk_mpatha: Laying out IO file (1 file / 10240MiB)
randread_4M_10G_1_disk_mpatha: (groupid=0, jobs=1): err= 0: pid=24172: Tue Aug 27 09:15:09 2024 read: IOPS=19, BW=76.0MiB/s (79.7MB/s)(10.0GiB/134704msec) slat (usec): min=249, max=2119, avg=314.08, stdev=49.74 clat (msec): min=3, max=520, avg=52.30, stdev=40.13 lat (msec): min=3, max=520, avg=52.61, stdev=40.14 clat percentiles (msec): | 1.00th=[ 13], 5.00th=[ 15], 10.00th=[ 19], 20.00th=[ 29], | 30.00th=[ 35], 40.00th=[ 39], 50.00th=[ 44], 60.00th=[ 47], | 70.00th=[ 54], 80.00th=[ 65], 90.00th=[ 90], 95.00th=[ 129], | 99.00th=[ 228], 99.50th=[ 268], 99.90th=[ 363], 99.95th=[ 363], | 99.99th=[ 523] bw ( KiB/s): min= 8192, max=131072, per=99.94%, avg=77797.80, stdev=27245.66, samples=269 iops : min= 2, max= 32, avg=18.93, stdev= 6.65, samples=269 lat (msec) : 4=0.08%, 10=0.12%, 20=11.29%, 50=53.79%, 100=26.76% lat (msec) : 250=7.34%, 500=0.59%, 750=0.04% cpu : usr=0.02%, sys=0.61%, ctx=2595, majf=0, minf=546 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued rwts: total=2560,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs): READ: bw=76.0MiB/s (79.7MB/s), 76.0MiB/s-76.0MiB/s (79.7MB/s-79.7MB/s), io=10.0GiB (10.7GB), run=134704-134704msec
Disk stats (read/write): dm-0: ios=20444/4, merge=0/1, ticks=757397/367, in_queue=757925, util=99.84%, aggrios=6826/2, aggrmerge=0/0, aggrticks=251557/122, aggrin_queue=251679, aggrutil=99.25% sda: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00% sdc: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00% sde: ios=20480/6, merge=0/0, ticks=754671/367, in_queue=755038, util=99.25%
复制代码

2.4 随机写

# 随机写(任务数:1)fio --name=randwrite_4M_10G_1_disk_mpatha --directory=/mnt/disk_mpatha --ioengine=libaio --rw=randwrite --bs=4M --direct=1 --size=10G --numjobs=1 --refill_buffers --group_reporting --end_fsync=1
# 测试结果randwrite_4M_10G_1_disk_mpatha: (g=0): rw=randwrite, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=libaio, iodepth=1fio-3.7Starting 1 processrandwrite_4M_10G_1_disk_mpatha: Laying out IO file (1 file / 10240MiB)
randwrite_4M_10G_1_disk_mpatha: (groupid=0, jobs=1): err= 0: pid=28870: Wed Aug 28 08:40:18 2024 write: IOPS=10, BW=41.7MiB/s (43.7MB/s)(10.0GiB/245594msec) slat (usec): min=265, max=59092, avg=733.36, stdev=4726.49 clat (msec): min=9, max=2295, avg=94.27, stdev=130.13 lat (msec): min=10, max=2351, avg=95.01, stdev=131.95 clat percentiles (msec): | 1.00th=[ 34], 5.00th=[ 35], 10.00th=[ 42], 20.00th=[ 52], | 30.00th=[ 52], 40.00th=[ 52], 50.00th=[ 53], 60.00th=[ 53], | 70.00th=[ 54], 80.00th=[ 71], 90.00th=[ 113], 95.00th=[ 460], | 99.00th=[ 472], 99.50th=[ 514], 99.90th=[ 1020], 99.95th=[ 1418], | 99.99th=[ 2299] bw ( KiB/s): min= 8175, max=114688, per=100.00%, avg=43668.70, stdev=32730.32, samples=480 iops : min= 1, max= 28, avg=10.61, stdev= 7.98, samples=480 lat (msec) : 10=0.08%, 20=0.23%, 50=11.13%, 100=77.62%, 250=1.91% lat (msec) : 500=8.40%, 750=0.47%, 1000=0.04% cpu : usr=0.92%, sys=0.36%, ctx=2608, majf=0, minf=30 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued rwts: total=0,2560,0,1 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs): WRITE: bw=41.7MiB/s (43.7MB/s), 41.7MiB/s-41.7MiB/s (43.7MB/s-43.7MB/s), io=10.0GiB (10.7GB), run=245594-245594msec
Disk stats (read/write): dm-0: ios=0/20614, merge=0/460, ticks=0/1288535, in_queue=1288520, util=99.14%, aggrios=0/6904, aggrmerge=0/0, aggrticks=0/428365, aggrin_queue=428364, aggrutil=98.89% sda: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00% sdc: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00% sde: ios=0/20712, merge=0/0, ticks=0/1285095, in_queue=1285094, util=98.89%
复制代码

3. 部分测试结果分享

3.1 顺序读


3.2 顺序写

3.3 随机读

3.4 随机写

4. 结果分析

4.1 性能分析

  • 随机读写性能

在较小的块大小和较低的并发数下,IOPS 和 BW 较高,延迟较低。

随着并发数的增加,IOPS 和 BW 有所下降,延迟增加。

  • 顺序读写性能

顺序读写的性能通常优于随机读写,尤其是在较大的块大小下,IOPS 和 BW 较高,延迟较低。

顺序读写性能在高并发环境下也表现出较好的稳定性。

  • 数据传输稳定性及可靠性

所有测试均未出现错误(err=0),表明测试过程中数据传输稳定可靠。

4.2 测试结论

  • 存储系统在处理高并发随机读写请求时可能会遇到性能瓶颈,表现为 IOPS 和 BW 的下降以及延迟的增加。

  • 顺序读写性能通常优于随机读写性能,尤其是在处理大文件时。

  • 存储系统的性能受到块大小、文件大小、作业数和 I/O 模式(随机或顺序)的影响。

4.3 适用场景分析

根据以上测试结论,该挂载盘表现出以下特点:

  • 顺序读写性能较高: 特别是在处理大文件和较大块大小时,显示出较高的 IOPS 和带宽(BW)。

  • 随机读写性能相对较低: 与顺序读写相比,随机读写的 IOPS 和带宽较低,延迟较高,尤其是在高并发情况下。

  • 写入性能通常低于读取性能: 这在大多数硬盘上是常见的。


基于这些特点,分析可能适合的使用场景:

  • 视频流媒体服务: 顺序读取大文件非常适合视频流媒体服务,用户可以流畅地观看高清视频。

  • 数据备份和归档: 顺序写入大文件的能力使其适合作为数据备份解决方案,例如备份大型数据库或归档旧文件。

  • 媒体库存储: 对于摄影师、视频制作者或图形设计师,存储大量的高分辨率图片和视频文件,顺序读写性能尤为重要。

5. 实战表现结论

  • 所有测试均未出现错误,表明测试过程中数据传输稳定可靠。

  • 顺序读写性能较高特别是在处理大文件和较大块大小时。

经分析,符合应用场景。

四. 价值赋能

结合媒体行业的实际需求,HBlock 的价值体现在:

  • 高分辨率视频处理: 媒体行业越来越多地使用 4K、8K 等高分辨率视频,这些视频文件非常大,需要快速的顺序读写能力,HBlock 完全可以满足这一需求。

  • 视频流服务: 对于提供视频点播服务的公司,需要快速地顺序读取视频文件以流式传输给用户,HBlock 的高性能顺序读取能力完全可以满足这一需求。

  • 存档和备份: 媒体公司需要存档大量的历史视频资料,HBlock 盘活老旧服务器重新作为存储设备使用,满足这一需求。

HBlock 通过灵活部署和高效整合,将不同品牌、架构和配置的老旧服务器转化为高性能、高可用性的存储资源,实现资源利用最大化,避免了资源的闲置浪费,同时减少新服务器的采购需求,不仅节省了公司的成本,也有助于企业实现节能降碳的目标。

五. 总体感受

HBlock 在盘活老旧服务器方面展现出显著优势,为企业带来全方位的价值赋能。使用 HBlock 盘活老旧服务器重新作为存储设备,充分利用其剩余价值,不仅能节省公司成本,带来经济价值和提升企业效益,还有助于减少环境负担,符合当前绿色、低碳的可持续发展理念。

此外,HBlock 还提升了 IT 运维效率,其极简的设计模式和友好的用户界面,降低了安装部署和运维的复杂度,使运维人员能够迅速响应业务需求,确保系统稳定运行,提升了整体运维效率。

发布于: 刚刚阅读数: 5
用户头像

Geek_2dc40b

关注

还未添加个人签名 2024-08-29 加入

还未添加个人简介

评论

发布
暂无评论
HBlock应用实践与性能测试:解锁老旧服务器存储潜力,打造高效稳定的存储集群_HBlock_Geek_2dc40b_InfoQ写作社区