1、前言
很多场景会导致集群数据进行迁移、恢复,比如磁盘损坏后换盘操作、集群扩容操作、机器下电维护后再次上电等等。数据恢复的时候会一定程度的影响客户端io,我们迫切需要大概知道数据啥时候可以恢复完成,下面就描述一种计算方法。
2、计算数据恢复需要的时间
计算方式:需要恢复的总对象数 / 每秒恢复的对象数 = 需要恢复的时间
比如下面的我测试环境例子:
[root@node6 ~]# ceph -s -f json-pretty|grep pgmap -A 50
"pgmap": {
...
"num_pgs": 256,
"num_pools": 3,
"num_objects": 23004,
"data_bytes": 96398382554,
"bytes_used": 163841966080,
"bytes_avail": 1554111397888,
"bytes_total": 1717953363968,
"inactive_pgs_ratio": 0.01171875,
"degraded_objects": 9046,
"degraded_total": 46008,
"degraded_ratio": 0.19661797948182921,
"recovering_objects_per_sec": 10,
"recovering_bytes_per_sec": 19948622,
"recovering_keys_per_sec": 0,
"num_objects_recovered": 30,
"num_bytes_recovered": 125829120,
"num_keys_recovered": 0
}
按照计算公式来计算:
需要恢复的对象总数 = "degraded_objects" + "misplaced_objects"(这里没有misplaced_objects,也就不用加了)
当前恢复的的速度 = "recovering_objects_per_sec"(这里的恢复速度是在变动的,可以多获取几次取个平均值)
需要恢复的时间 = 9046 / 10 = 大概900s
上面是计算整个集群的,如果需要计算某个pool级别的,可以使用 ceph osd pool stats -f json-pretty 来获取pool的 degraded_objects misplaced_objects和recovering_objects_per_sec值,然后计算方式和整个集群的计算方式一样。
好了,通过上面简单的计算就可以大概推算集群恢复完成的时间了。
网友评论