前言:
先有业务场景与需求,后有解决方案,从上家公司离职已经快三个月了,最近比较闲,整理下困扰上家公司的一个业务场景与解决办法,快忘了都:
业务场景:公司的IDC与阿里云的CDN平台合作,给优酷做CDN缓存,计费方式是根据流量来算,什么概念呢,就是在下午6:00到凌晨12:00,这段时间属于CDN的使用高峰期,在这段时间内所占用的带宽和流量会被CDN平台计算,然后结算付款。问题是,IDC机房的高带宽下,很难将流量跑起来,而且在zabbix的流量图上,中间还会有断层,说明了两个问题:1.流量跑的不稳定。2.有原因限制了流量的速度,可能是带宽,可能是CDN的进程,可能是磁盘的读写速度。
解决办法:既然有了具体的矛盾点,那么就需要逐一排查,具体的排查方法不再赘述,最终的结果是在磁盘的读写上动刀,解决了这个问题,让公司的IDC资源获得了更高的收益。具体怎么解决的呢,基于公司的硬件条件,大部分磁盘为300G的ssd与2T的hdd,在flashcache,b-cache,dm-cache上斟酌了一下,最终选择了dm-cache。
dm-cache是什么呢?
答:在存储系统中,硬盘因其存储介质访问需要寻道操作的缘故,速度缓慢。新生的永久性内存(Persistent RAM或者称之为非易失性内存,固态存储设备(SSD)通常被用作硬盘的高速缓存设备,以提高存储系统的吞吐率。这种架构采用分层存储管理(Hierarchy Storage Management)的思想,结合了PRAM,SSD高速度与HDD的低成本大容量的特性。另外,这种解决方案也可用于提高SAN(Storage Area Network)的性能,并能减轻其负荷。简单的来说,就是将ssd作为hdd的缓存,来提高hdd写的速度。
理论架构如下:
dm-cache设计成由3个物理存储设备来混合成一个逻辑卷的形式。操作模式和缓存策略决定了缓存数据的性能。这三个物理设备分别为:
- 原始设备:提供主要的慢速存储(通常是一个硬盘或者SAN)
- 缓存设备:提供高速原始设备数据的缓存(通常是一个SSD)
- 元数据设备:记录硬盘块在缓存中的位置,脏标志以及执行缓存策略所需的内部数据。通常采用能够随机访问的PRAM作为其载体。现有的PRAM有BBU-DIMM,PCM,MRAM。NVDIMM比起其他PRAM,速度快,容量高,是现今的最佳选择。
块大小值缓存的最小单位,在创建混合卷的时候配置。推荐大小为256到1024KB,但必须是64的倍数。采用块大小大于硬盘扇区是综合考虑了元数据大小和缓存空间浪费两方面的因素。过小的块会极具增加元数据在内核空间和元数据设备中占据的空间。太大的块又会造成缓存空间的浪费,因为大的数据块往往只有一部分有较高的缓存命中率。
dm-cache支持写回,写通和旁路三种模式。在写回模式中,写操作仅仅将数据写入缓存,并将其标记为脏数据,然后在适当的时机由后台的内核线程写入硬盘。写通模式则将更新的数据写入硬盘才结束本次I/O操作。旁路模式将所有读写操作不经过缓存设备,直接作用于原始设备。该模式允许混合卷在缓存设备与原始设备状态不一致的情况下被激活,适用于执行第三方快照功能的情形。 [2]
dm-cache的做法:
1.计算metadata所需block的大小:
2.建立ssd-metadata dm设备并清空:
3.计算剩余的块数分配给ssd-cache:
4.建立ssd-cache:
5.获得origin设备的扇区数:
6.建立origin设备(256kB):
7.验证:
上面最后一排信息的具体含义如下:
8.挂载:
9.配置开机自动加载并挂载,需要手动配置两个文件放到/etc/init下:
10.删除dm-cache的办法:
结语:
不得不说这套方案是非常的不错的,SSD的价格相对还是较贵的,尤其是作为存储来说,算上使用寿命的话,整体价格和HDD还是有不小的差距,而这套方案的优势就在于,在速度与价格上实现了折中,大大降低了海量存储的成本,当然,如果是内部的私有存储,还是结合ceph等开源分布式存储更好。