前言:
以前的項目上傳的文件都是保存到本地或者是局域網內的共享文件夾下,由於數據量,服務器的負載均衡(分機的某些圖片無法訪問的問題處理)等因素的情況下,就想到用fastdfs來文件管理,花了幾天時間硬着頭皮去學習怎樣安裝配置,由於linux基礎不好,安裝配置起來感覺有點費力,不得不隨時去查找一些資料,好在經過這幾天的努力安裝配置fastdfs最終還是搞定了,最終的付出並沒有白費,以下是個人的見解,如有誤差,請多多指導。不了解fastdfs的童鞋可以先去了解下,請看http://tech.uc.cn/?p=221
一、簡介
FastDFS是一個開源的輕量級分布式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務,如相冊網站、視頻網站等等
1.fastdfs架構如下圖示:

FastDFS服務端有三個角色:跟蹤服務器(tracker server)、存儲服務器(storage server)和客戶端(client)。
- tracker server:跟蹤服務器,主要做調度工作,起負載均衡的作用。在內存中記錄集群中所有存儲組和存儲服務器的狀態信息,是客戶端和數據服務器交互的樞紐。相比GFS中的master更為精簡,不記錄文件索引信息,占用的內存量很少。
- storage server:存儲服務器(又稱:存儲節點或數據服務器),文件和文件屬性(meta data)都保存到存儲服務器上。Storage server直接利用OS的文件系統調用管理文件。
- client:客戶端,作為業務請求的發起方,通過專有接口,使用TCP/IP協議與跟蹤器服務器或存儲節點進行數據交互。
二、文件上傳和下載的交互過程
上傳機制:


上傳流程:
客戶端(client)詢問Tracker server上傳到的Storage server
1.client->Tracker server(返回一台可用的Storage server,返回的數據為該Storage server的IP地址和端口)
2.client直接與1返回的Storage server建立連接->文件上傳成功后->Storage server會返回新生成的文件ID->結束
文件下載流程的步驟如下:
1. client詢問Tracker server可以下載指定文件的Storage server,參數為文件ID(包含組名和文件名);
2. Tracker server返回一台可用的Storage server;
3. client直接和該Storage server建立連接,完成文件下載。
系統環境Centor7 64位,本文只安裝一個tracker和storage在同一台服務器
准備安裝包
首先下載如下的安裝包(下載地址,請查看本文最后的下載地址部分):

三、安裝過程
由於fastdfs5.0.5依賴libevent,所以我們先安裝libevent,其中openssl,pcre,zlib是nginx的依賴,由於需要使用apt-get命令安裝軟件,但此處出現資源不可用的情況或者無效的指令,所以需要手動去安裝這些依賴確實會很麻煩,下文會說到,此處是先解釋上圖的文件,以防有些童鞋誤導。
安裝步驟如下:
登陸linux系統,切換用戶到root用戶下
1.安裝libevent
cd /root(對應存放libevent壓縮文件的目錄)
tar -zxvf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
make clean
./configure
make
make install
最后,如果是
32位linux:
ln –s /usr/local/libevent/libevent-2.0.so.5 /usr/lib/
64位linux:
ln -s /usr/local/libevent/libevent-2.0.so.5 /usr/lib64/
2.FastDFS安裝
tar -zxvf FastDFS_v4.06.tar.gz
cd FastDFS_v4.06
./make.sh
./make.sh install
如果沒報錯就表示安裝成功了,創建了上面的軟鏈接安裝基本就沒問題了
2.1:安裝成功后,/etc/fdfs目錄下會有相關配置文件:
client.conf
http.conf
mime.types
storage.conf
tracker.conf
修改配置文件:
配置tracker
gedit tracker.conf
2.2:修改配置文件的這幾項(根據數據情況修改):
disabled=
false
#啟用配置文件
port=22122
#設置tracker的端口號
base_path=
/data/fastdfs/trackerd
#設置tracker的數據文件和日志目錄(需預先創建)
http.server_port=18080
#設置http端口號
# echo '/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart' >> /etc/rc.d/rc.local
通過如下命令查看trackerd服務是否啟動:
netstat -tupln | grep trackerd
也可以通過查看日志文件看下有沒有出錯(/data/fastdfs/tracker/logs是前面配置的路徑),如果沒有報錯,應該trackerd服務啟動了。
配置storage.conf
gedit storage.conf
disabled=
false
#啟用配置文件
group_name=group1
#組名,根據實際情況修改
port=23000
#設置storage的端口號
base_path=
/data/fastdfs/storage
#設置storage的日志目錄(需預先創建)
store_path_count=1
#存儲路徑個數,需要和store_path個數匹配
store_path0=
/data/fastdfs/storage
#存儲路徑
tracker_server=192.168.188:22122
#tracker服務器的IP地址和端口號
http.server_port=80
#設置http端口號
storage /etc/fdfs/storage.conf
設置開機啟動
# echo '/usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf restart' >> /etc/rc.d/rc.local
通過如下命令查看storaged服務是否啟動:
netstat -tupln | grep storaged
也可以通過查看日志文件看下有沒有出錯(/data/fastdfs/storage/logs是前面配置的路徑),如果沒有報錯,應該storaged服務啟動了
配置http.conf中有防盜鏈的,可以根據需要配置一下,:
http.anti_steal.check_token=true
http.anti_steal.token_ttl=900 http.anti_steal.secret_key=FastDFSSecretKey001 http.anti_steal.token_check_fail=/data/fastdfs/img/anti-steal.jpg
http.anti_steal.check_token:是否開啟防盜鏈,默認為false
http.anti_steal.token_ttl:防盜鏈token的有效時長
http.anti_steal.secret_key:生成token的密鑰
http.anti_steal.token_check_fail:如果是防盜鏈,需要展示的圖片路徑
配置client並測試上傳
gedit client.conf
修改配置文件的這幾項(根據數據情況修改):
base_path=/data/fastdfs/client
tracker_server=192.168.1.188:22122
那么接下來就可以進行一個簡單文件上傳測試了
cd /usr/local/bin

