一、FastDFS服務器端運行時目錄結構
${base_path}
|__data:存放數據文件
|__logs:存放日志文件
其中,${base_path}由配置文件中的參數“base_path”設定。
1. tracker server
tracker server目錄及文件結構:
${base_path} ---- 網上說在這個路徑下查找,但是實際上本人找不到,而是在安裝tracker時創建的文件夾(/apps/fastdfs/tracker1/data)才找到
|__data
| |__storage_groups[_new].dat:存儲分組信息
| |__storage_servers[_new].dat:存儲服務器列表
|__logs
|__trackerd.log:tracker server日志文件
數據文件storage_groups.dat和storage_servers.dat中的記錄之間以換行符(/n)分隔,字段之間以西文逗號(,)分隔。
storage_groups.dat中的字段依次為:
- group_name:組名
- storage_port:storage server端口號
storage_servers.dat中記錄storage server相關信息,字段依次為:
- group_name:所屬組名
- ip_addr:ip地址
- status:狀態
- sync_src_ip_addr:向該storage server同步已有數據文件的源服務器
- sync_until_timestamp:同步已有數據文件的截至時間(UNIX時間戳)
- total_upload_count:上傳文件次數
- success_upload_count:成功上傳文件次數
- total_set_meta_count:更改meta data次數
- success_set_meta_count:成功更改meta data次數
- total_delete_count:刪除文件次數
- success_delete_count:成功刪除文件次數
- total_download_count:下載文件次數
- success_download_count:成功下載文件次數
- total_get_meta_count:獲取meta data次數
- success_get_meta_count:成功獲取meta data次數
- last_source_update:最近一次源頭更新時間(更新操作來自客戶端)
- last_sync_update:最近一次同步更新時間(更新操作來自其他storage server的同步)
2. storage server
storage server目錄及文件結構:
${base_path}
|__data
| |__.data_init_flag:當前storage server初始化信息 -- 沒找到
| |__storage_stat.dat:當前storage server統計信息
| |__sync:存放數據同步相關文件
| | |__binlog.index:當前的binlog(更新操作日志)文件索引號
| | |__binlog.###:存放更新操作記錄(日志)
| | |__${ip_addr}_${port}.mark:存放向目標服務器同步的完成情況
| |
| |__一級目錄:256個存放數據文件的目錄,目錄名為十六進制字符,如:00, 1F
| |__二級目錄:256個存放數據文件的目錄,目錄名為十六進制字符,如:0A, CF
|__logs
|__storaged.log:storage server日志文件
.data_init_flag文件格式為ini配置文件方式,各個參數如下:
- storage_join_time:本storage server創建時間
- sync_old_done:本storage server是否已完成同步的標志(源服務器向本服務器同步已有數據)
- sync_src_server:向本服務器同步已有數據的源服務器IP地址,沒有則為空
- sync_until_timestamp:同步已有數據文件截至時間(UNIX時間戳)
storage_stat.dat文件格式為ini配置文件方式,各個參數如下:
- total_upload_count:上傳文件次數
- success_upload_count:成功上傳文件次數
- total_set_meta_count:更改meta data次數
- success_set_meta_count:成功更改meta data次數
- total_delete_count:刪除文件次數
- success_delete_count:成功刪除文件次數
- total_download_count:下載文件次數
- success_download_count:成功下載文件次數
- total_get_meta_count:獲取meta data次數
- success_get_meta_count:成功獲取meta data次數
- last_source_update:最近一次源頭更新時間(更新操作來自客戶端)
- last_sync_update:最近一次同步更新時間(更新操作來自其他storage server)
binlog.index中只有一個數據項:當前binlog的文件索引號
binlog.###,###為索引號對應的3位十進制字符,不足三位,前面補0。索引號基於0,最大為999。一個binlog文件最大為1GB。記錄之間以換行符(/n)分隔,字段之間以西文空格分隔。字段依次為:
- timestamp:更新發生時間(Unix時間戳)
- op_type:操作類型,一個字符
- filename:操作(更新)的文件名,包括相對路徑,如:5A/3D/FE_93_SJZ7pAAAO_BXYD.S
${ip_addr}_${port}.mark
ip_addr為同步的目標服務器IP地址,port為本組storage server端口。例如:10.0.0.1_23000.mark。文件格式為ini配置文件方式,各個參數如下:
- binlog_index:已處理(同步)到的binlog索引號
- binlog_offset:已處理(同步)到的binlog文件偏移量(字節數)
- need_sync_old:同步已有數據文件標記,0表示沒有數據文件需要同步
- sync_old_done:同步已有數據文件是否完成標記,0表示未完成,1表示已完成
- until_timestamp:同步已有數據截至時間點(UNIX時間戳)
- scan_row_count:已掃描的binlog記錄數
- sync_row_count:已同步的binlog記錄數
數據文件名由系統自動生成,包括三部分:當前時間(Unix時間戳)、文件大小(字節數)和隨機數。文件名長度為16字節。文件按照PJW Hash算法hash到65536(256*256)個目錄中分散存儲。
二、FastDFS同步相關文件
1. 192.168.178.10_23002.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(192.168.0.2)的源結點,同時是否需要從起點同步所有的記錄 sync_old_done:是否同步完成過 until_timestamp:上次同步時間結點 scan_row_count:總記錄數
2. binlog.000
內容如下:
1581001242 c M00/00/00/wKiyCl48KhqATsPqAABdrZgsqUU663.jpg 1581001242 c M00/00/00/wKiyCl48KhqATsPqAABdrZgsqUU663.jpg-m 1581001242 c M00/00/00/wKiyCl48KhqATsPqAABdrZgsqUU663_big.jpg 1581001242 c M00/00/00/wKiyCl48KhqATsPqAABdrZgsqUU663_big.jpg-m
解釋如下:
1457547668:同步時間戳
C:標記文件類型:C 源創建;A 源追加; D 源刪除; T 源Truncate。
對應的小寫字母則為副本,如c 副本創建。
M00/00/00/wKiyCl48KhqATsPqAABdrZgsqUU663.jpg:文件名
3. binlog.index
內容如下:
#現有binlog數 0
三、新增節點同步
注意事項:對於非源storage,只上傳指定時間結點后的源文件給新增結點,副本文件不處理。對於源結點,需要把時間結點前所有文件(源和副)傳給新結點。Storage的狀態的主要意義,給tracker用來判定哪些active的結點可以服務。啟動同步過程中,源結點狀態不改變,可以正常存儲文件。
四、正常文件同步
注意事項:正常文件上傳完成后,就記錄近binlog緩存中,系統定時刷入binlog文件。系統有線程定時讀取binlog文件,當有新增行時,判斷該記錄是源文件記錄還是副本文件記錄。系統只主動發送源文件,副本文件不做處理(非啟動時流程)。