FastDFS

1. FastDFS 理論

FastDFS 是一個開源的高性能分佈式文件系統(DFS)。 它的主要功能包括:文件存儲,文件同步和文件訪問,以及高容量和負載平衡。主要解決了海量數據存儲問題,特別適合以中小文件(建議範圍:4KB < file_size <500MB)爲載體的在線服務。
FastDFS 系統有三個角色:跟蹤服務器(Tracker Server)、存儲服務器(Storage Server)和客戶端(Client)。

tracker server
跟蹤服務器,主要做調度工作,起負載均衡的作用。負責管理所有的storage server和group,每個storage在啓動後會連接tracker,告訴tracker自己所屬的group,並保持週期性心跳,tracker根據storage的心跳信息,建立映射表,tracke管理的元數據很少(tracker上的元數據都是由storage彙報產生),並且直接存在內存中,本身不需要持久化任何數據。tracker之間是對等的,因此擴展tracker是很容易的,直接增加tracker服務,同時修改storage的配置,增加新增的tarcker服務的地址和端口,重啓即可。所有的tracker都會接受storage的心跳信息,以生成元數據信息。

storage server
存儲服務器(又稱:存儲節點或數據服務器),顧名思義是用來保存文件的和文件屬性的。以group爲單位,每個group內可以包含多臺storage server,數據互爲備份,存儲容量空間以group中storage server容量最小的爲準。以group爲單位組織存儲能夠方便的進行應用隔離、負責均衡和副本數定製;確定是group的容量受單機容量的限制。group內機器故障,需要依賴group內其他機器重新同步數據來恢復數據(更換壞盤,重啓fdfs_storaged即可)。storage存儲依賴本地文件系統,storage課配置多個數據存儲目錄,磁盤不做raid,直接分別掛在到多個目錄,將這些目錄配置爲storage的數據目錄即可。

storage接收寫請求的時候,會根據配置好的規則,選擇其中一個存儲目錄來存儲文件;爲了避免單個目錄下的文件過多,storage第一次啓動的時候,會在每個數據存儲目錄創建2級子目錄,每級256,總共65536個目錄,新寫的文件會以hash的方式路由到其中一個子目錄下,然後將文件數據直接作爲一個本地文件存儲。

client
客戶端,作爲業務請求的發起方,通過專有接口,使用TCP/IP協議與跟蹤器服務器或存儲節點進行數據交互。
文件上傳

文件上傳

在這裏插入圖片描述
生成file id
選擇存儲目錄之後,storage會生成一個file_id,採用base64編碼,包含有:storage server ip,文件創建時間,文件大小,文件CRC32校驗碼和隨機數。每個存儲目錄下有兩個256*256個子目錄,storage會按文件file_id進行兩次hash,路由到其中一個子目錄,然後將文件以file_id爲名字存儲。
文件路徑如下:
group0/M00/00/00/rBAAAl0EkICAIiBOAAABowgL3Pk888.png

  • 組名:group0
  • 磁盤: M00
  • 目錄:00/00
  • 文件名:rBAAAl0EkICAIiBOAAABowgL3Pk888.png

文件索引信息包括:組名,虛擬磁盤路徑,數據兩級目錄,文件名

  • 組名:文件上傳後所在的存儲組名稱,在文件上傳成功後有存儲服務器返回,需要客戶端自行保存。
  • 虛擬磁盤路徑:存儲服務器配置的虛擬路徑,與磁盤選項store_path*對應。
  • 數據兩級目錄:存儲服務器在每個虛擬磁盤路徑下創建的兩級目錄,用於存儲數據文件。
  • 文件名:與文件上傳時不同。是由存儲服務器根據特定信息生成,文件名包含:源存儲服務器IP地址、文件創建時間戳、文件大小、隨機數和文件拓展名等信息。
文件下載

文件下載

2.安裝FastDFS環境

下載安裝 libfastcommon
yum -y install libevent
# 下載libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
# 解壓
tar -zxvf V1.0.7.tar.gz
# 編譯、安裝
cd libfastcommon-1.0.7
 ./make.sh
 ./make.sh install
 cd /usr/lib64
 ll libfast* 
 # 複製libfastcommon.so 到 usr/lib
 cp libfastcommon.so /usr/lib
 cd /usr/lib
下載安裝FastDFS
# 下載FastDFS
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
# 解壓FastDFS
tar -zxvf V5.05.tar.gz
# 編譯、安裝
cd fastdfs-5.05
 ./make.sh
 ./make.sh install
 
# 配置tracker
cd /usr/bin
ll fdfs*
cd /etc/fdfs/
# 進入 fastdfs-5.05/conf目錄
cp * /etc/fdfs/
vim tracker.conf
# 修改 base_path=/fastdfs/tracker
cd /
mkdir /fastdfs/tracker -p
cd fastdfs/
mkdir storage
mkdir client
cd /usr/bin
fdfs_trackerd /etc/fdfs/tracker.conf
fdfs_trackerd /etc/fdfs/tracker.conf restart

# 配置storage
vim storage.conf
# 修改 base_path=/fastdfs/storage
#     store_path0=/fastdfs/storage
#     tracker_server=203.195.238.249:22122
cd /usr/bin
fdfs_storaged /etc/fdfs/storage.conf restart

# 配置client
vim client.conf
# 修改 base_path=/fastdfs/client
#     tracker_server=203.195.238.249:22122
# 測試 (先放一張圖片到/root/test/headImg.jpg)
fdfs_test /etc/fdfs/client.conf upload /root/test/headImg.jpg
# 返回路徑http://203.195.238.249/group1/M00/00/00/rBAAAl0EX5WAQtpGAACGZ5UrSuI275_big.jpg
目錄結構
|--- /
	|---fastdfs
		|---client
		|---storage
			|---data
				|---存儲的文件 256*256個目錄
			|---logs
		|---tracker
			|---data
			|---logs
		|---tmp
	|---usr
		|---lib
			|---libfastcommon.so
		|---lib64
			|---libfastcommon.so
		|---bin
			|---fdfs* 命令工具
	|---etc
		|---fdfs
			|---client.conf
			|---tracker.conf
			|---storage.conf
			|---mod_fastdfs.conf
安裝nginx

1.安裝nginx
2.修改配置文件,加入如下配置

	server  {
        listen       88;
        server_name  localhost;
       
        location /group1/M00 {
           alias /fastdfs/storage/data;
		}
    }

3.即可根據服務器的80端口訪問到圖片

fastdfs-nginx-module
# 下載
wget wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 解壓
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 重命名
mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1  fastdfs-nginx-module-master
# 先停掉nginx服務
/usr/local/nginx/sbin/nginx -s stop
# 進入之前安裝nginx的解壓包的位置
cd nginx-1.14.2
# 添加fastdfs-nginx-module模塊
./configure --add-module=../fastdfs-nginx-module-master/src
# 重新編譯、安裝
make && make install
# 複製fastdfs-nginx-module 源碼中的配置文件到/etc/fdfs 目錄
cp mod_fastdfs.conf /etc/fdfs
cd /etc/fdfs
mkdir /fastdfs/tmp
vim mod_fastdfs.conf
# 修改 store_path0=/fastdfs/storage
#     tracker_server=203.195.238.249:22122
#     base_path=/fastdfs/tmp

修改nginx的配置文件

	server  {
        listen       88;
        server_name  localhost;
       
        location /group1/M00 {
            ngx_fastdfs_module;
		}
    }
部署結構圖

部署結構圖
參考:https://www.cnblogs.com/chiangchou/p/fastdfs.html
https://www.cnblogs.com/chiangchou/p/fastdfs.html

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