1 storage启动后会进行全量同步,由traceker分配src_id, 当指定的src_id通过心跳发现需要同步后开启线程全量同步
2 storage启动后会针对storage开启n个数量的线程进行同步,采用push的方式,由源发起向目的推送
3 从头到尾storage的一切信息都是通过tracker获取
4 storage的其中状态仅为新加入的storage进行全量同步时的状态,当成为FDFS_STORAGE_STATUS_ACTIVE即可服务
5 磁盘同步最好的文章 点击打开链接
6 合并分区最好的文章 点击打开链接
7 binlog同步 点击打开链接
8 选主与心跳 点击打开链接
9 里面很重要的数据结构就是pTask,该结构是网络传递的结构体,同样在接受完信息后,利用继续进行传递,重复利用,并且task有pool,而不是一直分配,这单很巧妙
10 nContinuousFail来记录失败次数一般是可以重试的错误,g_continue_flag不可继续的标志位直接退出
11 if (pReader->binlog_index >= g_binlog_index) binlog是一边读一边写,写入根据缓冲区大小g_binlog_index++,所以读文件的时候与当前最大对比,可以判断当前文件是写满了还是未写满,未写满持续读取,写满了pReader->binlog_index++,并且读取是将整个文件大小缓冲区读入,按行分析
12 通过last_heart_beat_time使得tracker与storage保持关系,更新一系列信息比如(*ppGroup)->active_servers,同时storage通过自己的心跳将tracker_servers的信息同步给tracker进行更新。
13 多个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的情况)
14 通过tcpsendfile_ex发送图片文件同步
15 通过FDFS_STORAGE_STAGE_NIO_RECV与FDFS_STORAGE_STAGE_NIO_SEND两个状态进行信息接收与发送