FastDFS 學習筆記

一、理論基礎

FastDFS比較適合以中小文件爲載體的在線服務,比如跟NGINX(APACHE)配合搭建圖片服務器。

分佈式文件系統FastDFS

FastDFS是純C語言實現,只支持Linux、FreeBSD等UNIX系統。

FastDFS的兩個核心概念分別是:Tracker(跟蹤器)、Storage(存儲節點)

    跟蹤器Tracker主要做調度工作,相當於mvc中的controller的角色,在訪問上起負載均衡的作用。跟蹤器和存儲節點都可以由一臺或多臺服務器構成,跟蹤器和存儲節點中的服務器均可以隨時增加或下線而不會影響線上服務,其中跟蹤器中的所有服務器都是對等的,可以根據服務器的壓力情況隨時增加或減少。

   跟蹤器Tracker負責管理所有的Storage和group,每個Storage在啓動後會連接Tracker,

告知自己所屬的group等信息,並保持週期性的心跳,tracker根據storage的心跳信息,

建立group==>[storage server list]的映射表,Tracker需要管理的元信息很少,會全部存儲在內存中;另外tracker上的元信息都是由storage彙報的信息生成的,本身不需要持久化任何數據,這樣使得tracker非常容易擴展,直接增加tracker機器即可擴展爲tracker cluster來服務,cluster裏每個tracker之間是完全對等的,所有的tracker都接受stroage的心跳信息,生成元數據信息來提供讀寫服務。

    存儲節點Storage採用了分卷[Volume](或分組[group])的組織方式,存儲系統由一個或多個組組成,組與組之間的文件是相互獨立的,所有組的文件容量累加就是整個存儲系統中的文件容量。

一個卷[Volume](組[group])可以由一臺或多臺存儲服務器組成,一個組中的存儲服務器中的文件都是相同的,組中的多臺存儲服務器起到了冗餘備份和負載均衡的作用,數據互爲備份,存儲空間以group內容量最小的storage爲準,所以建議group內的多個storage儘量配置相同,以免造成存儲空間的浪費。

二、安裝環境

操作系統版本: CentOS release 6.5

提前安裝相關操作系統包

yum install unzip zip gcc-c++

創建一個文件夾/opt/dfspackages/,用來保存相關軟件

源碼地址首頁:https://github.com/happyfish100
源碼作者:資深架構師 餘慶

公共函數庫:libfastcommon-master.zip

下載地址:

https://codeload.github.com/happyfish100/libfastcommon/zip/master

主程序:fastdfs-5.10.tar.gz

下載地址:https://github.com/happyfish100/fastdfs

https://codeload.github.com/happyfish100/fastdfs/zip/master

NGINX與DFS鏈接模塊: fastdfs-nginx-module_v1.16.tar.gz

https://github.com/happyfish100/fastdfs-nginx-module

https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master

下載完之後通過WinScp,SECURET 等工具直接傳送到服務器

接下來FastDFS的安裝過程步驟如下:

三、安置步驟

3.1 libfastcommon包安裝
FastDFS 將以前版本的公共的一些函數單獨封裝成了libfastcommon包,所以在安裝FastDFS之前我們還必須安裝libfastcommon。

3.1.1 解壓縮
unzip libfastcommon-master.zip
執行編譯步驟:./make.sh

執行安裝步驟:./make.sh install

libfastcommon.so 默認安裝到了/usr/lib64/libfastcommon.so,但是FastDFS主程序設置的lib目錄是/usr/local/lib,
所以此處需要重新設置軟鏈接(類似於Windows的快捷方式):
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

3.2 FastDFS 安裝
unzip fastdfs-master.zip
cd fastdfs-master
./make.sh
./mae.sh install

cd /etc/fdfs/
ll -lh

對三個配置文件進行拷貝,後面有用
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

3.3Tracker 安裝
創建Tracker服務器的文件路徑,即用於存儲Tracker的數據文件和日誌文件等:
mkdir /opt/fastdfs_tracker

編輯上/etc/fdfs/tracker.conf 配置文件,打開文件後依次做以下修改:
vim /etc/fdfs/tracker.conf
#啓用配置文件(默認false)
disabled=false

#設置tracker的端口號,通常採用22122這個默認端口
port=22122

#設置tracker的數據文件和日誌目錄
base_path=/opt/fastdfs_tracker

#設置http端口號,初始值爲8080
http.server_port=6666

爲啓動腳本創建軟引用,因爲fdfs_trackerd等命令在/usr/local/bin中並沒有,而是在/usr/bin路徑下:
ln -s /usr/bin/fdfs_trackerd /usr/local/bin

ln -s /usr/bin/stop.sh /usr/local/bin

ln -s /usr/bin/restart.sh /usr/local/bin

最後通過命令啓動Tracker服務器:
service fdfs_trackerd start

