Robinhood策略引擎是一个目标管理大型文件系统的工具。发布于2013年。它所能提供的功能有
- 提供可定制策略引擎完成一些存储任务
如,提供数据一致性检查策略(定期检查数据的checksum是否一致),根据文件名称、大小等将文件归类、删除,定期删除不常用的文件,到达一定容量后进行文件处理等等,非常灵活。操作涵盖压缩、拷贝、删除、删除目录、
- 记录和计算基于用户或用户组的情况
- 提供执行策略的报告(rbh-report)
- 提供根据策略的du情况(rbh-du命令)
- 提供根据策略列出文件情况,即find效果(rbh-find命令)
- 提供状态查看和告警机制(可以邮件发送)
- 提供针对扫描效果的benchmark和一些优化建议
Robinhood基本原理是实现了一个位于大型文件系统客户端的多线程扫描程序(C语言实现,为啥用C,或许其启动的目的是提供给Lustre使用),将文件系统的元数据存放在数据库里(默认MySQL或者Mariadb)。这样做元数据操作只要操作数据库就可以。优点:例如对find和du这样需要涉及大量元数据操作的场景,操作数据库比从元数据节点效率高很多。
使用
数据库最好和扫描使用的客户端在同一台机器上减少延迟(数据库是对延迟敏感)。
其对任何使用Posix接口的文件系统均适用。对Lustre还有额外的适配(利用了文件系统的日志)。
每个文件对应约1KB的存储空间。
内存越大越好,让数据库信息存放在内存里。(多数基于数据库的应用都有这种考虑。)
SSD能提供更高的IOPS和延迟,最好不使用HDD作为存储介质。使用Writeback模式。(MySQL数据库优化里也提过这一点。)
主频越高越好,而不是看核数(说明实现可能基于单个或少量的线程、而不是多线程)。
大型文件系统需要在多个客户端上执行(受限于单个客户端的能力),时间也很长可能长达数周或月。比如客户端A扫描/dir1目录,客户端B扫描/dir2目录。数据库最好为统一的一个。
基本使用命令
创建元数据存储的数据库
提供名称、域名、密码等参数。
rbh-config create_db <db_name> 'localhost' 'rbh_password'
进行扫描
可将日志输出
robinhood --scan --once -L stderr
执行策略。执行一次名为cleanup的策略,在执行完成后进程退出。
robinhood --run=cleanup --once
使用场景
有一定规则策略的应用非常适合使用该工具,特别是定时归档和删除的场景。可以作为rsync工具的替换。
同时该引擎也有明显的缺点:对客户端扫描太快和太慢都有弊端,太快占用存储系统整体性能,太慢处理不了实时性很高的任务。针对Lustre可以接近实时,但是其它提供POSIX接口的文件系统就没那么幸运了。笔者认为其对实效性要求较高的场景不适合。较大的文件系统需要人为规划任务,或者机械切分非常不智能。除此之外,它最新版本是3.1.5,但是有一年没有更新了,不活跃更新的开源软件维护成本很高。
网友评论