Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1089699
  • 博文数量: 143
  • 博客积分: 969
  • 博客等级: 准尉
  • 技术积分: 1765
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-30 12:09
文章分类

全部博文(143)

文章存档

2023年(4)

2021年(2)

2020年(4)

2019年(4)

2018年(33)

2017年(6)

2016年(13)

2014年(7)

2013年(23)

2012年(33)

2011年(14)

我的朋友

分类: LINUX

2016-09-01 18:59:50

Tracker 和storage 同步

       tracker server的配置文件中没有出现storage server,而storage server的配置文件中会列举出所有的tracker server。这就决定了storage servertracker server之间的连接由storage server主动发起,storage server为每个tracker server启动一个线程进行连接和通讯,这部分的通信协议请参阅 FastDFS协议“2. storage server to tracker server command”

tracker server会在内存中保存storage分组及各个组下的storage server,并将连接过自己的storage server及其分组保存到data目录下的storage_groups_new.dat文件中,以便下次重启服务时能直接从本地磁盘中获得storage相关信息。storage server会在内存中记录本组的所有服务器,并将服务器信息记录到文件中。tracker serverstorage server之间相互同步storage server列表:

     1. 如果一个组内增加了新的storage server或者storage server的状态发生了改变,tracker server都会将storage server列表同步给该组内的所有storage server。以新增storage server为例,因为新加入的storage server主动连接tracker servertracker server发现有新的storage server加入,就会将该组内所有的storage server返回给新加入的storage server,并重新将该组的storage server列表返回给该组内的其他storage server

2. 如果新增加一台tracker serverstorage server连接该tracker server,发现该tracker server返回的本组storage server列表比本机记录的要少,就会将该tracker server上没有的storage server同步给该tracker server

RACKER_PROTO_CMD_STORAGE_JOIN

 Storage连接tracker 后上报group nameportstorage path,所连接的tracker信息

TRACKER_PROTO_CMD_STORAGE_REPORT_STATUS   

上报storage的状态信息到tracker tracker根据上报状态,决定上传或下载是否到该storage

TRACKER_PROTO_CMD_STORAGE_REPLICA_CHG  上报不在tracker 中的storage

TRACKER_PROTO_CMD_STORAGE_SYNC_SRC_REQ  storage tracker获取同步源

TRACKER_PROTO_CMD_STORAGE_SYNC_DEST_REQ  获取同步目的地址

TRACKER_PROTO_CMD_STORAGE_SYNC_NOTIFY  通知tracker 开始同步数据

上传文件同步

同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行。文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器。以文件上传为例,假设一个组内有3storage server ABC,文件F上传到服务器B,由B将文件F同步到其余的两台服务器AC。我们不妨把文件F上传到服务器B的操作为源头操作,在服务器B上的F文件为源头数据;文件F被同步到服务器AC的操作为备份操作,在AC上的F文件为备份数据。

同步规则总结如下:

1.       只在本组内的storage server之间进行同步;

2.       源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;

3.       上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。

新增storage同步

storage server7个状态,如下:

  # FDFS_STORAGE_STATUS_INIT      :初始化,尚未得到同步已有数据的源服务器
       # FDFS_STORAGE_STATUS_WAIT_SYNC :
等待同步,已得到同步已有数据的源服务器
       # FDFS_STORAGE_STATUS_SYNCING   :
同步中
       # FDFS_STORAGE_STATUS_DELETED   :
已删除,该服务器从本组中摘除

  # FDFS_STORAGE_STATUS_OFFLINE   :离线

  # FDFS_STORAGE_STATUS_ONLINE    :在线,尚不能提供服务

  # FDFS_STORAGE_STATUS_ACTIVE    :在线,可以提供服务

storage server的状态为FDFS_STORAGE_STATUS_ONLINE时,当该storage servertracker server发起一次heart beat时,tracker server将其状态更改为FDFS_STORAGE_STATUS_ACTIVE

组内新增加一台storage server A时,由系统自动完成已有数据同步,处理逻辑如下:

 1. storage server A连接tracker servertracker serverstorage server A的状态设置为FDFS_STORAGE_STATUS_INITstorage server A询问追加同步的源服务器和追加同步截至时间点,如果该组内只有storage server A或该组内已成功上传的文件数为0,则没有数据需要同步,storage server A就可以提供在线服务,此时tracker将其状态设置为FDFS_STORAGE_STATUS_ONLINE,否则tracker server将其状态设置为FDFS_STORAGE_STATUS_WAIT_SYNC,进入第二步的处理;

 2. 假设tracker server分配向storage server A同步已有数据的源storage serverB。同组的storage servertracker server通讯得知新增了storage server A,将启动同步线程,并向tracker server询问向storage server A追加同步的源服务器和截至时间点。storage server B将把截至时间点之前的所有数据同步给storage server A;而其余的storage server从截至时间点之后进行正常同步,只把源头数据同步给storage server A。到了截至时间点之后,storage server Bstorage server A的同步将由追加同步切换为正常同步,只同步源头数据;

 3. storage server Bstorage server A同步完所有数据,暂时没有数据要同步时,storage server B请求tracker serverstorage server A的状态设置为FDFS_STORAGE_STATUS_ONLINE

 4. storage server Atracker server发起heart beat时,tracker server将其状态更改为FDFS_STORAGE_STATUS_ACTIVE

 

阅读(2850) | 评论(0) | 转发(0) |
0

上一篇:FastDFS协议

下一篇:JVM架构

给主人留下些什么吧!~~