FastDFS之Tracker-Leader选择和tracker server间通信

来源:互联网 发布:网络屏蔽器软件下载 编辑:程序博客网 时间:2024/05/16 12:39

FastDFSTracker-Leader选择

 

基于FastDFS 5.03/5.04

 

一、Tracker-Leader概述

FastDFS之中,可以任意配置多个Tracker,在运行过程中会选择其中一个作为Leader,由该Leader执行一些唯一性的操作。在早期版本中Tracker-Leader有两个作用,分别是:为新加入的Storage分配一个源Storage;为开启合并存储的Group选择Trunk-Server。但是在最新的版本中实际上只有第二个作用,也就是选择Trunk-Server。对于新加入Storage分配源其实是任何一个Tracker都可以进行的,为了避免多次分配,在Storage请求Tracker分配源时进行了互斥量同步。

这部分的源码在tracker/tracker-relationship.c文件之中。

 

二、Tracker-Relationship线程

Tracker程序启动后,会启动一个Relationship线程,专门负责Leader的选择,与同Leader的通讯(若自己不是Leader)。

该线程的逻辑很简单,检查内存结构是否设置了Leader,若没有设置Leader,则选择一个Leader,否则向该Leader执行一个Ping操作。

 

1、选择(查询)Leader

relationship_select_leader函数

1)向所有的Tracker(包括自己)发送一个TRACKER_GET_STATUS命令,来获取对方的状态信息,该信息包括:是否为Leader;到目前的运行时间;上次停止时间间隔(也就是最后一次停止到启动的时间间隔);只要获取到至少一个该状态成功,则继续下一步:

2)对所有返回成功的Tracker-Status进行排序(根据上一步的信息顺序比较),获得状态值最高的Tracker

3)若状态最高的Tracker就是自己,那么进入一个两阶段提交协议:

通知除自己之外的所有Tracker,将要变更Tracker-Leader,只要有一个Tracker通知成功,则进入下一步;

通知所有的Tracker(包括自己),将Leader变更成自己,只要有一个Tracker返回成功,则表示整个变更成功;(此处通知了自己,那么这个步骤肯定会成功)。

4)若最高状态的Tracker当前就是Leader,那么就设置本地标志为g_tracker_servers.leader_index,表示Leader已经确定。

5)否则,等待真正的Leader发起Leader变更消息

 

这里的逻辑,多少让人不放心,若有三个或以上的Tracker并且中间出现网络不通的情况,很有可能会产生两个Leader。不过要记住,Leader只有在开启了合并存储时,才使用来选择Trunk-Server。其他时候是没用的。

 

2、与Leader心跳(Ping)

relationship_ping_leader函数

Tracker-Leader发送一个TRACKER_PING_LEADER消息,该Tracker将响应一个数组,该数组每个成员为一个结构体如下:

{group_nametrunk-server-id}

通知这个消息可以从Leader中获取每个Group当前的Trunk-Server是哪个。

多个tracker server的数据通信

多个tracker server只有在启动时,会采用一定的策略,到其他tracker server上获取4个系统文件。
在V2.03的ChangeLog中说过这个事情,摘录如下:
  多个tracker server并存时,在tracker启动后,当第一个storage server加入时,
      tracker server根据一定条件去其他tracker上获取如下4个系统文件:
         storage_groups_new.dat
         storage_servers_new.dat
         storage_changelog.dat
         storage_sync_timestamp.dat
      获取成功后,将重新加载这4个系统文件。

      向其他tracker server获取系统文件的条件包括如下两种情况:
         I.  tracker服务停止后,重启时间间隔大于2个小时(避免系统数据过旧)
         II. tracker中还没有storage server分组信息(通常是新增加tracker server的情况)

0 0
原创粉丝点击