REDHAT 7.5beta 新推出的VDO功能
前言
关于VDO
VDO的技术来源于收购的Permabit公司,一个专门从事重删技术的公司,所以技术可靠性是没有问题的
VDO是一个内核模块,目的是通过重删减少磁盘的空间占用,以及减少复制带宽,VDO是基于块设备层之上的,也就是在原设备基础上映射出mapper虚拟设备,然后直接使用即可,功能的实现主要基于以下技术:
零区块的排除:
在初始化阶段,整块为0的会被元数据记录下来,这个可以用水杯里面的水和沙子混合的例子来解释,使用滤纸(零块排除),把沙子(非零空间)给过滤出来,然后就是下一个阶段的处理
重复数据删除:
在第二阶段,输入的数据会判断是不是冗余数据(在写入之前就判断),这个部分的数据通过UDS内核模块来判断(U niversal D eduplication S ervice),被判断为重复数据的部分不会被写入,然后对元数据进行更新,直接指向原始已经存储的数据块即可
压缩:
一旦消零和重删完成,LZ4压缩会对每个单独的数据块进行处理,然后压缩好的数据块会以固定大小4KB的数据块存储在介质上,由于一个物理块可以包含很多的压缩块,这个也可以加速读取的性能
上面的技术看起来很容易理解,但是实际做成产品还是相当大的难度的,技术设想和实际输出还是有很大距离,不然redhat也不会通过收购来获取技术,而不是自己去重新写一套了
如何获取VDO
主要有两种方式,一种是通过申请测试版的方式申请redhat 7.5的ISO,这个可以进行一个月的测试
另外一种方式是申请测试版本,然后通过源码在你正在使用的ISO上面进行相关的测试,从适配方面在自己的ISO上面进行测试能够更好的对比,由于基于redhat的源码做分发会涉及法律问题,这里就不做过多讲解,也不提供rpm包,自行申请测试即可
实践过程
安装VDO
安装的操作系统为CentOS Linux release 7.4.1708
[root@lab101 ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.4.1708 (Core)
Release: 7.4.1708
Codename: Core
内核版本如下
[root@lab101 ~]# uname -a
Linux lab101 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@lab101 ~]# rpm -qa|grep kernel
kernel-tools-libs-3.10.0-693.el7.x86_64
abrt-addon-kerneloops-2.1.11-48.el7.centos.x86_64
kernel-3.10.0-693.el7.x86_64
我们把内核升级一下,因为这个模块比较新,所以选择目前updates里面最新的
wget http://mirror.centos.org/centos/7/updates/x86_64/Packages/kernel-3.10.0-693.17.1.el7.x86_64.rpm
大版本一致,小版本不同,直接安装即可
[root@lab101 ~]# rpm -ivh kernel-3.10.0-693.17.1.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:kernel-3.10.0-693.17.1.el7 ################################# [100%]
[root@lab101 ~]# grub2-set-default 'CentOS Linux (3.10.0-693.17.1.el7.x86_64) 7 (Core)'
重启服务器
安装
[root@lab101 ~]# rpm -ivh kmod-kvdo-6.1.0.98-11.el7.centos.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:kmod-kvdo-6.1.0.98-11.el7.centos ################################# [100%]
[root@lab101 ~]# yum install PyYAML
[root@lab101 ~]# rpm -ivh vdo-6.1.0.98-13.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:vdo-6.1.0.98-13 ################################# [100%]
到这里安装就完成了
配置VDO
创建一个vdo卷
[root@lab101 ~]# vdo create --name=my_vdo --device=/dev/sdb1 --vdoLogicalSize=80G --writePolicy=sync
Creating VDO my_vdo
Starting VDO my_vdo
Starting compression on VDO my_vdo
VDO instance 0 volume is ready at /dev/mapper/my_vdo
参数解释:
name是创建的vdo名称,也就是生成的新设备的名称,device是指定的设备,vdoLogicalSize是指定新生成的设备的大小,因为vdo是支持精简配置的,也就是你原来1T的物理空间,这里可以创建出超过1T的逻辑空间,因为内部支持重删,可以根据数据类型进行放大,writePolicy是指定写入的模式的
如果磁盘设备是write back模式的可以设置为aysnc,如果没有的话就设置为sync模式
如果磁盘没有写缓存或者有write throuth cache的时候设置为sync模式
如果磁盘有write back cache的时候就必须设置成async模式
默认是sync模式的,这里的同步异步实际上是告诉vdo,我们的底层存储是不是有写缓存,有缓存的话就要告诉vdo我们底层是async的,没有缓存的时候就是sync
检查我们的磁盘的写入方式
[root@lab101 ~]# cat /sys/block/sdb/device/scsi_disk/0\:0\:1\:0/cache_type
write through
这个输出的根据上面的规则,我们设置为sync模式
修改缓存模式的命令
vdo changeWritePolicy --writePolicy=sync_or_async --name=vdo_name
格式化硬盘
[root@lab101 ~]# mkfs.xfs -K /dev/mapper/my_vdo
meta-data=/dev/mapper/my_vdo isize=512 agcount=4, agsize=5242880 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=20971520, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=10240, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
使用-K参数是加速了格式化的操作,也就是不发送丢弃的请求,因为之前创建了vdo,已经将其初始化为0了,所以可以采用这个操作
我们挂载的时候最好能加上discard的选项,精简配置的设备需要对之前的空间进行回收,一般来说有在线的和离线的回收,离线的就通过fstrim来进行回收即可
挂载设备
[root@lab101 ~]# mount -o discard /dev/mapper/my_vdo /myvod/
[root@lab101 ~]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/my_vdo 50.0G 4.0G 46.0G 8% 99%
默认创建完vdo设备就会占用4G左右的空间,这个用来存储UDS和VDO的元数据
检查重删和压缩是否开启
[root@lab101 ~]# vdo status -n my_vdo|grep Deduplication
Deduplication: enabled
[root@lab101 ~]# vdo status -n my_vdo|grep Compress
Compression: enabled
如果没有开启,可以通过下面的命令开启
vdo enableCompression -n <vdo_vol_name>
vdo enableDeduplication -n <vdo_vol_name>
验证重删功能
[root@lab101 ~]# df -h|grep vdo
/dev/mapper/my_vdo 80G 33M 80G 1% /myvod
[root@lab101 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/my_vdo 50.0G 4.0G 46.0G 8% 99%
传入一个ISO文件CentOS-7-x86_64-NetInstall-1708.iso 422M的
[root@lab101 ~]# df -h|grep vdo
/dev/mapper/my_vdo 80G 455M 80G 1% /myvod
[root@lab101 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/my_vdo 50.0G 4.4G 45.6G 8% 9%
然后重复传入3个相同文件,一共四个文件
[root@lab101 ~]# df -h|grep vdo
/dev/mapper/my_vdo 80G 1.7G 79G 3% /myvod
[root@lab101 ~]# vdostats --hu
Device Size Used Available Use% Space saving%
/dev/mapper/my_vdo 50.0G 4.4G 45.6G 8% 73%
可以看到后面传入的文件,并没有占用底层存储的实际空间
验证压缩功能
测试数据来源 silesia的资料库
http://sun.aei.polsl.pl/~sdeor/corpus/silesia.zip
通过资料库里面的文件来看下对不同类型的数据的压缩情况
Filename | 描述 | 类型 | 原始空间(KB) | 实际占用空间(KB) |
---|---|---|---|---|
dickens | 狄更斯文集 | 英文原文 | 9953 | 9948 |
mozilla | Mozilla的1.0可执行文件 | 执行程序 | 50020 | 33228 |
mr | 医用resonanse图像 | 图片 | 9736 | 9272 |
nci | 结构化的化学数据库 | 数据库 | 32767 | 10168 |
ooffice | Open Office.org 1.01 DLL | 可执行程序 | 6008 | 5640 |
osdb | 基准测试用的MySQL格式示例数据库 | 数据库 | 9849 | 9824 |
reymont | 瓦迪斯瓦夫·雷蒙特的书 | 6471 | 6312 | |
samba | samba源代码 | src源码 | 21100 | 11768 |
sao | 星空数据 | 天文格式的bin文件 | 7081 | 7036 |
webster | 辞海 | HTML | 40487 | 40144 |
xml | XML文件 | HTML | 5220 | 2180 |
x-ray | 透视医学图片 | 医院数据 | 8275 | 8260 |
可以看到都有不同程度的压缩,某些类型的数据压缩能达到50%的比例
停止vdo操作
[root@lab101 ~]# vdo stop -n my_vdo
启动vdo操作
[root@lab101 ~]# vdo start -n my_vdo
删除vdo操作
[root@lab101 ~]# vdo remove -n my_vdo
VDO和CEPH能产生什么火花?
在ceph里面可以用到vdo的地方有两个,一个是作为Kernel rbd的前端,在块设备的上层,另外一个是作为OSD的底层,也就是把VDO当OSD来使用,我们看下怎么使用
作为rbd的上层
[root@lab101 ceph]# rbd create testvdorbd --size 20G
[root@lab101 ceph]# rbd map testvdorbd
创建rbd的vdo
[root@lab101 ceph]# vdo create --name=rbd_vdo --device=/dev/rbd/rbd/testvdorbd
Creating VDO rbd_vdo
vdo: ERROR - Device /dev/rbd/rbd/testvdorbd not found (or ignored by filtering).
被默认排除掉了,这个以前正好见过类似的问题,比较好处理
这个地方因为vdo添加存储的时候内部调用了lvm相关的配置,然后lvm默认会排除掉rbd,这里修改下lvm的配置文件即可
在/etc/lvm/lvm.conf的修改如下
types = [ "fd", 16 ,"rbd", 64 ]
把types里面增加下rbd 的文件类型即可
[root@lab101 ceph]# vdo create --name=rbd_vdo --device=/dev/rbd/rbd/testvdorbd
Creating VDO rbd_vdo
Starting VDO rbd_vdo
Starting compression on VDO rbd_vdo
VDO instance 2 volume is ready at /dev/mapper/rbd_vdo
挂载
mount -o discard /dev/mapper/rbd_vdo /mnt
查看容量
[root@lab101 mnt]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/rbd_vdo 20.0G 4.4G 15.6G 22% 3%
[root@lab101 mnt]# ceph df
GLOBAL:
SIZE AVAIL bash USED %bash USED
57316M 49409M 7906M 13.79
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
rbd 0 566M 1.20 46543M 148
[root@lab101 mnt]# ceph df
GLOBAL:
SIZE AVAIL bash USED %bash USED
57316M 48699M 8616M 15.03
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
rbd 0 1393M 2.95 45833M 355
多次传入相同的时候可以看到对于ceph内部来说还是会产生对象的,只是这个在vdo的文件系统来看是不占用物理空间的
对镜像做下copy
[root@lab101 ~]# rbd cp testvdorbd testvdorbdclone
[root@lab101 ~]#rbd map testvdorbdclone
[root@lab101 ~]# cat /etc/vdoconf.yml |grep device
device: /dev/rbd/rbd/testvdorbdclone
修改配置文件为对应的设备,就可以启动了,这个操作说明vdo设备是不绑定硬件的,只需要有相关的配置文件,即可对文件系统进行启动
那么这个在一个数据转移用途下,就可以利用vdo对数据进行重删压缩,然后把整个img转移到远端去,这个也符合现在的私有云和公有云之间的数据传输量的问题,会节省不少空间
vdo作为ceph的osd
ceph对设备的属性有要求,这里直接采用目录部署的方式
[root@lab101 ceph]# vdo create --name sdb1 --device=/dev/sdb1
[root@lab101 ceph]# vdo create --name sdb2 --device=/dev/sdb2
[root@lab101 ceph]# mkfs.xfs -K -f /dev/mapper/sdb1
[root@lab101 ceph]# mkfs.xfs -K -f /dev/mapper/sdb2
[root@lab101 ceph]# mkdir /osd1
[root@lab101 ceph]# mkdir /osd2
[root@lab101 ceph]# mount /dev/mapper/sdb1 /osd1/
[root@lab101 ceph]# mount /dev/mapper/sdb2 /osd2/
[root@lab101 ceph]# chown ceph:ceph /osd1
[root@lab101 ceph]# chown ceph:ceph /osd2
[root@lab101 ceph]# ceph-deploy osd prepare lab101:/osd1/
[root@lab101 ceph]# ceph-deploy osd prepare lab101:/osd2/
[root@lab101 ceph]# ceph-deploy osd activate lab101:/osd1/
[root@lab101 ceph]# ceph-deploy osd activate lab101:/osd2/
写入测试数据
[root@lab101 ceph]# rados -p rbd bench 60 write --no-cleanup
[root@lab101 ceph]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 56G 2.0G 54G 4% /
devtmpfs 983M 0 983M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 8.8M 983M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/sdb1 22G 6.5G 16G 30% /osd1
/dev/mapper/sdb2 22G 6.5G 16G 30% /osd2
[root@lab101 ceph]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/sdb2 25.0G 3.0G 22.0G 12% 99%
/dev/mapper/sdb1 25.0G 3.0G 22.0G 12% 99%
可以看到虽然在df看到了空间的占用,实际上因为rados bench写入的是填充的空洞数据,vdo作为osd对数据直接进行了重删了,测试可以看到vdo是可以作为ceph osd的,由于我的测试环境是在vmware虚拟机里面的,所以并不能做性能测试,有硬件环境的情况下可以对比下开启vdo和不开启的情况的性能区别
参考文档
vdo-qs-creating-a-volume
Determining the space savings of virtual data optimizer (VDO) in RHEL 7.5 Beta
总结
本篇从配置和部署以及适配方面对vdo进行一次比较完整的实践,从目前的测试情况来看,配置简单,对环境友好,基本是可以作为一个驱动层嵌入到任何块设备之上的,未来应该有广泛的用途,目前还不清楚红帽是否会把这个属性放到centos下面去,目前可以通过在https://access.redhat.com/downloads/ 申请测试版本的ISO进行功能的测试
应该是农历年前的最后一篇文章了,祝新春快乐!
变更记录
Why | Who | When |
---|---|---|
创建 | 武汉-运维-磨渣 | 2018-02-10 |
REDHAT 7.5beta 新推出的VDO功能的更多相关文章
- Google 新推出Background sync API
Background sync是Google新推出的Web API,可延迟用户行为,直到用户网络连接稳定.这样有助于保证用户想要发送的数据就是实际发送的数据. 目前存在的问题 网络是消磨用户时间最多的 ...
- 【转】如何评价 Apple 新推出的编程语言 Swift?
如何评价 Apple 新推出的编程语言 Swift? 原文地址:http://www.zhihu.com/question/24002984 评价:如果你会Objective-C,你不需要去看它. ...
- redhat 6.4 安装VirtualBox自动增强功能功:unable to find the sources of your current Linux kernel
redhat 6.4 安装VirtualBox自动增强功能功能的时候提示: building the main Guest Additions module FAILED unable to find ...
- Android零基础入门第32节:新推出的GridLayout网格布局
原文:Android零基础入门第32节:新推出的GridLayout网格布局 本期主要学习的是网格布局是Android 4.0新增的布局,和前面所学的TableLayout表格布局 有点类似,不过他有 ...
- [译][ABP vNext]ABP CLI,v0.18版本的新模板和其他功能
ABP CLI,v0.18版本的新模板和其他功能 ABP v0.18已发布, 包含解决的70+个issue,500+次提交 网站更改 abp.io网站完全更新以突出ABP框架的目标和重要功能.文档和博 ...
- PHP 5.6正式发布:新特性、及功能改进介绍
经过了长时间的开发测试,新版本PHP程序(PHP5.6正式版)终于发布了.新版本中加入了一些实用的新特性,也摒弃了一些冗余的功能.同时,也对部分原有功能进行了改进.下面就一起看看PHP 5.6正式版到 ...
- FreeSql 新的八大骚功能,.NETCore 你必须晓得的 ORM
前言 FreeSql 目前版本号 0.5.5,预计明年元旦发布 1.0.0,切莫小看了版本号,目前单元测试方法1350+,并且每个方法内的涵盖面又比较广(不信的话见下图),每一次版本发布都作了较多的测 ...
- newbee-mall 开源商城新计划:秒杀功能、优惠券、对接支付宝
新项目是 newbee-mall 的升级版本,暂时就叫它 newbee-mall-plus 吧,第一阶段会开发秒杀功能.优惠券.对接支付宝这些功能,也会慢慢加入 Redis. Elastic Sear ...
- 详解 Java 17 中新推出的密封类
Java 17推出的新特性Sealed Classes经历了2个Preview版本(JDK 15中的JEP 360.JDK 16中的JEP 397),最终定稿于JDK 17中的JEP 409.Seal ...
随机推荐
- 四年了自学了C/C++那么久,还写不出项目,正常吗?
前言: 这是之前在V2EX职场话题里看到的一个话题,类似的小编身边人呢也有相似的困扰. 现在大学里基本都开设了计算机课程,看了那么多相关知识性的书,但学了四年出来,仍然写不出项目,这肯定是有问题的. ...
- 【最大匹配+二分答案】HDU 2236 无题II
题目内容 这是一个简单的游戏,在一个\(n×n\)的矩阵中,找\(n\)个数使得这\(n\)个数都在不同的行和列里并且要求这\(n\)个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\ ...
- Java改写重构第2版第一个示例
写在前面 <重构:改善既有代码的设计>是一本经典的软件工程必读书籍.作者马丁·福勒强调重构技术是以微小的步伐修改程序. 但是,从国内的情况来而论,"重构"的概念表里分离 ...
- go 实现websocket推送
index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- centos8平台使用parted管理分区
一,parted的用途 parted是GNU发布的强大的分区工具, parted命令可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区. 因为fdisk命令对于大于2T的分区无法划 ...
- git折腾日志
git for windows https://git-for-windows.github.io/ 基本配置 进入git bash后执行 $ git config --global user.nam ...
- java实现单链表、栈、队列三种数据结构
一.单链表 1.在我们数据结构中,单链表非常重要.它里面的数据元素是以结点为单位,每个结点是由数据元素的数据和下一个结点的地址组成,在java集合框架里面 LinkedList.HashMap(数组加 ...
- D. Generating Sets 解析(思維)
Codeforce 722 D. Generating Sets 解析(思維) 今天我們來看看CF722D 題目連結 題目 略,請直接看原題 前言 真的是沒想到... @copyright petje ...
- 如何使用Python爬取基金数据,并可视化显示
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于Will的大食堂,作者打饭大叔 前言 美国疫情越来越严峻,大选也进入 ...
- 编写shell脚本的规范
目录 编写shell脚本的一些规范 解释器 添加脚本版本和注释功能 添加脚本调试 变量命名 全局变量和局部变量 命名规范 函数命名 脚本命名 函数 引用模块或文件 脚本日志 配置文件 其他 编写she ...