標籤:列印 googl dex lin jpg 訪問 重啟 under 上傳圖片
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.confroot 1126 1 0 14:57 ? 00:00:00 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restartroot 5139 5071 0 15:13 pts/8 00:00:00 grep --color=auto storage.conf[[email protected] ~]# ps -ef|grep tracker.confroot 5149 5071 0 15:13 pts/8 00:00:00 grep --color=auto tracker.confroot 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 23000tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 1126/fdfs_storaged[[email protected] ~]# netstat -tlunp|grep 22122tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 30168/fdfs_trackerd
然後查看nginx,發現連接埠也是起來的,但是進程有異常,只有一個master進程:
[[email protected] sbin]# ps -ef|grep nginxroot 744 22962 0 10:37 pts/8 00:00:00 grep --color=auto nginxroot 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: 132018/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 nginxnobody 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 nginxroot 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-mfileExtNamejpgfileLength542508fileNameIMG_1171.jpg[[email protected] logs]#
讓測試在新環境上測試了一下,圖片能夠正常訪問了。
2、圖片上傳異常問題描述
在測試反饋圖片訪問可以正常的時候,為了保險,測試了一片上傳功能,發現上傳圖片出現問題:
[[email protected] ~]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/test/test10.pngThis is FastDFS client test program v5.05Copyright (C) 2008, Happy Fish / YuQingFastDFS may be copied only under the terms of the GNU GeneralPublic 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: 0tracker_query_storage_store_list_without_group: server 1. group_name=, ip_addr=10.0.0.10, port=23000group_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 != 0storage_upload_by_filenameupload 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.05Copyright (C) 2008, Happy Fish / YuQingFastDFS may be copied only under the terms of the GNU GeneralPublic 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: 0tracker_query_storage_store_list_without_group: server 1. group_name=, ip_addr=10.0.0.10, port=23000group_name=groupA, ip_addr=10.0.0.10, port=23000storage_upload_by_filenamegroup_name=groupA, remote_filename=M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442.pngsource ip address: 10.0.0.10file timestamp=2018-09-05 15:40:56file size=17697file crc32=420302403example file url: http://10.0.0.10:8090/groupA/M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442.pngstorage_upload_slave_by_filenamegroup_name=groupA, remote_filename=M00/00/00/rDN5CluPiIiIV-bEAABFIRkNTkMAAAAAQAGYYsAAEU5442_big.pngsource ip address: 10.0.0.10file timestamp=2018-09-05 15:40:56file size=17697file crc32=420302403example 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-mext_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-mext_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資料目錄引發的檔案上傳和訪問異常