Fastdfs介紹及部署
FastDFS部署

一、FastDFS tracker storage 的工作原理及流程
FastDFS是一個開源的輕量級分布式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務,如相冊網站、視頻網站等等。
FastDFS服務端有兩個角色:-(tracker)和存儲節點(storage)。-主要做調度工作,在訪問上起負載均衡的作用。 存儲節點存儲文件,完成文件管理的所有功能:存儲、同步和提供存取接口,FastDFS同時對文件的metadata進行管理。所謂文件的meta data就是文件的相關屬性,以鍵值對(key ? value pair)方式表示,如:width=1024,其中的key為width,value為1024。文件metadata是文件屬性列表,可以包含多個鍵值對。
-和存儲節點都可以由一臺或多臺服務器構成。-和存儲節點中的服務器均可以隨時增加或下線而不會影響線上服務。其中-中的所有服務器都是對等的,可以根據服務器的壓力情況隨時增加或減少。
為了支持大容量,存儲節點(服務器)采用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷的文件容量累加就是整個存儲系統中的文件容量。一個卷可以由一臺或多臺存儲服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多臺存儲服務器起到了冗余備份和負載均衡的作用。在卷中增加服務器時,同步已有的文件由系統自動完成,同步完成后,系統自動將新增服務器切換到線上提供服務。
當存儲空間不足或即將耗盡時,可以動態添加卷。只需要增加一臺或多臺服務器,并將它們配置為一個新的卷,這樣就擴大了存儲系統的容量。
FastDFS中的文件標識分為兩個部分:卷名和文件名,二者缺一不可。
FastDFS file upload
上傳文件交互過程:
1. client詢問tracker上傳到的storage,不需要附加參數;
2. tracker返回一臺可用的storage;
3. client直接和storage通訊完成文件上傳。
FastDFS file download
下載文件交互過程:
1. client詢問tracker下載文件的storage,參數為文件標識(卷名和文件名);
2. tracker返回一臺可用的storage;
3. client直接和storage通訊完成文件下載。
group0/M00/00/02/Cs8b8lFJIIyAH841AAAbpQt7xVI4715674
組名:group0 ? 磁盤:?M00 ? ? 目錄:00/02 ? 文件名:Cs8b8lFJIIyAH841AAAbpQt7xVI4715674
文件名包含的信息: ? 采用Base64編碼, 包含的字段包括 :? 源storage server Ip 地址? 文件創建時間? 文件大小? 文件CRC32效驗碼?? 隨機數
需要說明的是,client為使用FastDFS服務的調用方,client也應該是一臺服務器,它對tracker和storage的調用均為服務器間的調用。
二、FastDFS 同步機制說明
tracker server會在內存中保存storage分組及各個組下的storage server,并將連接過自己的storage server及其分組保存到文件中,以便下次重啟服務時能直接從本地磁盤中獲得storage相關信息。storage server會在內存中記錄本組的所有服務器,并將服務器信息記錄到文件中。tracker server和storage server之間相互同步storage server列表:
1. 如果一個組內增加了新的storage
server或者storage server的狀態發生了改變,tracker server都會將storage server列表同步給該組內的所有storage server。以新增storage server為例,因為新加入的storage
server主動連接tracker ? server,tracker server發現有新的storage server加入,就會將該組內所有的storage server返回給新加入的storage server,并重新將該組的storage server列表返回給該組內的其他storage server;
2. 如果新增加一臺tracker ? server,storage server連接該tracker server,發現該tracker server返回的本組storage server列表比本機記錄的要少,就會將該tracker server上沒有的storage server同步給該tracker server。同一組內的storage server之間是對等的,文件上傳、刪除等操作可以在任意一臺storage server上進行。文件同步只在同組內的storage server之間進行,采用push方式,即源服務器同步給目標服務器。以文件上傳為例,假設一個組內有3臺storage server A、B和C,文件F上傳到服務器B,由B將文件F同步到其余的兩臺服務器A和C。我們不妨把文件F上傳到服務器B的操作為源頭操作,在服務器B上的F文件為源頭數據;文件F被同步到服務器A和C的操作為備份操作,在A和C上的F文件為備份數據。同步規則總結如下:
1. 只在本組內的storage ? server之間進行同步;
2. 源頭數據才需要同步,備份數據不需要再次同步,否則就構成環路了;
3. 上述第二條規則有個例外,就是新增加一臺storage ? server時,由已有的一臺storage ? server將已有的所有數據(包括源頭數據和備份數據)同步給該新增服務器。storage server有7個狀態,如下:
# FDFS_STORAGE_STATUS_INIT :初始化,尚未得到同步已有數據的源服務器
# FDFS_STORAGE_STATUS_WAIT_SYNC :等待同步,已得到同步已有數據的源服務器
# FDFS_STORAGE_STATUS_SYNCING :同步中
# FDFS_STORAGE_STATUS_DELETED :已刪除,該服務器從本組中摘除(注:本狀態的功能尚未實現)
# FDFS_STORAGE_STATUS_OFFLINE :離線
# FDFS_STORAGE_STATUS_ONLINE :在線,尚不能提供服務
# FDFS_STORAGE_STATUS_ACTIVE :在線,可以提供服務
當storage
server的狀態為FDFS_STORAGE_STATUS_ONLINE時,當該storage server向tracker server發起一次heart beat時,tracker server將其狀態更改為FDFS_STORAGE_STATUS_ACTIVE。
組內新增加一臺storage server A時,由系統自動完成已有數據同步,處理邏輯如下:
1. storage server A連接tracker server,tracker server將storage server A的狀態設置為FDFS_STORAGE_STATUS_INIT。storage server A詢問追加同步的源服務器和追加同步截至時間點,如果該組內只有storage server A或該組內已成功上傳的文件數為0,則沒有數據需要同步,storage server A就可以提供在線服務,此時tracker將其狀態設置為FDFS_STORAGE_STATUS_ONLINE,否則tracker server將其狀態設置為FDFS_STORAGE_STATUS_WAIT_SYNC,進入第二步的處理;
2. 假設tracker server分配向storage server A同步已有數據的源storage server為B。同組的storage server和tracker server通訊得知新增了storage server A,將啟動同步線程,并向tracker server詢問向storage server A追加同步的源服務器和截至時間點。storage server B將把截至時間點之前的所有數據同步給storage server A;而其余的storage server從截至時間點之后進行正常同步,只把源頭數據同步給storage server A。到了截至時間點之后,storage server B對storage server A的同步將由追加同步切換為正常同步,只同步源頭數據;
3. storage server B向storage server A同步完所有數據,暫時沒有數據要同步時,storage server B請求tracker server將storage server A的狀態設置為FDFS_STORAGE_STATUS_ONLINE;
4 當storage server ? A向tracker server發起heart beat時,tracker server將其狀態更改為FDFS_STORAGE_STATUS_ACTIVE。
三、部署
1.部署fastdfs
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
wget ? https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
tar –zxvf? ? V1.0.7
tar –zxvf? ? V5.05
cp -r libfastcommon-1.0.7 ? /usr/local/libfastcommom
cd /usr/local/libfastcommom/
yum install gcc -y
./make.sh
./make.sh? ? install
ln -s /usr/lib64/libfastcommon.so ? /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so ? /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so ? /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so ? /usr/lib/libfdfsclient.so
find / -name libfdfsclient.so
cp -r fastdfs-5.05/? /usr/local/fastdfs
cd /usr/local/fastdfs
./make.sh
./make.sh install
ll /etc/fdfs/
cd /etc/fdfs
2.配置文件設置
cp tracker.conf.sample tracker.conf
cp storage.conf.sample storage.conf
cp client.conf.sample client.conf
vim /etc/fdfs/tracker.conf (見附件1)
一般只需改動以下幾個參數即可:
disabled=false??????????? #啟用配置文件
port=22122??????????????? #設置tracker的端口號
base_path=/home/tracker/ ??#設置tracker的數據文件和日志目錄(需預先創建)
http.server_port=8030???? #設置http端口號
vim /etc/fdfs/ storage.conf (見附件2)
一般只需改動以下幾個參數即可:
disabled=false??????????? #啟用配置文件
group_name=group1#組名,根據實際情況修改
port=23000#設置storage的端口號
base_path=/fdfs/storage#設置storage的日志目錄(需預先創建)
store_path_count=1#存儲路徑個數,需要和store_path個數匹配
store_path0=/fdfs/storage#存儲路徑
tracker_server=172.16.1.202:22122 ? #tracker服務器的IP地址和端口號
http.server_port=8080???? #設置http端口號
3.啟動
mkdir -p ?/home/fastdfs/tracker
啟動tracker tracker.conf
fdfs_trackerd ? /etc/fdfs/tracker.conf
mkdir /home/fastdfs/storage
啟動tracker storage.conf
fdfs_storaged? /etc/fdfs/storage.conf
四、安裝nginx及nginx插件
1.部署nginx插件
cd /usr/local/fastdfs/conf
cp http.conf ???/etc/fdfs/
cp mime.types? /etc/fdfs/
tar -zxvf ? fastdfs-nginx-module_v1.16.tar.gz
vi fastdfs-nginx-module/src/config
第四行改為:
CORE_INCS="$CORE_INCS ? /usr/include/fastdfs /usr/include/fastcommon/"
cp ? /root/fastdfs-nginx-module/src/mod_fastdfs.conf ?/etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf ?(見附件3)
2.編譯安裝nginx
cd /root
tar -zxvf nginx-1.7.10.tar.gz
cd? ? nginx-1.7.10
yum install gcc gcc-c++ pcre-devel ? zlib-devel? openssl-devel?? -y
./configure --prefix=/usr/local/nginx/ ? --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module ? --with-md5=/usr/lib --with-sha1=/usr/lib --with-http_gzip_static_module? --add-module=/root/fastdfs-nginx-module/src&& ? make&&make install
vi /usr/local/nginx/conf/
修改端口號為8030(任意)
加入一組location
location ~/group[1-3]/M00{
root /home/fastdfs/data;
ngx_fastdfs_module;
}
cd /root
vi / nginx (見附件4)
chmod a+x nginx
cp nginx /etc/init.d
chkconfig --add nginx
chkconfig nginx on
service nginx start
netstat -antup |grep 8030
3.配置軟連接
ln -s /home/fastdfs/storage/data ?/home/fastdfs/storage/data/M00
4.啟動nginx
service nginx restart
tail -400f /usr/local/nginx/logs/error.log
五、測試
echo "hello ccit" ?>test.txt
/usr/bin/fdfs_test /etc/fdfs/client.conf upload test.txt
瀏覽器訪問:
http://192.168.10.17:8030/group1/M00/00/00/wKgKEVgRURyAM-kKAAAAC-QpJeQ227.txt
六、常用命令
上傳文件:/usr/local/bin/fdfs_upload_file?
下載文件:/usr/local/bin/fdfs_download_file
刪除文件:/usr/local/bin/fdfs_delete_file
啟動、停止命令
啟動:
fdfs_trackerd /etc/fdfs/tracker.conf
fdfs_storaged? /etc/fdfs/storage.conf
停止:
ps -aux|grep fdfs
kill -9 進程號
華為云APP 云市場
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。