FastDFS tracker leader机制介绍
Posted Huazie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FastDFS tracker leader机制介绍相关的知识,希望对你有一定的参考价值。
FastDFS tracker leader机制介绍
本篇文章转载于FastDFS作者 余庆 大佬的 FastDFS分享与交流 公众号。
1. trunk server
FastDFS tracker server 不保存文件索引,只保存集群拓扑信息。
按照原始设计,FastDFS 多台 tracker server 是完全对等的,不存在主从关系。FastDFS v3.0 开始支持文件合并存储,而 trunk 空间管理由一个 group 的一台 storage server 兼任,我们把这一角色称作 trunk server。trunk server 由tracker server 来指定,如果多台 tracker server 都可以指定 trunk server,那么很可能出现混乱和冲突。于是v3.0开始支持 tracker leader 和 follower 机制,集群相关的重大事项均由leader决定,比如 trunk server 由 tracker leader 来分配。
2. tracker leader
tracker server 对节点数没有要求,并且考虑到业界流行的 leader 选举算法 Raft 算法比较复杂,因此采用了基于规则的简单算法,尽可能选出最靠谱的 leader,我们可以将其理解为论资排辈算法。tracker leader 的选举包含预选和确认两个动作,其中 ”确认“ 是由预选出来的 leader 将其身份通知给各个 tracker server。下面介绍一下预选规则和步骤:
-
如果一台 tracker server 已经是 leader 了,那么保留它的资格,否则到下一步;
-
选择运行时间最长的 tracker server,如果均相同到下一步;
-
选择重启时间间隔最短的 tracker server,如果均相同到下一步;
-
选择 IP 地址最大的 tracker server,如果均相同到下一步;
-
选择端口最大的 tracker server。
注: 运行时间和重启时间间隔,按300秒取整加以钝化,以消除批量重启多个fdfs_trackerd实例的微小时间差异,使得钝化后的时间一致。
tracker leader 选举出来后,follower 定期(目前是每秒)通过 ping 检测 leader 是否存活。如果连续三次 ping leader 失败,则重新选举 leader。
简单起见,以两台 tracker server 为例说明分布式系统著名的脑裂现象。如果两台tracker server 之间因某种原因(比如路由器或交换机故障)导致不能相互通信,这时候就会发生两台 tracker server 均认为自己是 leader 的情况,产生脑裂。如果两台 tracker server 之间的网络通道不能恢复畅通,那么脑裂现象将会一直持续。
FastDFS对可能存在的tracker leader脑裂问题又是如何解决的呢?
解决方法其实很简单,引入 storage server 作为观察者和协调者即可。storage server 向所有 tracker server 定期报告其状态(包括磁盘可用空间、文件操作统计信息等等),tracker leader 在返回的 response 中会告诉 storage server 其身份,然后 storage server 就知道 tracker leader 是否出现多个的异常了。如果出现了多个 leader,storage server 将通知这些 tracker server 重新选举 leader。
总结
感谢大家的耐心阅读。最后再啰嗦一句,FastDFS奉行简单就好的原则,衷心希望FastDFS的简洁设计风格能够给聪明的你带来一点启迪和帮助。
以上是关于FastDFS tracker leader机制介绍的主要内容,如果未能解决你的问题,请参考以下文章