Dubbo進階篇_04_FastDFSDistributed File System的安裝與使用

來源:互聯網
上載者:User

FastDFS簡介

FastDFS是一個輕量級的開源Distributed File System
FastDFS主要解決了大容量的檔案儲存體和高並發訪問的問題,檔案存取時實現了負載平衡
FastDFS實現了軟體方式的RAID,可以使用廉價的IDE硬碟進行儲存
支援儲存伺服器線上擴容
支援相同內容的檔案只儲存一份,節約磁碟空間
FastDFS只能通過Client API訪問,不支援POSIX訪問方式
FastDFS特別適合大中型網站使用,用來儲存資源檔(如:圖片、文檔、音頻、視頻等等)


系統架構


Tracing Service器:192.168.1.131(安裝到consumer)

儲存伺服器:192.168.1.51(安裝到CI伺服器)

環境:CentOS6.6

使用者:root

資料目錄 :/fastdffs(資料目錄按你的資料盤掛載路徑而定)

安裝包

FastDFS v5.05 

libfastcommon-master.zip(是從 FastDFS 和 FastDHT 中提取出來的公用 C 函數庫) fastdfs-nginx-module_v1.16.tar.gz

 nginx-1.6.2.tar.gz 

fastdfs_client_java._v1.25.tar.gz 

源碼地址:https://github.com/happyfish100/ 

下載地址:http://sourceforge.net/projects/fastdfs/files/ 

官方論壇:http://bbs.chinaunix.net/forum-240-1.html


一、所有Tracing Service器和儲存伺服器均執行如下操作

1.編譯和安裝所需的依賴包

Connecting to 192.168.1.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.


Last login: Sun Apr  3 00:12:21 2016 from 192.168.1.2
[root@consume ~]# yum install make cmake gcc gcc-c++


2.安裝 libfastcommon: 

(1)上傳或下載 libfastcommon-master.zip 到/usr/local/src 目錄 


(2)解壓

 [root@consume ~]# cd /usr/local/src/
[root@consume src]# unzip libfastcommon-master.zip 
[root@consume src]# cd libfastcommon-master
[root@consume libfastcommon-master]# ll
total 28
-rw-r--r--. 1 root root 2913 Feb 27  2015 HISTORY
-rw-r--r--. 1 root root  582 Feb 27  2015 INSTALL
-rw-r--r--. 1 root root 1342 Feb 27  2015 libfastcommon.spec
-rwxr-xr-x. 1 root root 2151 Feb 27  2015 make.sh
drwxr-xr-x. 2 root root 4096 Feb 27  2015 php-fastcommon
-rw-r--r--. 1 root root  617 Feb 27  2015 README
drwxr-xr-x. 2 root root 4096 Feb 27  2015 src

(3) 編譯、安裝 [root@consume libfastcommon-master]# ./make.sh
[root@consume libfastcommon-master]# ./make.sh install 

# libfastcommon預設安裝到了 

/usr/lib64/libfastcommon.so 

/usr/lib64/libfdfsclient.so

(4)因為 FastDFS 主程式設定的 lib 目錄是/usr/local/lib,所以需要建立軟連結. [root@consume libfastcommon-master]# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so


安裝 FastDFS 

(1)上傳或下載 FastDFS 源碼包(FastDFS_v5.05.tar.gz)到 /usr/local/src 目錄

 (2)解壓

[root@consume libfastcommon-master]# cd /usr/local/src

root@consume src]# ll | grep Fast
-rw-r--r--. 1 root root 345400 Mar 25  2015 FastDFS_v5.05.tar.gz
[root@consume src]# tar -zxvf FastDFS_v5.05.tar.gz 
(3)編譯、安裝(編譯前要確保已經成功安裝了 libfastcommon)
[root@consume src]# cd FastDFS
[root@consume FastDFS]# ./make.sh 
[root@consume FastDFS]# ./make.sh install
採用預設安裝的方式安裝,安裝後的相應檔案與目錄:

A、服務指令碼在:
/etc/init.d/fdfs_storaged 
/etc/init.d/fdfs_tracker
[root@consume FastDFS]# ls /etc/init.d | grep fdfs
fdfs_storaged
fdfs_trackerd


