1.什麼是FastDFS
FastDFS是用c語言編寫的一款開源的分佈式文件系統。FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。
2.FastDFS架構
FastDFS架構包括 Tracker server和Storage server。客戶端請求Tracker server進行文件上傳、下載,通過Trackerserver調度最終由Storage server完成文件上傳和下載。
Trackerserver作用是負載均衡和調度,通過Trackerserver在文件上傳時可以根據一些策略找到Storageserver提供文件上傳服務。可以將tracker稱爲追蹤服務器或調度服務器。
Storageserver作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務器上,Storage server沒有實現自己的文件系統而是利用操作系統 的文件系統來管理文件。可以將storage稱爲存儲服務器。2.1 Tracker 集羣
FastDFS集羣中的Tracker server可以有多臺,Tracker server之間是相互平等關係同時提供服務,Tracker server不存在單點故障。客戶端請求Tracker server採用輪詢方式,如果請求的tracker無法提供服務則換另一個tracker。
2.2 Storage集羣
Storage集羣採用了分組存儲方式。storage集羣由一個或多個組構成,集羣存儲總容量爲集羣中所有組的存儲容量之和。一個組由一臺或多臺存儲服務器組成,組內的Storage server之間是平等關係,不同組的Storageserver之間不會相互通信,同組內的Storageserver之間會相互連接進行文件同步,從而保證同組內每個storage上的文件完全一致的。一個組的存儲容量爲該組內存儲服務器容量最小的那個,由此可見組內存儲服務器的軟硬件配置最好是一致的。
採用分組存儲方式的好處是靈活、可控性較強。比如上傳文件時,可以由客戶端直接指定上傳到的組也可以由tracker進行調度選擇。一個分組的存儲服務器訪問壓力較大時,可以在該組增加存儲服務器來擴充服務能力(縱向擴容)。當系統容量不足時,可以增加組來擴充存儲容量(橫向擴容)。
2.3 Storage狀態收集
Storage server會連接集羣中所有的Tracker server,定時向他們報告自己的狀態,包括磁盤剩餘空間、文件同步狀況、文件上傳下載次數等統計信息。
3 開始搭建
3.1 FastDFS-tracker 安裝
3.1.1 下載
tracker和storage使用相同的安裝包,https://github.com/happyfish100/FastDFS.
下面用到與fastdfs相關的包,都可以在https://github.com/happyfish100找到
3.1.2 gcc
FastDFS是C語言開發,建議在linux上運行,本教程使用Centos6.4作爲安裝環境。
安裝FastDFS需要編譯,編譯依賴於gcc環境,如果沒有gcc環境,需要安裝gcc:
sudo yum install gcc-c++
3.1.3 libevent
FastDFS依賴libevent庫,需要安裝:
sudo yum -y install libevent
3.1.4 libfastcommon
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS運行所需要的一些基礎庫。
將libfastcommonV1.0.7.tar.gz 解壓,執行以下命令
tar -zxvf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install /usr/local
注意:如果後面遇到問題,可以試下這裏,如果沒問題就不需要理會。
libfastcommon.so安裝好後會自動將庫文件拷貝至/usr/lib64下,由於FastDFS程序引用usr/lib目錄所以需要將/usr/lib64下的庫文件拷貝至/usr/lib下。
3.1.5 tracker編譯安裝
tar -zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh
./make.sh install /usr/local
安裝成功將安裝目錄下的conf下的文件拷貝到/etc/fdfs/下。sudo cp conf/* /etc/fdfs/
3.1.6 配置
安裝成功後進入/etc/fdfs目錄:
vi tracker.conf
修改其中內容:
base_path = /home/yuqing/FastDFS
改爲:
base_path=/home/FastDFS
這裏需要注意,沒有 /home/FastDFS這個目錄需要創建
sudo mkdir -p /home/FastDFS
3.1.7 啓動
執行以下命令啓動
fdfs_trackered /etc/fdfs/tracker.conf restart
第一次啓動並沒有任何提示,可以進入/home/FastDFS/logs下查看日誌
設置開機自動啓動:
sudo vi /etc/rc.d/rc.local
添加以下內容:
fdfs_trackerd /etc/fdfs/tracker.conf restart
3.2 FastDFS-storage 安裝
在同一臺機子上繼續裝storage,編譯方法同tracker,
3.2.1 配置
下面講下配置
sudo vi /etc/fdfs/storage.conf
修改以下內容:
group_name=group1
base_path=/home/yuqing/FastDFS 改爲: base_path=/home/FastDFS
store_path0=/home/yuqing/FastDFS 改爲: store_path0=/home/FastDFS/fdfs_storage (這裏需要注意,如果fdfs_storage沒有創建,需要手工創建)
tracker_server=192.168.36.129:22122 #配置tracker服務器ip
3.2.2 啓動
fdfs_storaged /etc/fdfs/storage.conf restart
設置開機自動啓動
sudo vi /etc/rc.d/rc.local
添加以下內容:
fdfs_storaged /etc/fdfs/storage.conf restart
3.3 上傳圖片測試
sudo vi /etc/fdfs/client.conf
修改以下內容:
base_path=/home/FastDFS
tracker_server=192.168.36.129:22122
修改完後,使用以下命令上傳圖片
fdfs_test /etc/fdfs/client.conf upload /home/llq/Pictures/loading.gif
執行後,會打印出以下內容:
http://192.168.36.129/group1/M00/00/00/wKgkgVqzrQiAaI71AAAqm9RPKXs429.gif
使用瀏覽器訪問此url,能正常顯示圖片則爲搭建成功。
3.4 FastDFS和nginx整合
由於我們只有一臺服務器,所以就在storage上安裝nginx。
3.4.1 FastDFS-nginx-module
下載好包後,執行以下命令:
unzip fastdfs-nginx-module-master.zip
cd fastdfs-nginx-module-master/src
將FastDFS-nginx-module/src下的mod_fastdfs.conf拷貝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
修改conf內容:
vi /etc/fdfs/mod_fastdfs.conf
修改以下內容:
base_path=/home/FastDFS
tracker_server=192.168.36.129:22122
url_have_group_name = true
store_path0=/home/FastDFS/fdfs_storage
將libfdfsclient.so拷貝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/
創建nginx/client目錄
sudo mkdir -p /var/temp/nginx/client
重新配置nginx,添加模塊,然後編譯./configure --prefix=/usr/local/nginx --add-module=/home/llq/developer/fastdfs-nginx-module-master/src
make
make install
添加nginx相應的conf文件
cd /usr/local/nginx/conf
vi nginx.conf
添加以下內容:
include vhost/*.conf;
進入vhost,添加配置文件
cd vhost
vi nginx-fdfs.conf
server {
listen 80;
server_name 192.168.36.129;
location /group1/M00/ {
ngx_fastdfs_module;
}
}
添加好之後,重啓nginx
sudo /usr/local/nginx/sbin/nginx -s reload
出現以下字樣則成功:
ngx_http_fastdfs_set pid=13534