1. 程式人生 > >fastDFS文件服務器遷移

fastDFS文件服務器遷移

文件格式 tracker 個數 img 完成 列表 遷移 bin 不足

在實際的項目應用中,由於服務器替換或項目變更難免會存在fastDFS文件服務器遷移的工作。本文重點介紹fastDFS文件系統在不同情況下的文件遷移處理方案。

1.遷移時IP地址不變

通過文件服務器存儲規則定義,發現當ip地址沒有發生變化時,這種文件服務器遷移是最簡單的,只需要在新的服務器上安裝fastDFS,把原來服務器上的tracker和storage下面的所有目錄文件拷貝到新服務器,把所有的配置文件拷貝到新服務器,啟動tracker和storage服務即可。

2.遷移時IP地址變化采用自定義server ID模式安裝

在fastDFS文件服務器安裝時,若前期考慮了文件遷移的需求采用了自定義server ID特性安裝文件服務器(fastDFS安裝請參考上一篇博客:FastDFS與Nginx的配置說明),在做新文件遷移時僅需如下操作(這種遷移測試很簡單,變化ip時既可測試):

  • 安裝新的fastDFS文件服務器;
  • 關閉tracker服務和storage服務;
  • 拷貝原有文件服務器tracker和storage下面的所有目錄文件;
  • 拷貝原有文件服務器的配置文件,如圖:
  • 技術分享
  • 編輯stroage_ids.conf文件,修改新的ip地址,如下圖:
  • 技術分享
  • 修改client.conf,storage.conf,mod_fastdfs.conf(若配置了 Servier ID模式,可以不修改)文件中的ip地址為新的ip地址。
  • 啟動tracker服務和storage服務;
  • 利用ngigx測試下載以前服務器中存成的文件,下載原文件成功表示遷移成功。

3.遷移時IP地址變化采用默認配置安裝

在這種模式下,文件遷移本質就是替換ip地址,找到文件服務器中配置文件與ip地址相關的文件替換後就可以了。但不建議采用這種模式安裝,且一旦使用這樣的模式安裝後,需要切換為自定義 Server ID時,會報ip已經重復的異常,導致切換自定義安裝失敗(除非刪除以前的存儲文件)。為了遷移以前的文件數據,需進行如下操作:

  • 新服務器停止tracker和storage,分別將其數據文件目錄用舊服務器的文件替換掉。
  • 刪除新服務器data數據,使用舊服務器data替換
  • 修改tracker的data文件,主要是修改以下文件中的ip信息。
  1. data/storage_groups_new.dat
  2. data/storage_servers_new.dat
  3. data/storage_sync_timestamp.dat
  • 修改storage的data文件,主要是修改以下文件中的ip信息 。
  1. data/.data_init_flag
  2. data/sync/${ip_addr}_${port}.mark:此類文件,需要將文件名中的IP地址調整過來。若sync目錄下面沒有文件,可不修改。
  • 修改client.conf,storage.conf,mod_fastdfs.conf文件中的ip地址為新的ip地址。
  • 利用ngigx測試下載以前服務器中存成的文件,下載原文件成功表示遷移成功。
  • 技術分享

4.FastDFS服務器端運行時目錄結構

${base_path}
|__data:存放數據文件
|__logs:存放日誌文件
其中,${base_path}由配置文件中的參數“base_path”設定。

4.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中的字段依次為:
#. 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時間戳)
#. stat.total_upload_count:上傳文件次數
#. stat.success_upload_count:成功上傳文件次數
#. stat.total_set_meta_count:更改meta data次數
#. stat.success_set_meta_count:成功更改meta data次數
#. stat.total_delete_count:刪除文件次數
#. stat.success_delete_count:成功刪除文件次數
#. stat.total_download_count:下載文件次數
#. stat.success_download_count:成功下載文件次數
#. stat.total_get_meta_count:獲取meta data次數
#. stat.success_get_meta_count:成功獲取meta data次數
#. stat.last_source_update:最近一次源頭更新時間(更新操作來自客戶端)
#. stat.last_sync_update:最近一次同步更新時間(更新操作來自其他storage server的同步)

4.2 .storage serverstorage 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/VKQ-CkpWmo0AAAAAAKqTJj0eiic6891.a
${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記錄數
數據文件名由系統自動生成,包括5部分:存儲服務器IP地址、當前時間(Unix時間戳)、文件大小(字節數)、隨機數和文件後綴。文件名長度為33字 節。文件可以按目錄順序存放,也可以按照PJW Hash算法hash到65536(256*256)個目錄中分散存儲,通過配置文件控制。

fastDFS文件服務器遷移