storage进程在启动之后,会从tracker获取本group内的其他节点信息。然后启动同步线程,每个节点一个线程,本节点除外。如group1内有3个节点分别为A、B、C。A节点会启动2个线程,分别用来同步本节点的源数据到B、C节点。
1)、A节点读取sync目录下的 B.mark文件,记录了上次同步的binlog的索引(1)及offset(5000)
2)、打开binlog.010 文件,seek 到5000
3)、循环按行读取binlog内容,并解析内容,对于源操作进行同步,备份的数不同步,否则会形成回路。标记大小字母的为源数据,小写字母的副本
#define STORAGE_OP_TYPE_SOURCE_CREATE_FILE 'C' //upload file
#define STORAGE_OP_TYPE_SOURCE_APPEND_FILE 'A' //append file
#define STORAGE_OP_TYPE_SOURCE_DELETE_FILE 'D' //delete file
#define STORAGE_OP_TYPE_SOURCE_UPDATE_FILE 'U' //for whole file update such as metadata file
#define STORAGE_OP_TYPE_SOURCE_MODIFY_FILE 'M' //for part modify
#define STORAGE_OP_TYPE_SOURCE_TRUNCATE_FILE 'T' //truncate file
#define STORAGE_OP_TYPE_SOURCE_CREATE_LINK 'L' //create symbol link
#define STORAGE_OP_TYPE_REPLICA_CREATE_FILE 'c'
#define STORAGE_OP_TYPE_REPLICA_APPEND_FILE 'a'
#define STORAGE_OP_TYPE_REPLICA_DELETE_FILE 'd'
#define STORAGE_OP_TYPE_REPLICA_UPDATE_FILE 'u'
#define STORAGE_OP_TYPE_REPLICA_MODIFY_FILE 'm'
#define STORAGE_OP_TYPE_REPLICA_TRUNCATE_FILE 't'
#define STORAGE_OP_TYPE_REPLICA_CREATE_LINK 'l'
4)storageA节点将源数据发送到storageB节点,B 节点接收到数据后,按操作类型进行处理,把文件下载到本地相应的目录,具体实现在storage_sync_data函数中处理
阅读(10603) | 评论(0) | 转发(0) |