这是mds新手入门篇,主要内容讲述mds冷备,热备区别和重放的关系。我们只讨论单active mds的情况
一,mds的冷备
1, 我们用ceph-deploy mds create {host-name}创建一个mds, 这时候会有一个active的mds作为文件系统的元数据缓存来为文件系统提供服务,mds缓存了dentry,并且以lru算法的缓存淘汰方式把dentry缓存在了内存中。我们可以设置mds的日志log为 20/20 (命令:ceph tell mds.[name] injectargs '--debug_mds 20/20'),然后再日志中查看cur的值来查看lru链表的长度。
2,如果我们在其他主机上又创建一个mds,默认是冷备的。创建好2个mds 后如下图,一个 active的mds,一个standy的mds
3,我们查看冷备mds的日志后发现,冷备的mds,基本上不做任何事情,只调用handle_mds_beacon()这个函数
我们查看一下这个函数内容,发现这个standy mds的函数基本上只和monitor维护一个心跳的动作,其他啥也不做
4, 我们这时候把active mds 关掉,这时候standy mds,就会变成active mds,再查看日志发现之前的standy mds也就是现在的active mds在一直执行replay操作,因为之前做standy mds的时候是没有缓存lru数据的,这时候他要把之前缓存的lru数据读进来。
总结:这就是冷备,备份的mds,只起到一个进程备份的作用,并不备份lru元数据。主备进程保持心跳关系,一旦主的mds挂了,备份mds replay()元数据到缓存,当然这需要消耗一点时间。
二,mds的热备
1, 我们首先创建一个mds,默认是 active mds。 我们再创建一个mds,默认为备份mds,我们在备份mds启动的时候,指定他为热备。
--hot-standby <rank>
Start as a hot standby for MDS <rank>.
命令为:ceph-mds -i [mds_name] --hot-standby 0
其中0为主mds的rank值
创建后,结果如下:
这个备份mds不仅仅叫standby 了,而叫:standby-replay。
我们看看这个热备的mds执行什么操作。
发现热备的mds在时时刻刻做replay的操作。也就是说除了进程备份,他的元数据缓存还时时刻刻的与主mds保持同步。
2,当 active mds挂掉后,热备的mds直接变成主mds,并且没有replay()的操作,元数据缓存大小和主mds保持一致
---------------------
作者:--小史--
来源:CSDN
原文:https://blog.csdn.net/a1454927420/article/details/79086759
版权声明:本文为博主原创文章,转载请附上博文链接!