1.FastDFS 是什么
??? FastDFS是一款類Google?FS的開源分布式文件系統,它用純C語言實現,支持Linux、FreeBSD、AIX等UNIX系統。它只能通過 專有API對文件進行存取訪問,不支持POSIX接口方式,不能mount使用。
??? 準確地講,Google?FS以及FastDFS、mogileFS、 HDFS、TFS等類Google?FS都不是系統級的分布式文件系統,而是應用級的分布式文件存儲服務。
??? FastDFS的作者是余慶,現在淘寶網Java中間件團隊從事Java基礎平臺研發工作。
以上文字引用自<<程序員>> 文章 <<分布式文件系統FastDFS架構剖析>> http://www.programmer.com.cn/tag/fastdfs- 架構/
?
2.FastDFS 的體系結構
?
?
3.FastDFS 工作過程
1.?Client詢問Tracker?server上傳到的Storage?server;
2.?Tracker?server返回一臺可用的Storage?server,返回的數據為該Storage?server的IP地址和端口;
3.?Client直接和該Storage?server建立連接,進行 文件上傳 ,Storage?server返回新生成的文件ID, 文件上傳 結束。
?
?
1.?Client詢問Tracker?server可以下載指定文件的Storage?server,參數為文件ID(包含組名和文件名);
2.?Tracker?server返回一臺可用的Storage?server;
3.?Client直接和該Storage?server建立連接,完成文件下載。
?
?
FastDFS從V1.20開始,支持通過HTTP協議下載文件。
1.用戶瀏覽器訪問Tracker?server內置的Web Server,URL中包含文件ID(包含組名和文件名);
2.Tracker?server將這個HTTP請求redirect到一臺可用的Storage?server的Web Server上(可以是apache或nginx);
3.用戶瀏覽器直接與Storage?server的Web Serverr建立連接,完成文件下載。
?
?
4 .客戶端訪問方式
有兩種客戶端訪問方式,一種直接訪問前端tracker server ,tracker_server將請求redirect到后端能提供服務的storage server,storage server收到請求后直接返回文件給客戶端
一種是客戶端直接訪問storage server請求得到結果,storage server 可以使用自己的簡單HTTP服務,也可以用fastdfs-nginx-module和nginx、apache整合提供HTTP服務。
?
5.
服務器端目錄結構
FastDFS服務器端運行時目錄結構如下:
${base_path}
????? |__data:存放狀態文件
?? ?? |__logs:存放日志文件
其中,${base_path}由配置文件中的參數“base_path”設定。
2.2.1 tracker server結構
tracker server目錄及文件結構:
${base_path}
??? |__data
?? ?? |???? |__storage_groups.dat:存儲分組信息
?? ?? |???? |__storage_servers.dat:存儲服務器列表
?? ???? |__logs
???????????? |__trackerd.log:tracker server日志文件
數據文件storage_groups.dat和storage_servers.dat中的記錄之間以換行符(\n)分隔,字段之間以西文逗號(,)分隔。
storage_groups.dat中的字段依次為:
(1) group_name:組名
(2) storage_port:storage server端口號
storage_servers.dat中記錄storage server相關信息,字段依次為:
(1) group_name:所屬組名
?? (2) ip_addr:ip地址
?? (3) status:狀態
(4) sync_src_ip_addr:向該storage server同步已有數據文件的源服務器
(5) sync_until_timestamp:同步已有數據文件的截至時間(UNIX時間戳)
(6) stat.total_upload_count:上傳文件次數
(7) stat.success_upload_count:成功上傳文件次數
(8) stat.total_set_meta_count:更改meta data次數
(9) stat.success_set_meta_count:成功更改meta data次數
(10) stat.total_delete_count:刪除文件次數
(11) stat.success_delete_count:成功刪除文件次數
(12) stat.total_download_count:下載文件次數
(13) stat.success_download_count:成功下載文件次數
(14) stat.total_get_meta_count:獲取meta data次數
(15) stat.success_get_meta_count:成功獲取meta data次數
(16) stat.last_source_update:最近一次源頭更新時間(更新操作來自客戶端)
(17) stat.last_sync_update:最近一次同步更新時間(更新操作來自其他storage server的同步)
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)分隔,字段之間以西文空格分隔。字段依次為:
(1)timestamp:更新發生時間(Unix時間戳)
(2)op_type:操作類型,一個字符
(3)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,默認配置下)個目錄中分散存儲。
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
