FastDFS同步相關文件:
a)10.100.66.82_23000.mark
內容如下:
binlog_index=0
binlog_offset=1334
need_sync_old=1
sync_old_done=1
until_timestamp=1457542256
scan_row_count=23
sync_row_count=11
解釋:
binlog_index:對應於哪個binlog
binlog_offset:binlog.xxx的偏移量,可以直接這個偏移量獲取下一行記錄
need_sync_old:本storage是否是對側storage(10.100.66.82)的源結點,同時是否需要從起點同步所有的記錄
sync_old_done:是否同步完成過
until_timestamp:上次同步時間結點
scan_row_count:總記錄數
sync_row_count:已同步記錄數
b)binlog.000
內容如下
1457547668 C M00/00/00/CmRCUVbgaZSAGzKjAACkimfedYQ366.jpg
解釋:
1457547668:同步時間戳
C:標記文件類型:C 源創建;A 源追加; D 源刪除; T 源Truncate。
對應的小寫字母則為副本,如c 副本創建。
M00/00/00/CmRCUVbgaZSAGzKjAACkimfedYQ366.jpg:文件名
c)binlog.index
內容如下
0
解釋:
現有binlog數。
新增結點同步流程圖
注意事項:
對於非源storage,只上傳指定時間結點后的源文件給新增結點,副本文件不處理。
對於源結點,需要把時間結點前所有文件(源和副)傳給新結點。
同步完成后,B主動發消息給tracker,修改tracker中A的狀態記錄。
A心跳獲取到tracker發過來的消息,修改自身狀態。
Storage的狀態的主要意義,給tracker用來判定哪些active的結點可以服務。
啟動同步過程中,源結點狀態不改變,可以正常存儲文件。
正常文件同步流程圖
注意事項:
正常文件上傳完成后,就記錄近binlog緩存中,系統定時刷入binlog文件。
系統有線程定時讀取binlog文件,當有新增行時,判斷該記錄是源文件記錄還是副本文件記錄。
系統只主動發送源文件,副本文件不做處理(非啟動時流程)。
圖中A的binlog中記錄的是源創建(C),B中記錄的是副本創建(c)。
Storage的狀態
a)狀態值:
#define FDFS_STORAGE_STATUS_INIT 0 //初始狀態
#define FDFS_STORAGE_STATUS_WAIT_SYNC 1 //等待同步
#define FDFS_STORAGE_STATUS_SYNCING 2 //同步中
#define FDFS_STORAGE_STATUS_IP_CHANGED 3
#define FDFS_STORAGE_STATUS_DELETED 4 //刪除結點
#define FDFS_STORAGE_STATUS_OFFLINE 5 //離線
#define FDFS_STORAGE_STATUS_ONLINE 6 //在線,但不可存服務
#define FDFS_STORAGE_STATUS_ACTIVE 7 //在線,可提供存儲服務
#define FDFS_STORAGE_STATUS_RECOVERY 9
#define FDFS_STORAGE_STATUS_NONE 99 //未知狀態
b)啟動時狀態改變:
i.storage server A連接tracker server,tracker server將storage server A的狀態設置為FDFS_STORAGE_STATUS_INIT。storage server A詢問追加同步的源服務器和追加同步截至時間點,如果該組內只有storage server A或該組內已成功上傳的文件數為0,則沒有數據需要同步,storage server A就可以提供在線服務,此時tracker將其狀態設置為FDFS_STORAGE_STATUS_OFFLINE,否則tracker server將其狀態設置為FDFS_STORAGE_STATUS_WAIT_SYNC,進入第二步的處理;
ii.假設tracker server 分配向storage server A同步已有數據的源storage server為B。同組的storage server和tracker server通訊得知新增了storage server A,將啟動同步線程,並向tracker server詢問向storage server A追加同步的源服務器和截至時間點。storage server B將把截至時間點之前的所有數據同步給storage server A;而其余的storage server從截至時間點之后進行正常同步,只把源頭數據同步給storage server A。到了截至時間點之后,storage server B對storage server A的同步將由追加同步切換為正常同步,只同步源頭數據;
iii.storage server B向storage server A同步完所有數據,暫時沒有數據要同步時,storage server B請求tracker server將storage server A的狀態設置為FDFS_STORAGE_STATUS_OFFLINE;
iv.當storage server A向tracker server發起heart beat時,tracker server將其狀態更改為FDFS_STORAGE_STATUS_ACTIVE。
Tracker選擇客戶端下載文件的storage的原則
a)在同group下,獲取最小的一個同步時間點(各個storage在同一時間,同步完成的時間點不一樣)
b)在最小同步時間點之前的文件,按照用戶的規則隨意選擇一個storage。
c)在最小同步時間點之后的文件,選擇源storage提供給客戶端。