fastdfs 數據同步和遷移

最近做了一次fastdfs文件遷移的工作,把操作步驟記錄下來,留給後面做遷移的時候參考。

其中有些細節原理尚不清楚,後續有研究再補充。

舊的 fastdfs(110.119.19.20)我們這麼命名

  • tracker_old
  • storage_old

新的 fastdfs(110.119.19.21)我們這麼命名

  • tracker_new
  • storage_new

我們爲了不影響舊的 fastdfs 數據,我們的新的 fastdfs 是沒有任何數據,全新的 storage。

然後這裏示例的IP是我瞎編的,畢竟不能暴露我自己使用的 fastdfs 地址.

第一步:保證兩個 fdfs 相互之間通信正常

這其實是最基本的要求,因爲新舊兩者需要相互協商傳輸一些數據。但是我操作的時候是把公網的數據同步到內網服務器當中。公網的服務器無法訪問到內網的服務器,導致同步失敗。

第二步:修改 storage_new 的配置

  1. 修改 tracker_server 配置,指向 tracker_old 的地址
  2. group_name 要和 storage_old 的配置保持一致
  3. 觀察 storage_old 的 store_path_count 配置,storage_new 的 store_path_count 數量需要一致。
  4. 同樣的, store_path 的數量配置也要符合 store_path_count 的數量。
  5. 2,3兩點不做,tracker_old 會返回 22 的 errorcode。

做完以上配置後,tracker_old 上就能看到多出了一個 storage .

第二步:查看 storage

在 tracker_old 上使用命令fastdfsmonitor 可以查看到tracker 下的每個 storage 的狀態。
例如

fdfs_monitor /etc/fdfs/client.conf

得到結果:
Storage 1:
	id = 110.119.19.20
	ip_addr = 110.119.19.20  ACTIVE
......
Storage 2:
	id = 110.119.19.21
	ip_addr = 110.119.19.21  ACTIVE

多說一個,刪除節點的命令

fdfs_monitor /etc/fdfs/client.conf delete group1 110.119.19.20

新接入的new_storage 狀態依次會是 INIT -> SYNC WAIT -> ACTIVE。

在網上查詢的正常會是 INIT -> SYNC WAIT -> SYNCING。我在實際的操作當中沒有看到 SYNCING 的狀態。但是 ACTIVE 狀態下其實是在正常同步數據的。

第四步:查看數據同步的進度

在 old_tracker 的 base_path 目錄下有一個 data/sync目錄。裏面的文件如下

110.119.19.20_23000.mark  # 這個是 new_storage 的同步數據的情況
binlog.000  # old_tracker 的 binlog
binlog.index   # 記錄着當前正在使用哪個 binlog 文件

查看 .mark 的文件內容就可看到 數據同步的情況

binlog_index=0
binlog_offset=96250360 # binlog.xxx的偏移量,可以從這個偏移量獲取下一行記錄
need_sync_old:本storage是否是對側storage(110.119.19.21)的源結點,同時是否需要從起點同步所有的記錄
sync_old_done:是否同步完成過
until_timestamp=1569588371 # 上次同步時間結點
scan_row_count=1524448 # binlog總記錄數
sync_row_count=1524448 # 同步的binlog行數

所以從 scan_row_count 和 sync_row_count 的數量對比可以知道同步的進度。當兩者一致的時候同步完成。
當然很慘的是實際操作當中碰見過 sync_row_count 的值一直不見增長,但是最後數據還是同步完成的情況。我的做法是統計一下storage/data目錄的大小觀察一下是否同步正在進行。

第五步:調整 storage_new 的配置

第二個步驟裏把 storage_new 的 tracker 配置指向了 tracker_old。在數據同步完成之後,需要把 tracker 的設置修改成 tracker_new.

  1. 修改 tracker_server 配置,指向 tracker_new 的地址.
  2. 還有很重要的一點,base_path 目錄下有一個 .data_init_flag 文件。這是一個隱藏文件,用ls -a命令找。文件當中的 sync_src_server=110.119.19.21 配置需要置空。否則 tracker_new 不能夠正常的使用。

最後數據遷移就完成了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章