把对象存储转为文件存储,到底香不香?
Posted 柳清风09
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把对象存储转为文件存储,到底香不香?相关的知识,希望对你有一定的参考价值。
目前开源的文件存储有很多,譬如NFS、GlusterFS、CephFS等,但实话实话这些文件存储都存在一定的问题,譬如NFS的多集群要折腾、GlusterFS的小文件存储性能差、CephFS的运维复杂度和稳定性不高。结合公司的业务场景:图片、pdf、文档 存储的特性,在公司内部主推的是对象存储。
但在推广对象存储的时候,也面临一些老系统的改造压力,这些老系统之前都是使用商业NAS,如果迁移到对象存储需要改造的点有很多,而且还需要考虑历史数据的读取。如果对象存储能够保持和之前商业NAS一样的有个文件系统,通过目录和文件的方式读写那就可以快速的帮助业务迁移到对象存储。
我们都知道Fuse文件系统,它是linux提供的用户态文件系统,曾帮助我们解决docker的proc文件系统问题,这次我第一个想到的也是它。能不能通过Fuse对接到S3对象存储上面呢?搜索了一下,还真有很多相关的实现,happy。赶紧拿来测试一下。
首先打包一个s3fs的Docker镜像
FROM xx.xx.xx/basic/centos:7.5.1804
RUN yum install epel-release -y && yum install s3fs-fuse -y
如果是Docker直接启动
# docker run -it --privileged
然后在容器内执行挂载前需要将s3的秘钥写入passwd-s3fs
# echo ACCESS_KEY:SECRET_KEY > $HOME/.passwd-s3fs&&chmod 600 $HOME/.passwd-s3fs
# s3fs bucketname /abc/ -o url=http://s3.xx.xx/ -o use_path_request_style -o endpoint=default
挂载成功后便可以像操作本地文件系统一样的读写数据了。
sh-4.2# cd /abc
sh-4.2# ls
aa abc.txt bb cc kk
可以看到和我们对象存储里面的内容是保持一致的(截图来着我们team自研的对象存储管理页面)
是不是很香,如果是在kubernetes的环境中,需要先开启策略
containers:
- name: my-container
securityContext:
privileged: true
capabilities:
add:
- SYS_ADMIN
这种使用方式相对于常规的容器挂载文件系统的好处有两点:
第一是避免业务改造代码
第二是可以避免主机挂载,如果是主机挂载NAS,当NAS出现故障后,会导致容器无法删除、Docker hang住等问题。
但这种方式也不是万能的,毕竟的它的后端还是一个对象存储,对象存储的最佳实践就是一次写入,后续都是读请求。如果有个业务的研发误用,将s3挂载的目录用于记录日志,那么无疑是打开了潘多拉的魔盒,一直PUT对象。所以我们需要监控每个bucket的读写次数并设置告警,避免误用。所以这样看来它又并不是那么香了。
所有的技术都是有适用场景的,没有银弹,没有银弹,没有银弹,重要的事情说三遍。
补充说明:
-
如果上面s3挂载没有成功,也不会报错,可以通过mount命令查看是否挂载成功
可以通过追加“-o dbglevel=info -f -o curldbg”查看debug信息。 -
如果是window或则mac也支持挂载,不过看了几款都是收费(可以试用30天)。
以上是关于把对象存储转为文件存储,到底香不香?的主要内容,如果未能解决你的问题,请参考以下文章