【分析】Ceph数据一致性检查

来源:互联网 发布:java让session失效 编辑:程序博客网 时间:2024/03/29 14:12

        一般分布式或网络存储系统的协议栈如下图所示。


        数据损坏的情况会发生在系统的所有模块中:

        1. 硬件错误,如内存、CPU、网卡等

        2. 数据传输过程中的信噪干扰,如SATA、FC等协议

        3. 固件问题,如RAID控制器、磁盘控制器等

        4. 软件问题,如操作系统的内核问题、本地文件系统问题,网络系统问题、通用块层问题、IO调度层问题等。

 

        在传统的高端磁盘阵列中,一般采用端到端的数据校验实现数据的一致性。

        何谓端到端的数据校验?

        是指应用层在写入数据时,在经过每个数据模块时,都计算并增加一个校验和信息,并将这些校验和信息和数据块一起发送至磁盘。磁盘在接收到数据包之后,会重新校验信息,并和接收到的校验信息做对比。如果不一致,就认为在IO路径上发生了错误。同样在数据读取时,应用层在获取数据块和从磁盘读取到校验信息后,也需要再次校验一致性。

        从技术思路上来看,这种解决方案实际上就是前馈校验。在通信系统中,这种技术被大量应用,并且接收端在发现错误的时候能够从纠错码中恢复出数据。在没有这种技术支撑的情况下,存储应用中为了保证数据写入的可靠性,在数据写完成之后还需要通过读操作来验证数据的正确性。后者是反馈校验方法。从这点上来看,端到端校验有一定的优势,采用前馈的方式,在不太影响IO性能的情况下,可以提高数据读写的完整性。

        但是通过端到端的数据校验方法,应用层可以明确地知道IO写入的数据是否成功写入,读取的数据是否正确。可以提高数据读写的完整性。

        但是这种方式还具有一些缺点:

1. 无法解决目的地址错误导致的数据损坏问题。

2. 端到端的解决方案需要在整个IO路径上附件校验信息。而目前IO协议栈设计的模块比较多。每个模块都附件校验信息实现起来具有很大难度。

        关于这种端对端的数据校验,还可以参考博客《SCSI中端到端校验能解决数据完整性问题吗?》http://alanwu.blog.51cto.com/3652632/1093600/

        而对于ceph这种分布式分文件系统,端到端的数据校验对IO性能影响比较大,所以ceph并没有实现端到端的数据校验。