FastDFS 是一个开源的高性能分布式文件系统,特别适合于大规模数据和访问量场景。使用 FastDFS 进行文件存储时,某些情况下,我们可能需要更换服务器,但服务器已经使用一段时间,这时需要将原服务上存储的文件数据进行迁移。本文主要介绍FastDFS中存储的文件进行数据迁移的方法。

FastDFS 主要由三个核心组件组成:Tracker Server、Storage Server 和 Client。

Tracker Server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。

Storage Server :存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。storage server直接利用OS的文件系统调用管理文件。

Client:客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。

1、通过复制数据目录文件

如需要单独备份数据文件,此种方法更新好,备份之前,我们需要找到配置文件中配置的存储目录,找到需要复制的数据目录。一般有两种情况:

1)服务器IP相同

若迁移到的服务器,与原来的服务器IP相同,我们直接复制data目录即可。

2)服务器IP不同

如使用了V4的自定义ServerID特性,需要修改storage_ids.conf,将对应关系调整好。如采用IP地址进行标识,需要修改或删除 data目录下的数据文件,

tracker server上需要调整的文件列表: 

data/storage_groups_new.dat 
data/storage_servers_new.dat 
data/storage_sync_timestamp.dat

storage server需要调整的文件列表: 

data/.data_init_flag 

data/sync/{ip_addr}_{port}.mark:此类文件,需要将文件名中的IP地址调整过来。

注意:storage的data目录下有一个.打头的隐藏文件也需要修改。若不想调整文件,也可以尝试将文件备好,然后直接删除上面文件,在进行重启服务器,FastDFS会自动重建配置文件。

2、通过FastDFS同步数据

若不需要单独备份数据文件,需们我们可以通过将新服务器和原来的服务器,设置成同一个tracker server 的来进行数据同步。

1)停止新服务器的tracker server和storage server

/usr/local/bin/stop.sh /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
/usr/local/bin/stop.sh /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf

2)修改新服务器的/etc/fdfs/storage.conf

将新服务器storage server的配置文件,/etc/fdfs/storage.conf中的tracker_server配置成旧服务器的地址,storage.conf文件中,group_name、store_path_count要和旧的conf文件保持一致。

3)启动新服务器的storage server

可以在新服务器的storage.log中查看同步进程,fdfs_monitor /etc/fdfs/storage.conf,对应的storage的ip_addr字段提示ACTIVE则代表同步完成;这时一个旧服务器的tracker server 对应了两个storage,在客户端上传文件,会同时存储到两个storage。

4)修改/etc/fdfs/storage.conf 配置

同步完成后,将新的storage server 停止,然后将新服务器storage server的配置文件,/etc/fdfs/storage.conf中的tracker_server配置改回新的服务器地址。

5)将.data_init_flag中sync_src_server设置为空

使用cd进入data目录,然后使用下面命令修改:

vim .data_init_flag
sync_src_server= #留空即可

注意:同步过程中,若新服务器的storage.log报错response2!=0,则需要kill新服务器中的tracker和storage进程,再重新启动。若旧服务器上传文件失败,则需要停启旧服务器的tracker与storage。另外,如文件同步时,配置多个tracker server 时,应该确定是不是需要同步的存储服务器的tracker server是leader,如不是可以改变启动顺序来调整。

推荐文档