B、設定檔在(範例設定檔):
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
[root@consume FastDFS]# ls /etc/fdfs | grep conf
client.conf.sample
storage.conf.sample
tracker.conf.sample


C、命令工具在/usr/bin/目錄下的:
[root@consume FastDFS]# ls /usr/bin | grep fdfs
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file

4)因為 FastDFS 服務指令碼設定的 bin 目錄是/usr/local/bin,但實際命令安裝在/usr/bin,可以進入
/user/bin 目錄使用以下命令查看 fdfs 的相關命令:
[root@consume FastDFS]# cd /usr/bin
[root@consume bin]# ll | grep fdfs
因此需要修改 FastDFS 服務指令碼中相應的命令路徑,也就是把/etc/init.d/fdfs_storaged
和/etc/init.d/fdfs_tracker 兩個指令碼中的/usr/local/bin 修改成/usr/bin:
使用尋找替換命令進統一修改:%s+/usr/local/bin+/usr/bin

[root@consume bin]# cd /etc/init.d
[root@consume init.d]# vi fdfs_trackerd 
[root@consume init.d]# vi fdfs_storaged
跟蹤器與儲存空間設定檔都更改是為了保證檔案的同步和一致性

二、配置 FastDFS 跟蹤器(192.168.1.131)

1、複製 FastDFS 跟蹤器範例設定檔,並重新命名:
[root@consume init.d]# cd /etc/fdfs/
[root@consume fdfs]# ll
total 20
-rw-r--r--. 1 root root 1461 Apr  3 19:11 client.conf.sample
-rw-r--r--. 1 root root 7829 Apr  3 19:11 storage.conf.sample
-rw-r--r--. 1 root root 7102 Apr  3 19:11 tracker.conf.sample
[root@consume fdfs]# cp tracker.conf.sample tracker.conf
2、編輯跟蹤器設定檔:
[root@consume fdfs]# vi /etc/fdfs/tracker.conf
修改的內容如下:

disabled=false

port=22122

base_path=/fastdfs/tracker