上圖上傳的是client.conf ,執行成功會返回對應的組+M00+圖片的相對路徑(也即上述storage配置的路徑)。
如果需要用瀏覽器訪問該圖片,就需要nginx來做反向代理,直接訪問是不行的。
那么接下來就需要安裝和配置nginx,文章的開篇說到,openssl,pcre,zlib是nginx的依賴,如果不能使用命令安裝自動安裝的話,就需要手動的一個個安裝
安裝nginx依賴(以下使用的版本是個人使用。並沒有特別的意思)
1.安裝pcre
獲取pcre編譯安裝包,在http://www.pcre.org/上可以獲取當前最新的版本
解壓縮pcre-8.31.tar.gz包。
進入解壓縮目錄,執行./configure。
依次執行make 和 make install命令
2.安裝openssl
獲取openssl編譯安裝包,在http://www.openssl.org/source/上可以獲取當前最新的版本。
解壓縮openssl-1.0.2h.tar.gz包。
進入解壓縮目錄,執行./config。
依次執行make 和 make install命令
3.安裝zlib
獲取zlib編譯安裝包,在http://www.zlib.net/上可以獲取當前最新的版本。
解壓縮zlib-1.2.5.tar.gz包。
進入解壓縮目錄,執行./configure。
依次執行make 和 make install命令
4.那么到現在為止:nginx的依賴模塊都已經安裝完畢,接着可以進行安裝nginx
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1
./configure --prefix=/usr/local/nginx (--prefix是安裝到那個目錄下)
make
make install
5.安裝完nginx后進行nginx的配置
cd /usr/local/nginx/conf
gedit nginx.conf
在server節點加入下面的配置
location /group1/M00{
root /fastdfs/storage/data;
ngx_fastdfs_module;
}
這個時候你監聽的端口后默認是80,之前我配置storage文件的時候的http.server_port就有用到80,如需要改其他端口的,可根據情況自行修改
error_page 500 502 503 504
/50x
.html;
location =
/50x
.html {
root
/usr/share/nginx/html
;
}
6.啟動nginx
/usr/local/nginx/sbin/nginx
用如下命令查看nginx是否啟動了:
netstat -tupln | grep nginx
成功的話會看到nginx監控的信息

7.安裝和配置nginx插件fastdfs-nginx-module
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
cd fastdfs-nginx-module/src/
gedit config (這一步很重要,很重要,很重要(重要的事情說三遍)我就是被一些文章弄暈了幾天,導致啟動nginx模塊的時候出現錯誤,如果上面啟動nginx報錯的話,先不用着急,接着安裝nginx插件,這里配置好重新編譯一遍,然后重新啟動nginx就ok了)
CORE_INCS=
"$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
CORE_LIBS=
"$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
vim 修改/etc/fdfs/mod_fastdfs.conf 保存退出
修改如下幾項:
tracker_server=192.168.1.188:22122
store_path0=/data/fastdfs/storage
base_path=/data/fastdfs/storage/data
url_have_group_name = true(配置多個tracker時,應該將此項設置為true)
建立軟連接(配置文件中storage存放數據的路徑)
ln -s /data/fastdfs/storage/data /data/fastdfs/storage/data/M00
將FastDFS_v4.06配置目錄下的2個文件復制到/etc/fdfs目錄下:
cp /usr/local/fastdfs-5.05/conf/http.conf .
cp /usr/local/fastdfs-5.05/conf/mime.types .
最后我再進行一次上傳文件測試:
cd /usr/local/bin

上傳了一張測試圖片
然后再瀏覽器上面輸入自己的ip+端口號+文件路徑(ip換成綁定的對應域名也行)
看下成果:

這樣基本就ok了
歡迎看完來噴,更歡迎有建設性的意見。大家一起探討學習
