求助fastdfs迁移数据的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助fastdfs迁移数据的问题相关的知识,希望对你有一定的参考价值。

目前有2台服务器 trackerserver+storage 和 storage ,需要迁移到2台新的服务器环境 如何迁移fastdfs中的数据?和需要注意的要点

回复 6# guliny FastDFS集群整体迁移的问题。如果新旧IP地址一一对应,而且是一样的,那非常简单,直接将data目录拷贝过去即可。IP不一样的话,会比较麻烦一些。如果使用了V4的自定义server ID特性,那么比较容易,直接将tracker上的IP和ID映射文件storage_ids.conf修改好即可。如果是用IP地址作为服务器标识,那么需要修改tracker和storage的data目录下的几个数据文件,将旧IP调整为新IP。注意storage的data目录下有一个.打头的隐藏文件也需要修改。另外,需要将后缀为mark的IP地址和端口命名的同步位置记录文件名改名。文件全部调整完成后才能启动集群服务。tracker server上需要调整的文件列表:data/storage_groups_new.datdata/storage_servers_new.datdata/storage_sync_timestamp.datstorage server需要调整的文件列表:data/.data_init_flagdata/sync/$ip_addr_$port.mark:此类文件,需要将文件名中的IP地址调整过来。 参考技术A 我们也有迁移数据的问题,是异地迁移数据,不能将新机器挂接到旧机器上去。 参考技术B 已经按版主这个思路进行了迁移,非常感谢! 参考技术C 回复 1# jaysong1986 为啥要迁移呢?直接升级原有的集群到v3.05不可以吗?

一次替换FastDFS数据目录引发的文件上传和访问异常

1、图片访问异常

问题描述

搭建一台新环境的FastDFS文件服务器,刚搭建好的时候,上传了一张图片,正常,但是因为当时端口没有开,没有验证访问的问题。环境暂时搁置等待测试。
后来在测试环节,因为需要上传的图片文件太多,因此直接将生产环境的dfs的数据目录拷贝过去,替换了新环境的数据目录,同时以下文件还是用的新环境原有的文件( /data/dfs就是数据目录):

/data/dfs/tracker 目录
/data/dfs/group1/data/fdfs_storaged.pid
/data/dfs/group1/data/storage_stat.dat
/data/dfs/group1/data/storage_trunk.dat
/data/dfs/group1/data/sync 目录
/data/dfs/group1/data/trunk 目录

然后重启了tracker、storage和nginx服务,但是发现图片访问不到,直接页面是一片空白,使用curl访问,也是没有任何返回,就卡在那里,只能Ctrl+c退出来:

[[email protected] logs]#  curl  http://10.0.0.10:8090/groupA/M00/00/00/cErM6luMkf-IbhOWAAhHLHLDXwwAAAABQKwYD8ACEdE376.jpg-m

#没有任何返回,只能Ctrl+c退出来。
[[email protected] logs]#

原因分析

1、查看端口和进程

查看storage和tracker进程,都还在:

[[email protected] ~]#  ps -ef|grep storage.conf
root      1126     1  0 14:57 ?        00:00:00 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
root      5139  5071  0 15:13 pts/8    00:00:00 grep --color=auto storage.conf
[[email protected] ~]#  ps -ef|grep tracker.conf
root      5149  5071  0 15:13 pts/8    00:00:00 grep --color=auto tracker.conf
root     30168     1  0 14:44 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
[[email protected] ~]#

查看tracker、storage的端口,都是起来的,防火墙也打开了相应的端口:

[[email protected] ~]# netstat -tlunp|grep 23000
tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      1126/fdfs_storaged
[[email protected] ~]# netstat -tlunp|grep 22122
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      30168/fdfs_trackerd

然后查看nginx,发现端口也是起来的,但是进程有异常,只有一个master进程:

[[email protected] sbin]# ps -ef|grep nginx
root       744 22962  0 10:37 pts/8    00:00:00 grep --color=auto nginx
root     29076     1  0 10:21 ?        00:00:00 nginx: master process ./nginx     #只有一个master进程
[[email protected] sbin]#

2、查看日志

查看nginx日志,在error_log重复报下面几行错误

ngx_http_fastdfs_process_init pid=29077
[2018-09-05 10:21:46] ERROR - file: shared_func.c, line: 960, open file /etc/fdfs/mod_fastdfs.conf fail, errno: 13, error info: Permission denied
[2018-09-05 10:21:46] ERROR - file: /usr/local/fastdfs-nginx-module/src/common.c, line: 155, load conf file "/etc/fdfs/mod_fastdfs.conf" fail, ret code: 13
2018/09/05 10:21:46 [alert] 29076#0: worker process 29077 exited with fatal code 2 and cannot be respawned

根据报错信息的Permission denied和网上一些博文,同时对比了生产环境FastDFs服务器上的/etc/dfs目录的权限,尝试修改了/etc/dfs目录的权限,改成了755,并重启tracker、storage、nginx服务:

# chmod 755 /etc/fdfs
# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
# cd /usr/local/nginx/sbin/
# ./nginx -s reload

然后查看nginx的进程,就有worker进程了:

[[email protected] ~]# ps -ef|grep nginx
nobody     363 29076  0 14:55 ?        00:00:00 nginx: worker process         #有worker进程了
root      8456  8381  0 15:27 pts/8    00:00:00 grep --color=auto nginx
root     29076     1  0 10:21 ?        00:00:00 nginx: master process ./nginx
[[email protected] ~]#

访问图片,有内容返回了:

[[email protected] logs]#  curl  http://10.0.0.10:8090/groupA/M00/00/00/cErM6luMkf-IbhOWAAhHLHLDXwwAAAABQKwYD8ACEdE376.jpg-m
fileExtNamejpgfileLength542508fileNameIMG_1171.jpg
[[email protected] logs]#

