Scrub主要是为了检查磁盘数据的静默错误,在英文中被称为:Silent Data Corruption,大家都知道硬盘最核心的使命是正确的读取和写入数据,在读、写失败的情况下及时抛出异常,但是在某些场景下,写入成功,读取的时候才发现数据已经损坏,这就是静默错误,一般静默错误产生原因有这几种:
Ceph的scrub类似于文件系统的 fsck,对于每个 pg,Ceph生成所有对象的列表,并比较每个对象多个副本,以确保没有对象丢失或数据不一致。Ceph的scrub主要分两种:
(1)Scrub:对比对象各个副本的元数据来检查元数据的一致性;
(2)Deep scrub:检查对象各个副本数据内容是否一致,耗时长,占用IO资源多;scrub 对于数据一致性十分重要


scrub job 生产流程

scrub job消费流程

一个文件将数据写入到Pool资源池的过程:
首先客户端会从Cluster Map中读取到集群各节点的信息,要写入存储的文件会被拆分成多个Object对象,这些Object对象都会被写入到Pool资源池中,PG是建立在Pool资源池中的,一个Pool资源池中会有多个PG载体,Object对象文件最终会被存放在Pool资源池的PG目录中,最后再通过CRUSH Rule算法将数据文件写入到不同的OSD中。
由一次slow-request浅谈Ceph scrub原理 https://juejin.cn/post/6844903731784335374