1. 數據存儲
在fdfs傳一份文件時,通常會返回下面的一串字符,這包含了該文件在服務器端一些存儲信息
M00/00/00/wKg4C1tFmTWAFPKBAADdeFFxlXA240.png
下面解釋一下這串東西都是什么:
group1:
是storage的組號,一個fastdfs集群可以有多個組,一個組內可以有多個storage節點(備份容災)M00:
Mxx:xx為十六進制字符,表示存放的基路徑(base path)序號。如果存放的base path只有一個,那固定就是M00,這樣FastDFS支持多個磁盤(base path),所以要通過Mxx來區分,其中xx為磁盤的序號,基於0。
數據就可以根據
store_path0=/data/fastdfs/storage # 如果store_path0沒有就去找base_path存數據,兩個是一樣的,所有固定為M00/00/01/:
store_path0=/data/fastdfs/storage配置的目錄下的目錄,用於存放上傳的數據
- store_path0下都是些什么?
所有的文件都在這些目錄下的一層目錄,存儲着上傳的所有數據,其中/data/sync目錄下存放着fastdfs的binlog日志
- 支持多磁盤
Fastdfs支持多磁盤存儲,配置方法如下:
首先修改storage.conf
store_path_count=2 store_path0=磁盤1路徑 store_path1=磁盤2路徑
然后修改mod_fastdfs.conf(與上邊保持一致)
store_path_count=2 store_path0=磁盤1路徑 store_path1=磁盤2路徑
2. 同步記錄
2.1 數據同步過程
2.1.1 Storage Server中有兩類用於同步的線程:
-
Storage Server會為文件系統中的每一個Tracker啟動一個線程
1)用於與Tracker之間通信。
2)實現心跳反饋機制,默認每30秒發送向Tracker發送一次心跳包,包含同組內其他Storage信息。
3)通過這一線程從Tracker中獲取Storage列表信息 -
Storage會為同組的每一個Storage開啟一個線程
1)從Tracer獲取到同組內其他Storage Server信息,根據binlog向這些Storage Server同步數據(阻塞方式)。
2)如果組內有三個Storage,那么每個Storage都會啟動兩個線程用於向其他Storage同步數據。
3)打開/data/sync的mark文件,讀取目標Storage_Server_IP.mark文件,獲取對應的binlog文件以及同步的offset。
4)在對應的binlog文件中找到offset對應的文件操作,如果這已操作是源操作(CADT),則將操作將數據向外同步。同步完成后更新mark文件的offset值
2.1.2 Storage Server同步相關目錄、文件:
當Storaged server啟動時會創建一個 base_path/data/sync 同步目錄,該目錄中的文件都是和同組內的其它 Storaged server之間的同步信息。
-
mark文件
例如下圖是同組內一個新加入storage后產生的mark文件。
說明:
1)這個storage server對新入組的Storage Server發起了數據同步
2)數據同步的動作(增加,刪除)依據binlog.000中的記錄
3)同步的進度是binlog.000的2204(offset)
4)掃描了38行
5)同步了38行所記錄的操作# 目錄下結構 192.168.1.2_33450.mark 192.168.1.3_33450.mark binlog.000 binlog.index binlog.index # 記錄當前使用的Binlog文件序號,如為10,則表示使用binlog.010 binlog.100 # 真實地Binlog文件 192.168.1.2_33450.mark # 同步狀態文件,記錄本機到192.168.1.2_33450的同步狀態
-
binlog文件
Binlog文件記錄文件上傳、刪除等更新操作(對文件的操作,而不是文件的內容),是數據同步的依據。
下面看看binlog到底記錄些什么?
說明:
其中的每一條記錄都是使用空格符分成三個字段: 第一個字段: 表示文件upload時間戳 如:1529376942 第二個字段: 表 示文件執行操作,值為: C :表示源創建 c:表示副本 A:表示源追加 a:表示副本追加 D:表示源刪除 d:表示副本 T:表示源Truncate t:表示副本Trunca 其中源表示客戶端直接操作的那個Storage即為源,其他的Storage都為副本 第三個字段為存儲文件信息描述
當上傳一個文件后,binlog文件多了這么一行
1531384360 C M00/00/00/wKg4C1tHEiiAWR8JAAAGkHPTQkQ1899.sh
,記錄了在這個Storage Server上上傳了一個文件;文件的存儲名為wKg4C1tHEiiAWR8JAAAGkHPTQkQ1899.sh
,C表示源創建,這時這個文件會向同組內的其他Storage Server同步該文件。 delete 亦是如此!root@ubuntu03:~/fastdfs# fdfs_upload_file /etc/fdfs/client.conf ./stop.sh group2/M00/00/00/wKg4C1tHEiiAWR8JAAAGkHPTQkQ1899.sh