FastDFS
是用c
語言編寫的一款開源的分布式文件系統,充分考慮了冗余備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS
很容易搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。
一、FastDFS架構
FastDFS
架構包括Tracker server
和Storage server
。客戶端請求Tracker server
進行文件上傳、下載,通過Tracker server
調度最終由Storage server
完成文件上傳和下載。
1.Tracker Server
Tracker server
作用是負載均衡和調度,通過Tracker server
在文件上傳時可以根據一些策略找到Storage server
提供文件上傳服務,可以將tracker
稱為追蹤服務器或調度服務器。
2.Storage server
Storage server
作用是文件存儲,客戶端上傳的文件最終存儲在Storage
服務器上,Storage server
沒有實現自己的文件系統而是利用操作系統的文件系統來管理文件。可以將storage
稱為存儲服務器。
二、FastDFS安裝
FastDFS的安裝比較麻煩,需要配置許多的參數,所以要有耐心。本次配置是在Ubuntu
系統版本為16.04.3 LTS
下進行的,並且是干凈的版本,比如gcc
、ssh
等軟件包都沒有安裝。
下面開始進行環境配置:
1.軟件包
下面是安裝FastDFS
的安裝包,也可以下載到:FastDFS,密碼為:ideg
。
軟件包 | 版本 |
---|---|
FastDFS | v5.05 |
libfastcommon | v1.0.7 |
fastdfs-nginx-module | v1.16 |
nginx | v1.12.1 |
2.安裝libfastcommon
在編譯libfastcommon
之前,要先安裝gcc
的編譯器:
sudo apt-get install build-essential
如果提示某些包安裝不上,請先更新apt
:
sudo apt-get update
之后再安裝gcc
,安裝成功后就可以編譯安裝了:
./make.sh && sudo ./make.sh install
最后,把生成的libfastcommon
庫拷貝到/usr/lib
目錄下
sudo cp /usr/lib64/* /usr/lib/
3.編譯FastDFS
解壓FastDFS_v5.05.tar.gz
,然后編譯安裝FastDFS
:
tar zxf FastDFS_v5.05.tar.gz
./make.sh
sudo ./make.sh install
安裝成功后將目錄conf
內的文件拷貝到/etc/fdfs
目錄下:
sudo cp conf/* /etc/fdfs/
4.安裝tracker
進入/etc/fdfs
目錄,修改tracker.conf
文件。如果不存在,就拷貝tracker.conf.sample
文件為tracker.conf
,然后再修改:
base_path=/home/yuqing/fastdfs >>> base_path=/home/kelvin/data/fastdfs
http.server_port=8080 >>> http.server_port=80
其中,/home/kelvin/data/fastdfs
目錄如果不存在,就創建一個。
之后,就啟動tracker
,並查看是啟動成功(出現如下提示,表示啟動成功):
$ fdfs_trackerd /etc/fdfs/tracker.conf start
$ netstat -unltp | grep tracker
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 7281/fdfs_trackerd
5.安裝storage
修改storage.conf
文件。如果不存在,就拷貝storage.conf.sample
文件為storage.conf
,然后再修改:
base_path=/home/yuqing/fastdfs >>> base_path=/home/kelvin/data/fastdfs/storage
store_path0=/home/yuqing/fastdfs >>> store_path0=/home/kelvin/data/fastdfs/storage
tracker_server=192.168.209.121:22122 >>> tracker_server=192.168.2.231:22122
其中,如果/home/kelvin/data/fastdfs/storage
不存在,就創建該目錄
然后,就啟動storage
,並查看是否成功(出現如下提示,表示啟動成功):
$ fdfs_storaged /etc/fdfs/storage.conf start
$ netstat -unltp | grep storage
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 7348/fdfs_storaged
最后,查看tracker
和storage
是不是在通信:
$ fdfs_monitor /etc/fdfs/storage.conf
...
current trunk file id = 0
Storage 1:
id = 192.168.2.231
ip_addr = 192.168.2.231 ACTIVE
...
如上提示,出現ACTIVE
,表示二者均正常啟動,至此就可以進行上傳文件測試了。
6.安裝Nginx
首先解壓fastdfs-nginx-module_v1.16.tar.gz
,然后把解壓后的文件目錄整個拷貝到/usr/local/src
目錄下。
然后配置nginx
,加入fastdfs-nginx-module
模塊:
$ sudo ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/
如果出現如下錯誤,
error: the HTTP rewrite module requires the PCRE library
請安裝libpcre3
和ssh
的庫
$ sudo apt-get install libpcre3 libpcre3-dev
$ sudo apt-get install openssl libssl-dev
之后再執行configure
配置,完成后進行安裝:
sudo make
如果出現如下錯誤:
root/fastdfs-nginx-module/src//common.c:21:25: fatal error: fdfs_define.h: No such file or directory
#include "fdfs_define.h"
則需要再添加如下配置:
1.把/usr/lib64/libfdfsclient.so
庫拷貝到/usr/lib/
目錄下:
$ sudo cp /usr/lib64/libfdfsclient.so /usr/lib/
2.配置/usr/local/src/fastdfs-nginx-module/src/
目錄下的config
文件,把CORE_INCS
和CORE_LIBS
的所有路徑都修改為/usr/include
和/usr/lib
:
$ sudo vi /usr/local/src/fastdfs-nginx-module/src/config
...
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
...
之后就可以執行編譯和安裝了:
$ sudo make && sudo make install
完成之后,可以查看fastdfs-nginx-module
是否配置成功(下面提示表示配置成功):
$ /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.12.1
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
configure arguments: --add-module=/usr/local/src/fastdfs-nginx-module/src
7.整合fastdfs-nginx-module 和 Nginx
首先到/usr/local/src/fastdfs-nginx-module-master/src/
目錄下,拷貝mod_fastdfs.conf
文件到/etc/fdfs
目錄下,然后進行如下配置:
base_path=/home/kelvin/data/fastdfs
tracker_server=192.168.2.231:22122
url_have_group_name = true
store_path0=/home/kelvin/data/fastdfs/storage
然后配置Nginx
,添加如下內容:
server {
listen 80;
server_name localhost;
...
# 配置fastdfs的訪問路徑
location /group1/M00 {
ngx_fastdfs_module;
}
...
}
之后啟動nginx
:
$ sudo /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=23238
上傳測試
在進行測試之前,我們還需要先配置一下client.conf
文件,該文件在/etc/fdfs
目錄下,配置如下:
$ sudo vi /etc/fdfs/cli
...
base_path=/home/kelvin/data/fastdfs
tracker_server=192.168.2.231:22122
...
然后,創建一個test.txt
文件,隨便輸入一些內容,再進行上傳:
$ echo HelloWorld > ~/test.txt
$ fdfs_test /etc/fdfs/client.conf upload ~/test.txt
...
[2017-09-23 20:12:00] DEBUG - base_path=/home/kelvin/data/fastdfs, 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=192.168.2.231, port=23000
group_name=group1, ip_addr=192.168.2.231, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKgC51nHIoCACtpSAAAAC5KLpvs082.txt
source ip address: 192.168.2.231
file timestamp=2017-09-23 20:12:00
file size=11
file crc32=2458625787
example file url: http://192.168.2.231/group1/M00/00/00/wKgC51nHIoCACtpSAAAAC5KLpvs082.txt
...
最后,在瀏覽器里輸入http://192.168.2.231/group1/M00/00/00/wKgC51nHIoCACtpSAAAAC5KLpvs082.txt
,即可訪問到test.txt的文件內容:
以上就是Fastdfs
的安裝過程,如有錯誤,歡迎指出,共同進步。(文中部分圖片來自互聯網,版權歸原作者所有)
參考資料