一次替換FastDFS資料目錄引發的檔案上傳和訪問異常

來源:互聯網
上載者:User

標籤:列印   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資料目錄引發的檔案上傳和訪問異常

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.