1. 程式人生 > >CentOS7搭建FastDFS V5.11分布式文件系統-第三篇

CentOS7搭建FastDFS V5.11分布式文件系統-第三篇

nginx rom jmp upload tro 結合 刪除 stc 開發

1.測試

前面兩篇博文已對FastDFS的安裝和配置,做了比較詳細的講解。FastDFS的基礎模塊都搭好了,現在開始測試下載。

1.1 配置客戶端

同樣的,需要修改客戶端的配置文件:

/etc/fdfs/client.conf
base_path=/opt/fastdfs_tracker #tracker服務器文件路徑
tracker_server=172.20.132.57:22122 #tracker服務器IP地址和端口號
http.tracker_server_port=8080 # tracker 服務器的 http端口號,必須和tracker的設置對應起來

修改完成的文件為:

技術分享
connect_timeout=30
network_timeout=60 base_path=/opt/fastdfs_tracker tracker_server=172.20.132.57:22122 log_level=info use_connection_pool = false connection_pool_max_idle_time = 3600 load_fdfs_parameters_from_tracker=false use_storage_id = false storage_ids_filename = storage_ids.conf http.tracker_server_port=8080
View Code

1.2 模擬上傳

確定圖片位置後,我們輸入上傳圖片命令:

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /root/1.jpg  #這後面放的是圖片的位置

成功後會返回圖片的路徑:

[root@sybmfw12-lnsy fastdfs-5.11]# /usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /root/2.png
group1/M00/00/00/rBSEOVoC2QCAJVdoAAFeVJMpopw987.png

組名:group1
磁盤:M00
目錄:00/00
文件名稱:rBSEOVoC2QCAJVdoAAFeVJMpopw987.png

我們上傳的圖片會被上傳到我們創建的storage_data目錄下,讓我們去看看:

[root@sybmfw12-lnsy ~]# cd /opt/fastdfs_storage_data/data/
[root@sybmfw12-lnsy data]# ls
00  04  08  0C  10  14  18  1C  20  24  28  2C  30  34  38  3C  40  44  48  4C  50  54  58  5C  60  64  68  6C  70  74  78  7C  80  84  88  8C  90  94  98  9C  A0  A4  A8  AC  B0  B4  B8  BC  C0  C4  C8  CC  D0  D4  D8  DC  E0  E4  E8  EC  F0  F4  F8  FC
01  05  09  0D  11  15  19  1D  21  25  29  2D  31  35  39  3D  41  45  49  4D  51  55  59  5D  61  65  69  6D  71  75  79  7D  81  85  89  8D  91  95  99  9D  A1  A5  A9  AD  B1  B5  B9  BD  C1  C5  C9  CD  D1  D5  D9  DD  E1  E5  E9  ED  F1  F5  F9  FD
02  06  0A  0E  12  16  1A  1E  22  26  2A  2E  32  36  3A  3E  42  46  4A  4E  52  56  5A  5E  62  66  6A  6E  72  76  7A  7E  82  86  8A  8E  92  96  9A  9E  A2  A6  AA  AE  B2  B6  BA  BE  C2  C6  CA  CE  D2  D6  DA  DE  E2  E6  EA  EE  F2  F6  FA  FE
03  07  0B  0F  13  17  1B  1F  23  27  2B  2F  33  37  3B  3F  43  47  4B  4F  53  57  5B  5F  63  67  6B  6F  73  77  7B  7F  83  87  8B  8F  93  97  9B  9F  A3  A7  AB  AF  B3  B7  BB  BF  C3  C7  CB  CF  D3  D7  DB  DF  E3  E7  EB  EF  F3  F7  FB  FF

[root@sybmfw12-lnsy data]# ls 00/
00 04 08 0C 10 14 18 1C 20 24 28 2C 30 34 38 3C 40 44 48 4C 50 54 58 5C 60 64 68 6C 70 74 78 7C 80 84 88 8C 90 94 98 9C A0 A4 A8 AC B0 B4 B8 BC C0 C4 C8 CC D0 D4 D8 DC E0 E4 E8 EC F0 F4 F8 FC
01 05 09 0D 11 15 19 1D 21 25 29 2D 31 35 39 3D 41 45 49 4D 51 55 59 5D 61 65 69 6D 71 75 79 7D 81 85 89 8D 91 95 99 9D A1 A5 A9 AD B1 B5 B9 BD C1 C5 C9 CD D1 D5 D9 DD E1 E5 E9 ED F1 F5 F9 FD
02 06 0A 0E 12 16 1A 1E 22 26 2A 2E 32 36 3A 3E 42 46 4A 4E 52 56 5A 5E 62 66 6A 6E 72 76 7A 7E 82 86 8A 8E 92 96 9A 9E A2 A6 AA AE B2 B6 BA BE C2 C6 CA CE D2 D6 DA DE E2 E6 EA EE F2 F6 FA FE
03 07 0B 0F 13 17 1B 1F 23 27 2B 2F 33 37 3B 3F 43 47 4B 4F 53 57 5B 5F 63 67 6B 6F 73 77 7B 7F 83 87 8B 8F 93 97 9B 9F A3 A7 AB AF B3 B7 BB BF C3 C7 CB CF D3 D7 DB DF E3 E7 EB EF F3 F7 FB FF
[root@sybmfw12-lnsy data]# ls 00/00/

rBSEOVoC2QCAJVdoAAFeVJMpopw987.png

果然通過剛剛返回的路徑,我們成功找到了圖片。

我們仔細看一下,實際文件存儲路徑下有創建好的多級目錄。data下有256個1級目錄,每級目錄下又有256個2級子目錄,總共65536個文件,新寫的文件會以hash的方式被路由到其中某個子目錄下,然後將文件數據直接作為一個本地文件存儲到該目錄中。

