searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ceph trim pglog

2023-10-27 06:24:56
31
0
PGLog的记录数是有限制的,正常情况下默认是3000条(由参数osd_min_pg_log_entries控制),PG降级情况下默认增加到3000条(由配置osd_max_pg_log_entries设置)。当达到限制时,就会trim log。
 
trim log会调用ReplicatedPG::calc_trim_to()来进行计算。计算的时候从log的tail(tail指向最老的记录的前一个)开始,需要trim的条数为log.head-log.tail-max_entries。但是trim的时候需要考虑到min_last_complete_ondisk(这个表示各个副本上last_complete的最小版本,是主OSD在收到3个副本都完成时再进行计算的,也就是计算last_complete_ondisk和其他副本OSD上的last_complete_ondisk,即peer_last_complete_ondisk的最小值得到min_last_complete_ondisk。last_complete: 在该指针之前的版本都已经在所有的OSD上完成更新(只表示内存更新完成);last_complete主要是跟recovery相关),也就是说trim的时候不能超过min_last_complete_ondisk,因为超过了也trim掉的话就会导致没有更新到磁盘上的pg log丢失。所以说可能存在某个时刻,pglog的记录数超过max_entries。源码如下:
 
举例如下:log tail的eversion为1000,log head的eversion为5000,配置的max_entries为3000(osd_max_pg_log_entries),那么此次删除的new_trim_to=5000-3000,由于limit(即min_last_complate)为1800,所以不能删超过last_complete的部分,即最终pg_trim_to的结果为1800。
 
 
0条评论
0 / 1000