一次替换FastDFS数据目录引发的文件上传和访问异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一次替换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数据目录引发的文件上传和访问异常的主要内容,如果未能解决你的问题,请参考以下文章