如果要訪問剛上傳的圖片,我們得需要結合nginx來實現

1.4 HTTP請求不能訪問文件的原因

我們在使用FastDFS部署一個分布式文件系統的時候,通過FastDFS的客戶端API來進行文件的上傳、下載、刪除等操作。同時通過FastDFS的HTTP服務器來提供HTTP服務。但是FastDFS的HTTP服務較為簡單,無法提供負載均衡等高性能的服務,所以FastDFS的開發者——淘寶的架構師余慶同學,為我們提供了Nginx上使用的FastDFS模塊(也可以叫FastDFS的Nginx模塊)。
FastDFS通過Tracker服務器,將文件放在Storage服務器存儲,但是同組之間的服務器需要復制文件,有延遲的問題.假設Tracker服務器將文件上傳到了172.20.132.57,文件ID已經返回客戶端,這時,後臺會將這個文件復制到172.20.132.57,如果復制沒有完成,客戶端就用這個ID在172.20.132.57取文件,肯定會出現錯誤。這個fastdfs-nginx-module可以重定向連接到源服務器取文件,避免客戶端由於復制延遲的問題,出現錯誤。
正是這樣,FastDFS需要結合nginx,所以取消原來對HTTP的直接支持。

2. FastDFS的nginx模塊安裝

在安裝nginx之前要安裝nginx所需的依賴lib:

yum -y install pcre pcre-devel  
yum -y install zlib zlib-devel  
yum -y install openssl openssl-devel

2.2 安裝nginx並添加fastdfs-nginx-module

解壓nginx,和fastdfs-nginx-module:

tar -zxvf nginx-1.10.3.tar.gz
unzip fastdfs-nginx-module-master.zip

解壓後進入nginx目錄編譯安裝nginx,並添加fastdfs-nginx-module:

./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module-master/src    #解壓後fastdfs-nginx-module所在的位置

如果配置不報錯的話,就開始編譯:

make
make install

如果報錯的話,很可能是版本的原因,在我的第二篇博文中提供了我測試成功不報錯的版本下載。
nginx的默認目錄是/usr/local/nginx,安裝成功後查看:

[root@sybmfw12-lnsy ~]# ll /usr/local/nginx/
drwx------. 2 nobody root 4096 11月  8 13:10 client_body_temp
drwxr-xr-x. 2 root   root 4096 11月  8 15:22 conf
drwx------. 2 nobody root 4096 11月  8 13:10 fastcgi_temp
drwxr-xr-x. 2 root   root 4096 11月  8 13:00 html
drwxr-xr-x. 2 root   root 4096 11月  8 13:10 logs
drwx------. 2 nobody root 4096 11月  8 13:10 proxy_temp
drwxr-xr-x. 2 root   root 4096 11月  8 13:00 sbin
drwx------. 2 nobody root 4096 11月  8 13:10 scgi_temp
drwx------. 2 nobody root 4096 11月  8 13:10 uwsgi_temp

2.3 配置storage nginx

修改nginx.conf:

修改監聽端口 listen 9999, 新增location

技術分享
server {
        listen       9991;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location ~/group1/M00 {
            root /opt/fastdfs_storage/data;
            ngx_fastdfs_module;
        }

        location = /50x.html {
            root   html;
        }
}
View Code

然後進入FastDFS安裝時的解壓過的目錄,將http.conf和mime.types拷貝到/etc/fdfs目錄下:

[root@sybmfw12-lnsy conf]# cp http.conf  mime.types  /etc/fdfs/

另外還需要把fastdfs-nginx-module安裝目錄中src目錄下的mod_fastdfs.conf也拷貝到/etc/fdfs目錄下:

[root@sybmfw12-lnsy src]# cp mod_fastdfs.conf  /etc/fdfs/

對剛剛拷貝的mod_fastdfs.conf文件進行修改:

/etc/fdfs/mod_fastdfs.conf
base_path=/opt/fastdfs_storage  #保存日誌目錄
 tracker_server=172.20.132.57:22122 #tracker服務器的IP地址以及端口號
 storage_server_port=23000 #storage服務器的端口號
 url_have_group_name = true #文件 url 中是否有 group 名
 store_path0=/opt/fastdfs_storage_data   #存儲路徑
 group_count = 1 #設置組的個數

在文件的最後,設置group

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

創建M00至storage存儲目錄的符號連接:

ln  -s  /opt/fastdfs_storage_data/data/ /opt/fastdfs_storage_data/data/M00

啟動nginx:

/usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=8142
[root@sybmfw12-lnsy src]# curl localhost:9991
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

恭喜你,storage的nginx已配置成功。接下來,我們還要繼續配置tracker的nginx。

2.4 配置tracker nginx

在nginx.cfg裏在添加一個虛擬主機

   upstream fdfs_group1 {
        server 127.0.0.1:9999;
    }
   server {
        listen       80;
        server_name  localhost;
       location /group1/M00 {
            proxy_pass http://fdfs_group1;
        }
      error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

重啟nginx

/usr/local/nginx/sbin/nginx -s reload
ngx_http_fastdfs_set pid=8141
技術分享
[root@sybmfw12-lnsy ~]# curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
View Code

2.6 HTTP測試

可以成功訪問。

現在我們再去訪問一下,原來我們上傳過的文件:

172.20.132.57/group1/M00/00/00/rBSEOVoCsSWAZG_WAAFeVJMpopw658.png

技術分享

這個時候已經能成功訪問。感謝你能堅持到現在,FastDFS已部署完成。

CentOS7搭建FastDFS V5.11分布式文件系統-第三篇