1,说明
CPFS同步到OSS是使用其AFM(Active File Management)机制,AFM可以实现2个数据源之间的数据共享,其数据共享有如下四种模式:
CPFS与AliOSS默认使用的是Single Writer模式,其中OSS作为Home端,CPFS作为Cache端,在Single Writer模式下,Cache端数据会自动同步给Home,但是不会从Home上检查更新。
2,实践环境
为验证该功能实现,本次实践基于一套支持OSS数据同步功能的CPFS线下环境,其中2台存储节点能访问公网,公网总带宽为20Mbps,目前在公共云上的CPFS暂时还不支持同OSS的数据同步,具体发布时间依赖负责公共云CPFS产品团队官宣。
3,实践命令&结果
3.1 配置
在配置CPFS与OSS之间的数据同步之前,首先需要完成本节操作,具体如下:
设置CPFS gateway节点,用于CPFS同OSS的数据传输,可设置多个用于并行传输:
mmchnode –gateway -N cnode1,cnode2
设置OSS的AK:
mmafmcoskeys $oss_bucketname set $oss_accesskey_id $oss_accesskey_secret
验证AK正确性:
mmafmcoskeys $oss_bucketname get
设置CPFS同OSS的连接配置:
mmafmcosconfig $cpfs-devicename $oss_bucketname --map-endpoints http://oss-cn-beijing.aliyuncs.com --cleanup --vhb
该操作包括了在CPFS上建立一个对应OSS bucketname的fileset及配置AFM参数等过程,--map-endpoints参数后接OSS的外网endpoint。
3.2 从OSS上下载数据
在默认SW模式下,OSS作为Home端,CPFS作为Cache端,CPFS端数据会自动同步给OSS,但是不会从OSS上检查更新,如果需要从OSS上拉取数据,需要执行如下命令:
下载对应bucket的所有数据到cpfs目录:
mmafmcosctl $cpfs-devicename $oss_bucketname $cpfs_path download --all
如果需要限定下载的object,可以通过--object-list来指定object下载,操作如下:
mmafmcosctl $cpfs-devicename $oss_bucketname $cpfs_path download --object-list $object_filename
指定要拉的object,采用如下方式:
cat ./file2
test2
test2/node.cfg
mmafmcosctl cpfs hpttest1 /cpfs/hptest1/ download --object-list ./file2
注意:对已经download过,但是在文件系统上删除的,再执行download操作时,这些文件不会被二次拉取。
3.3 从CPFS往OSS同步数据
默认情况下,在执行mmafmconsconfig命令后,在设置的fileset目录下创建和修改的数据会自动同步到OSS对应bucket中。如果需要控制同步到OSS的文件,可以通过设置policy来限定,具体操作如下:
编写policy文件,如下示例policy文件的规则功能更描述:hpt-rule1:将后缀为.txt的文件留在cpfs本地,不上传到OSS中;hpt-rule2:将目录test1下的文件留在本地,不上传到OSS中;
cat /home/test.policy
RULE 'hpt-rule1' set pool 'system' FOR fileset
('hpttest1') OPTS('local') where name like '%.txt'
RULE 'hpt-rule2' set pool 'system' FOR fileset
('hpttest1') OPTS('local') where name like 'test1'
RULE default set pool ‘system’
如下命令实现应用policy规则到CPFS文件系统:
mmchpolicy cpfs /home/test.policy
验证CPFS到OSS的同步效果:
验证文件的结果:
.txt后缀的文件没有被上传到OSS,.json后缀的可以被上传到OSS上。
验证目录的结果:
test1目录下新建的文件没有被上传到OSS,test3目录由于没有规则约束,可以被上传到OSS上。
验证并行传输的效果:
dd if=/dev/zero of=/home/test1G bs=1M count=1024;
拷贝1G数据到cpfs对应目录,查看文件上传到OSS花费时间407s,平均带宽2.516MB/s,基本可以占满20Mbps的公网带宽:
3.4 CPFS 与OSS数据互通
部分情况下,需要实现CPFS与OSS之间的数据自动互通,这时可以在执行mmafmcosconfig时配置mode为iw,这时,OSS作为Home端,CPFS作为Cache端,两端都支持读写,Cache端既可推数据给Home端,也可以从Home上获取更新,在Cache上获取的是Home端的元数据。
配置方式如下:
mmafmcosconfig cpfs hwodpstest --map-endpoints http://oss-cn-beijing.aliyuncs.com --cleanup –vhb --object-fs --mode iw
在CPFS上对应bucket的fileset目录下ls时即触发download metadata动作,执行du可查看到文件实际大小为0,只有在做类似cat操作时,才显示实际大小。
示例如下:
OSS上数据其元数据自动同步到CPFS,在cat后显示实际内容,CPFS数据也能自动同步到OSS;
4,结论
通过以上实践,我们验证了本地高性能文件系统CPFS与公共云对象存储OSS的线下线上数据互通,结合CPFS的policy实现数据的定制同步和安全特性,我们可以实现一套兼顾本地集群文件系统的高性能和公共云对象存储的低成本的高性价比混合云存储解决方案。