ceph rbd的存储有两个层面的缓存
- rbd cache 在ceph.conf中可以定制这个缓存,有测试是否开启的方法,但是我自己的测试结果出来,感觉开了缓存和没开一个样。 送上关于这个缓存的一些资料
http://docs.ceph.com/docs/master/rbd/rbd-config-ref/
还有二次改造的 http://blog.csdn.net/lzw06061139/article/details/51203461
别人的结论 https://www.xsky.com/tec/ceph-weekly-vol-29/
检验rbd cache是否开启的 http://ceph.com/geen-categorie/ceph-validate-that-the-rbd-cache-is-active/
- etx4 cache rbd要让业务使用必然要先格式化一个文件系统,当然不一定是ext4,文件系统挂载的时候大多数默认是使用缓存的,有的也叫异步挂载。毕竟在内存中读写速度要比磁盘快的多,这样的问题就是,遇到断电,或者某种不合理的释放资源情况,内存的脏页来不及flush到disk,进而造成文件内容丢失或者丢失更新。 当然 你完全可以跳转挂载的参数避免这个问题,比如:
mount -t ext4 -o sync /dev/sdb1 /sdb1
这样不使用缓存,文件io会出奇的慢,简直难以忍受,不过这的确是最委托的办法 还有一个比较折中的办法 就在是umount之前,或者在即将回收资源之前运行一次sync命令,强制将内存脏页flush到硬盘,这样就妥了。不过你可得保证能调用到sync命令
docker容器启动有入口,但是stop的时候,会给进程发送SIGTERM信号,如果容器内的进程能正确的接收和处理这个信号,自然就能避免上述不合理的情况导致的文件内容损坏。