最近做了一次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 的配置
- 修改 tracker_server 配置,指向 tracker_old 的地址
- group_name 要和 storage_old 的配置保持一致
- 观察 storage_old 的 store_path_count 配置,storage_new 的 store_path_count 数量需要一致。
- 同样的, store_path 的数量配置也要符合 store_path_count 的数量。
- 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.
- 修改 tracker_server 配置,指向 tracker_new 的地址.
- 还有很重要的一点,base_path 目录下有一个 .data_init_flag 文件。这是一个隐藏文件,用
ls -a
命令找。文件当中的sync_src_server=110.119.19.21
配置需要置空。否则 tracker_new 不能够正常的使用。
最后数据迁移就完成了