提升CEPH系统对日志的Trim速度

1. CEPH系统 MDSs behind on trimming 的警报

在CEPH系统的MDS服务中,文件系统的元数据以日志形式存放于segment中,每个sgement存放1024个操作记录。当文件系统的数据使用完毕,CEPH系统则会以一定的速度Trim (消除) 元数据信息,此时会将MDS服务器中的数据回写到CEPH的磁盘OSD中,以降低MDS服务器上运行的mds服务的内存消耗。当segment数量超过默认128个时,则CEPH报警,意味着MDS服务器中保存了过量的元数据信息,占用内存可能较多,需要及时注意。

[root@ceph101 ~]# ceph health detail
HEALTH_WARN 2 MDSs behind on trimming
[WRN] MDS_TRIM: 2 MDSs behind on trimming
    mds.cephfs.ceph102.imxzno(mds.1): Behind on trimming (2235/128) max_segments: 128, num_segments: 2235
    mds.cephfs.ceph106.hggsge(mds.2): Behind on trimming (4260/128) max_segments: 128, num_segments: 4260

当遇到以上警告,若发现MDS服务器的内存足够,可以将默认阈值128提高,或加大Trim速度。

2. 解决办法

通过设置mds_log_max_segments参数来提高CEPH的 max_segments 数,在CEPH系统任意主机上运行即可。

ceph config set mds mds_log_max_segments 1024

通过设置参数来提升Trim速度。CEPH系统根据mds_cache_trim_threshold (默认256Ki)和mds_cache_trim_decay_rate (默认1.0)两个参数设置sgements的消除速度。默认设置下,当CEPH系统进行持续且Trim速度达到最大时,每秒钟Trim的记录数量为 ln(0.5)/rate*threshold 。当在CEPH系统中并行化读取或写入文件时,短时间内进行大量的文件操作,极容易导致segments过多,无法及时Trim。因此,需要提高Trim速度,其实也消耗不了太多CPU资源。

mds_cache_trim_threshold 设置了一定时间内能消除的最大文件数量。在进行Trim时,CEPH系统中有一个Counter程序记录了一定时间内被消除的文件数量。mds_cache_trim_decay_rate 参数和Counter程序的半衰期相关,该值越小,则半衰期越短。

默认参数值过于保守,下当为了提高Trim速度,推荐将 mds_cache_trim_threshold 参数提升到100倍,将mds_cache_trim_decay_rate参数降低到100倍。在任意一台CEPH主机中运行命令:

ceph config set mds mds_cache_trim_threshold 25600000
ceph config set mds mds_cache_trim_decay_rate 0.01