(其它參數保留預設配置,具體配置解釋請參考官方文檔說明:

 http://bbs.chinaunix.net/thread-1941456-1-1.html )

3、 建立基礎資料目錄(參考基礎目錄 base_path 配置): [root@consume fdfs]# mkdir -p /fastdfs/tracker

4、 防火牆中開啟跟蹤器連接埠(預設為 22122): [root@consume fdfs]# vi /etc/sysconfig/iptables

添加:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
[root@consume fdfs]# cat /etc/sysconfig/iptables | grep 22122

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT

重啟
[root@consume fdfs]# service iptables restart

5、 啟動 Tracker: [root@consume fdfs]# /etc/init.d/fdfs_trackerd start
Starting FastDFS tracker server: 

 查看 FastDFS Tracker 是否已成功啟動:

[root@consume fdfs]# ps -ef | grep fdfs
root       3870      1  0 19:50 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root       3879   3028  0 19:51 pts/0    00:00:00 grep fdfs

(初次成功啟動,會在/fastdfs/tracker 目錄下建立 data、logs 兩個目錄)

[root@consume fdfs]# ll /fastdfs/tracker/
total 8
drwxr-xr-x. 2 root root 4096 Apr  3 19:50 data
drwxr-xr-x. 2 root root 4096 Apr  3 19:50 logs
[root@consume fdfs]# 

6.關閉 Tracker [root@consume fdfs]# /etc/init.d/fdfs_trackerd stop
stopping fdfs_trackerd ...

7、 設定 FastDFS 跟蹤器開機啟動:
[root@consume fdfs]# vi /etc/rc.d/rc.local 

## FastDFS Tracker 

/etc/init.d/fdfs_trackerd start 驗證是否設定開機啟動

[root@consume fdfs]# /etc/init.d/fdfs_trackerd status
fdfs_trackerd is stopped
[root@consume fdfs]# reboot

Connecting to 192.168.1.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sun Apr  3 18:44:38 2016 from 192.168.1.2
[root@consume ~]# /etc/init.d/fdfs_trackerd status
fdfs_trackerd (pid 2152) is running...
[root@consume ~]# 

三、配置 FastDFS 儲存(192.168.1.51)
1、 複製 FastDFS 儲存空間範例設定檔,並重新命名:
[root@yxq init.d]# cd /etc/fdfs
[root@yxq fdfs]# ll
total 20
-rw-r--r-- 1 root root 1461 Apr  3 21:45 client.conf.sample
-rw-r--r-- 1 root root 7829 Apr  3 21:45 storage.conf.sample
-rw-r--r-- 1 root root 7102 Apr  3 21:45 tracker.conf.sample
[root@yxq fdfs]# cp storage.conf.sample storage.conf
2、 編輯儲存空間範例設定檔:
[root@yxq fdfs]# vi /etc/fdfs/storage.conf

修改的內容如下: 

disabled=false port=23000

base_path=/fastdfs/storage 

store_path0=/fastdfs/storage 

tracker_server=192.168.4.131:22122 

http.server_port=8888 

(其它參數保留預設配置,具體配置解釋請參考官方文檔說明: 

http://bbs.chinaunix.net/thread-1941456-1-1.html )

3、 建立基礎資料目錄(參考基礎目錄 base_path 配置): [root@yxq fdfs]# mkdir -p /fastdfs/storage

4、 防火牆中開啟儲存空間連接埠(預設為 23000):

[root@yxq fdfs]# vi /etc/sysconfig/iptables

添加如下連接埠行: 

-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

 [root@yxq fdfs]# cat /etc/sysconfig/iptables | grep 23000
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

重啟防火牆:

[root@yxq fdfs]# service iptables restart

5、 啟動 Storage: [root@yxq fdfs]# /etc/init.d/fdfs_storaged start
Starting FastDFS storage server: 

看 FastDFS Storage 是否已成功啟動 [root@yxq fdfs]# ps -ef | grep fdfs
root      11997      1  0 22:16 pts/0    00:00:00 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
root      12000  11293  0 22:16 pts/0    00:00:00 grep fdfs

(初次成功啟動,會在/fastdfs/storage 目錄下建立data、logs 兩個目錄) [root@yxq fdfs]# ll /fastdfs/storage/

6、 關閉 Storage: [root@yxq fdfs]# /etc/init.d/fdfs_storaged stop
stopping fdfs_storaged ...

7、 設定 FastDFS 儲存空間開機啟動: [root@yxq fdfs]# vi /etc/rc.d/rc.local 

添加:

 ## FastDFS Storage 

/etc/init.d/fdfs_storaged start

四、檔案上傳測試(192.168.4.121)

 

1、修改 Tracker 伺服器中的用戶端設定檔:

 

[root@consume ~]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf 

[root@consume ~]# vi /etc/fdfs/client.conf

 修改
base_path=/fastdfs/tracker

tracker_server=192.168.1.131:22122

執行如下命令

[root@consume ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/FastDFS_v5.05.tar.gz 
group1/M00/00/00/wKgBM1cB-y2AFWsAAAVFOL7FJU4.tar.gz

(能返回以上檔案ID,說明檔案上傳成功)

以也可以在儲存伺服器根據group1查看

[root@yxq fdfs]# ll /fastdfs/storage/data/00/00/
total 340
-rw-r--r-- 1 root root 345400 Apr  3 22:27 wKgBM1cB-y2AFWsAAAVFOL7FJU4.tar.gz
[root@yxq fdfs]# date
Sun Apr  3 22:31:54 PDT 2016
[root@yxq fdfs]# 

六、在每個儲存節點上安裝nginx(只需要在儲存節點伺服器上安裝即可)
1.fastdfs-nginx-module作用說明:
   FastDFS通過Tracker伺服器,將檔案放在Storage伺服器儲存,但是同組儲存伺服器之間需要進入檔案複製,有同步延遲問題。
假設Tracker伺服器將檔案 上傳到了192.168.1.51,上傳成功後檔案ID已經返回給用戶端。此時FastDFS儲存叢集機制會將這個檔案


同步到儲存192.168.1.52,在檔案還沒有複製完成的情況下,用戶端如果用這個檔案 ID在192.168.1.52上取檔案,就會出現檔案無


法訪問的錯誤,而fastdfs-nginx-module可以重新導向檔案串連到原始伺服器取檔案,避免用戶端由於複寫延遲導致的檔案無法訪問錯


誤。(解壓後的fastdfs-nnginx-module在nginx安裝時使用)
2.上傳fastdfs-nginx-module_v1.16.tar.gz到/usr/local/src中(開始已經上傳)

3.解壓

[root@yxq src]# ls
FastDFS                            FastDFS_v5.05.tar.gz      ng
fastdfs_client_java._v1.25.tar.gz  libfastcommon-master      re
fastdfs-nginx-module_v1.16.tar.gz  libfastcommon-master.zip  re
[root@yxq src]# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

4、修改fastdfs-nginx-module的config設定檔
[root@yxq src]# cd fastdfs-nginx-module/src
[root@yxq src]# vi config
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
修改為
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

5.上傳當前穩定版本Nginx(nginx-1.6.2.tar.gz) 到/usr/local/src目錄 
6.安裝編譯Nginx所需的依賴包
[root@yxq src]# yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel

7.編譯安裝Nginx(添加fastdfs-nginx-module模組)
[root@yxq src]# cd /usr/local/src/
[root@yxq src]# tar -zxvf nginx-1.6.2.tar.gz 
[root@yxq src]# cd nginx-1.6.2
[root@yxq nginx-1.6.2]# ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src
[root@yxq nginx-1.6.2]# make && make install

8、複製fastdfs-nginx-module源碼中的設定檔到/etc/fdfs目錄 ,並修改
[root@yxq nginx-1.6.2]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
修改以下配置
connect_timeout=10
base_path=/tmp
tracker_server=192.168.1.131:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path0=/fastdfs/storage
9、複製FastDFS的部分設定檔到/etc/fdfs目錄
[root@yxq nginx-1.6.2]# cd /usr/local/src/FastDFS/conf
[root@yxq conf]# cp http.conf mime.types /etc/fdfs/
10、在/fastdfs/storage檔案儲存體目錄 下建立軟串連,將其串連到實際存放資料的目錄 
[root@yxq conf]# ln -s /fastdfs/storage/data /fastdfs/storage/data/M00
11、配置Nginx
簡潔版nginx配置範例
root@yxq conf]# cd /usr/local/nginx/
[root@yxq nginx-1.6.2]# cd conf
[root@yxq conf]# ls
fastcgi.conf    koi-utf  mime.types  scgi_params   win-utf
fastcgi_params  koi-win  nginx.conf  uwsgi_params
[root@yxq conf]# vi nginx.conf 
user  root;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    server {
        listen       8888;
        server_name  localhost;
         location ~/group([0-9]) /M00{
            #alias /fastdfs/storage/data;
            ngx_fastdfs_module;
        }
        #error_page  404              /404.html;


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
     }
  }
}
注意、說明
A.8888連接埠值是要與/etc/fdfs/storage.conf的http.server_port=8888相對應
因為http.server_port預設為8888,如果想改成80,則要對應修改過來
B.Storage對應有多個group的情況下,訪問路徑帶group名,如/group1/M00/00/xxx,
對應的Nginx配置為
 location ~/group([0-9]) /M00{
  ngx_fastdfs_module;
}
C.如查下載時如發現老報404,將nginx.conf第一行的user nobody修改為user root後重啟
12.防火牆中開啟Nginx的8888連接埠
[root@yxq conf]# vi /etc/sysconfig/iptables
添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
[root@yxq conf]# cat /etc/sysconfig/iptables | grep 8888
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
[root@yxq conf]# service iptables restart

13、啟動Nginx
[root@yxq conf]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=15553
(重啟Nginx的命令為:/usr/local/nginx/sbin/nginx -s reload
[root@yxq conf]# /usr/local/nginx/sbin/nginx -s reload
ngx_http_fastdfs_set pid=15557
[root@yxq conf]# ps -ef | grep ngx_http_fastdfs_set
root      15561  11293  0 23:25 pts/0    00:00:00 grep ngx_http_fastdfs_set
[root@yxq conf]# 
)

14、通過瀏覽器訪問測試上傳的檔案


訪問上傳的檔案


在Java代碼中使用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.