如果啓動命令執行成功,那麼同時在剛纔創建的tracker文件目錄/opt/fastdfs_tracker中就可以看到啓動後新生成的data和logs目錄,tracker服務的端口也應當被正常監聽,最後再通過netstat命令查看一下端口監聽情況:
netstat -unltp|grep fdfs

服務運行的22122端口正常

3.4 Storage安裝

創建Storage服務器的文件目錄,注意同Tracker相比要多建一個目錄,因爲Storage還需要一個文件存儲路徑,用於存放接收的文件:
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data

接下來修改/etc/fdfs/storage.conf配置文件,打開文件後依次做以下修改:

#設置storage端口號,默認是23000,同一個組的storage端口號必須一致
port=23000
#設置storage數據文件和日誌目錄
base_path=/opt/fastdfs_storage
#實際文件存儲路徑
store_path0=/opt/fastdfs_storage_data

#存儲路徑個數,需要和store_path個數匹配
store_path_count=1

#tracker 服務器的 IP地址和端口號,如果是單機搭建,IP不要寫127.0.0.1,否則啓動不成功
tracker_server=117.27.1.11 :22122
#設置 http 端口號
http.server_port=8888

配置完成後同樣要爲Storage服務器的啓動腳本設置軟引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin

接下來就可以啓動Storage服務了:
service fdfs_storaged start

驗證成功啓動的方法:

netstat -unltp|grep fdfs
查看是否有23000,22122,兩個端口在
成功的話,/opt/fastdfs_storage/data目錄下生成好的文件夾,data下有256個1級目錄,每級目錄下又有256個2級子目錄,總共65536個文件夾。
新寫的文件會以hash的方式被路由到其中某個子目錄下,然後將文件數據直接作爲一個本地文件存儲到該目錄中。那麼最後我們再看一下storage服務的端口監聽情況:

查看:storage服務器是否已經登記到 tracker服務器,運行以下命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

看到117.27.1.11 ACTIVE 字樣即可說明storage服務器已經成功登記到了tracker服務器
至此我們就已經完成了fastdfs的全部配置,此時也就可以用客戶端工具進行文件上傳下載的測試了。
3.5初步 測試
從https://github.com/happyfish100/fastdfs-client-java下載測試代碼
本次測試從本地F盤傳1.JPG
配置fdfs_client.conf文件
tracker_server = 117.27.1.11:22122
運行Test.java
上傳到group1/M00/00/00/dRuYfFjwefOAaADcAAjuDOhJdt4482.jpg
對應服務器上的位置:/opt/fastdfs_storage_data/data/00/00

這個是服務器上面的顯示位置

3.6 fastdfs-nginx-module
FastDFS目前已不支持http協議
餘大提供了nginx上使用FastDFS的模塊fastdfs-nginx-module,
這樣做最大的好處就是提供了HTTP服務並且解決了group中storage服務器的同步延遲問題,
安nginx模塊依賴lib庫
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel

前提要先安裝好nginx等
接下來就具體記錄一下fastdfs-nginx-module的安裝配置過程
代碼下載地址:https://github.com/happyfish100/fastdfs-nginx-module
進入源碼nginx安裝文件夾
解壓成功後就可以編譯安裝nginx了,進入nginx目錄並輸入以下命令進行配置:
./configure --prefix=/usr/local/nginx --add-module=/opt/dfspackages/fastdfs-nginx-module-master/src
make
make install

或則是全新安裝NGINX
./configure --prefix=/opt/dfsNginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --add-module=/opt/dfspackages/fastdfs-nginx-module-master/src --http-client-body-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi
make && make install
groupadd -f nginx
useradd -g nginx nginx

配置nginx.conf文件,加入server{ }中
listen 9999;

location ~/group1/M00 {
root /opt/fastdfs_storage_data/data;
ngx_fastdfs_module;
}
cp /opt/dfspackages/fastdfs-master/conf/http.conf /etc/fdfs/
cp /opt/dfspackages/fastdfs-master/conf/mime.types /etc/fdfs/
cp /opt/dfspackages/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/

編輯mod_fastdfs.conf文件,vim /etc/fdfs/mod_fastdfs.conf:
#保存日誌目錄
base_path=/opt/fastdfs_storage

#tracker服務器的IP地址以及端口號
tracker_server=192.168.111.11:22122

#storage服務器的端口號
storage_server_port=23000

#文件 url 中是否有 group 名
url_have_group_name = true

存儲路徑

store_path0=/opt/fastdfs_storage_data
#設置組的個數,事實上這次只使用了group1
group_count = 3

設置了group_count = 3,接下來就需要在文件尾部追加這3個group setting:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

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

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

接下來還需要建立 M00 至存儲目錄的符號連接:
ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/00

最後啓動nginx:
/usr/local/nginx/sbin/nginx

瀏覽器也可以看到nginx的主頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章