让测试在新环境上测试了一下,图片能够正常访问了。

2、图片上传异常

问题描述

在测试反馈图片访问可以正常的时候,为了保险,测试了一下图片上传功能,发现上传图片出现问题:

[[email protected] ~]#  /usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/test/test10.png
This is FastDFS client test program v5.05

Copyright (C) 2008, Happy Fish / YuQing

FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/
for more detail.

[2018-09-05 11:08:23] DEBUG - base_path=/data/dfs/tracker, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

tracker_query_storage_store_list_without_group:
        server 1. group_name=, ip_addr=10.0.0.10, port=23000

group_name=groupA, ip_addr=10.0.0.10, port=23000
[2018-09-05 11:08:23] ERROR - file: tracker_proto.c, line: 48, server: 10.0.0.10:23000, response status 17 != 0
storage_upload_by_filename
upload file fail, error no: 17, error info: File exists    #这里报File exists,但是换了很多张新图片上传,都报这个错
[[email protected] ~]#

原因分析

查看storaged.log日志,发现在上传文件的同时,日志就会打印出这几行报错信息:

[2018-09-05 11:15:45] ERROR - file: storage_dio.c, line: 885, trunk file: /data/dfs/group1/data/00/00/000001, offset: 299076 already occupied by other file, trunk header info: file_type=-88, alloc_size=-1127393023, file_size=-397478323, crc32=485419875, mtime=-592647312, ext_name(7)=(<?f§r
[2018-09-05 11:15:45] WARNING - file: trunk_mgr/trunk_mem.c, line: 1620, trunk space already be occupied, delete this trunk space, trunk info: store_path_index=0, sub_path_high=0, sub_path_low=0, id=1, offset=299076, size=24885, status=1

第一次遇到这种问题,于是将报错信息在百度和Google找了很久,没有找到相应的解决办法。因为刚刚安装好FastDFs服务的时候,图片上传功能是正常的于是怀疑可能是替换数据目录引发的问题。因此尝试将数据目录还原成了最初安装的那个原始的数据目录,发现可以正常上传。那就是数据目录的问题了

再看报错信息,指出了是和/data/dfs/group1/data/00/00/000001这个文件有关。而且用生产环境拷贝过去数据目录,就只能访问到文件,但是不能上传。所以结合报错信息,重新使用线上环境的那套数据目录。除了上面提到的

/data/dfs/tracker 目录
/data/dfs/group1/data/fdfs_storaged.pid
/data/dfs/group1/data/storage_stat.dat
/data/dfs/group1/data/storage_trunk.dat
/data/dfs/group1/data/sync 目录
/data/dfs/group1/data/trunk 目录

这部分文件使用的新环境本身的文件之外,还将/data/dfs/group1/data/00/00/000001文件也替换成了新环境本身原始的000001文件。然后重启tracker、storage、nginx服务,发现上传功能恢复了:

[[email protected] data]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/test/test2.png                                                                                                                                          This is FastDFS client test program v5.05

Copyright (C) 2008, Happy Fish / YuQing

FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/
for more detail.

[2018-09-05 15:40:56] DEBUG - base_path=/data/dfs/tracker, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

tracker_query_storage_store_list_without_group:
        server 1. group_name=, ip_addr=10.0.0.10, port=23000

group_name=groupA, ip_addr=10.0.0.10, port=23000
storage_upload_by_filename
group_name=groupA, remote_filename=M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442.png
source ip address: 10.0.0.10
file timestamp=2018-09-05 15:40:56
file size=17697
file crc32=420302403
example file url: http://10.0.0.10:8090/groupA/M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442.png
storage_upload_slave_by_filename
group_name=groupA, remote_filename=M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442_big.png
source ip address: 10.0.0.10
file timestamp=2018-09-05 15:40:56
file size=17697
file crc32=420302403
example file url: http://10.0.0.10:8090/groupA/M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442_big.png
[[email protected] data]#

查看数据目录,这个文件也是存在的:

[[email protected] data]#  ll /data/dfs/group1/data/00/00/|grep 5442
-rw-r--r-- 1 root root    17697 Sep  5 15:40 rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442_big.png
-rw-r--r-- 1 root root       49 Sep  5 15:40 rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442_big.png-m
-rw-r--r-- 1 root root       49 Sep  5 15:40 rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442.png-m
[[email protected] data]#

查看该图片,也是可以查看到的了:

[[email protected] data]# curl http://10.0.0.10:8090/groupA/M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442_big.png-m
ext_namejpgfile_size115120height80width160
[[email protected] data]#
[[email protected] data]#
[[email protected] data]# curl http://10.0.0.10:8090/groupA/M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442.png-m
ext_namejpgfile_size115120height80width160
[[email protected] data]#

在浏览器访问
http://10.0.0.10:8090/groupA/M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442_big.png
也能看到图片:
技术分享图片

小记:
综上,用生产环境FastDFs数据目录替换新环境的数据目录后,需要做下面的操作:
1、清空生产环境数据目录里面的log文件;
2、以下文件用的是新环境自身的文件:

/data/dfs/tracker 目录
/data/dfs/group1/data/fdfs_storaged.pid
/data/dfs/group1/data/storage_stat.dat
/data/dfs/group1/data/storage_trunk.dat
/data/dfs/group1/data/sync 目录
/data/dfs/group1/data/trunk 目录
/data/dfs/group1/data/00/00/000001

以上是关于求助fastdfs迁移数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

fastDFS文件服务器迁移

django迁移数据库报错解决

什么是数据迁移?在数据迁移中需要考虑的问题

【数据迁移】MAC+PHP开发环境

如何迁移ORACLE数据库

核心数据迁移问题:“持久存储迁移失败,缺少源托管对象模型。”