FastDFS
分散式圖片伺服器FastDFS
1 什麼是FastDFS
FastDFS 是用 c 語言編寫的一款開源的分散式檔案系統。FastDFS 為網際網路量身定製, 充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用 FastDFS 很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、下載等服務。
FastDFS 架構包括 Tracker server 和 Storage server。客戶端請求 Tracker server 進行文 件上傳、下載,通過 Tracker server 排程最終由 Storage server 完成檔案上傳和下載。
Tracker server 作用是負載均衡和排程,通過 Tracker server 在檔案上傳時可以根據一些 策略找到 Storage server 提供檔案上傳服務。可以將 tracker 稱為追蹤伺服器或排程服務 器。
Storage server 作用是檔案儲存,客戶端上傳的檔案最終儲存在 Storage 伺服器上, Storage server 沒有實現自己的檔案系統而是利用作業系統 的檔案系統來管理檔案。可以將 storage 稱為儲存伺服器。
服務端兩個角色:
Tracker:管理叢集,tracker 也可以實現叢集。每個 tracker 節點地位平等。收集 Storage 叢集的狀態。
Storage:實際儲存檔案 Storage 分為多個組,每個組之間儲存的檔案是不同的。每 個組內部可以有多個成員,組成員內部儲存的內容是一樣的,組成員的地位是一致的,沒有 主從的概念。
2 檔案上傳流程
客戶端上傳檔案後儲存伺服器將檔案 ID 返回給客戶端,此檔案 ID 用於以後訪問該文 件的索引資訊。檔案索引資訊包括:組名,虛擬磁碟路徑,資料兩級目錄,檔名。
組名:檔案上傳後所在的 storage 組名稱,在檔案上傳成功後有 storage 伺服器返回, 需要客戶端自行儲存。
虛擬磁碟路徑:storage 配置的虛擬路徑,與磁碟選項 store_path*對應。如果配置了 store_path0 則是 M00,如果配置了 store_path1 則是 M01,以此類推。
資料兩級目錄:storage 伺服器在每個虛擬磁碟路徑下建立的兩級目錄,用於儲存資料 檔案。
檔名:與檔案上傳時不同。是由儲存伺服器根據特定資訊生成,檔名包含:源儲存 伺服器 IP 地址、檔案建立時間戳、檔案大小、隨機數和檔案拓展名等資訊。
3 檔案下載流程
4 簡易FastDFS架構
5 FastDFS安裝
資源下載ofollow,noindex" target="_blank">https://pan.baidu.com/s/1MAte... 密碼: 密碼:yszq
5.1 安裝fastdfs依賴包 1. 解壓縮libfastcommon-master.zip 2. 進入到libfastcommon-master的目錄中 3. 執行 ./make.sh 編譯C語言檔案,生成可執行檔案 4. 執行 sudo ./make.sh install 5.2 安裝fastdfs 1. 解壓縮fastdfs-master.zip 2. 進入到 fastdfs-master目錄中 3. 執行 ./make.sh 4. 執行 sudo ./make.sh install 5.3 配置跟蹤伺服器tracker 1. sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf 2. 在/home/python/目錄中建立目錄 fastdfs/tracker mkdir –p /home/python/fastdfs/tracker 3. 編輯/etc/fdfs/tracker.conf配置檔案sudo vim /etc/fdfs/tracker.conf 修改 base_path=/home/python/fastdfs/tracker 5.4 配置儲存伺服器storage 1. sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf 2. 在/home/python/fastdfs/ 目錄中建立目錄 storage mkdir –p /home/python/fastdfs/storage 3. 編輯/etc/fdfs/storage.conf配置檔案sudo vim /etc/fdfs/storage.conf 修改內容: base_path=/home/python/fastdfs/storage store_path0=/home/python/fastdfs/storage tracker_server=自己ubuntu虛擬機器的ip地址:22122 5.5 啟動tracker 和 storage sudo service fdfs_trackerd start sudo service fdfs_storaged start 或者以下兩個命令: sudo /etc/init.d/fdfs_trackerd start sudo /etc/init.d/fdfs_storaged start 5.6 測試是否安裝成功 1. sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf 2. 編輯/etc/fdfs/client.conf配置檔案sudo vim /etc/fdfs/client.conf 修改內容: base_path=/home/python/fastdfs/tracker tracker_server=自己ubuntu虛擬機器的ip地址:22122 3. 上傳檔案測試: fdfs_upload_file /etc/fdfs/client.conf 要上傳的圖片檔案路徑 如果返回類似group1/M00/00/01/wKjzwVouQn6AfD6ZAALb6Vx4KgI81.jpeg的檔案id則說明檔案上傳成功 5.7 安裝nginx及fastdfs-nginx-module 1. 解壓縮 nginx-1.8.1.tar.gz 2. 解壓縮 fastdfs-nginx-module-master.zip 3. 進入nginx-1.8.1目錄中 4. 執行 sudo ./configure --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module-master解壓後的目錄的絕對路徑/src 比如:sudo ./configure --prefix=/usr/local/nginx/ --add-module=/home/python/Desktop/fastdfs-nginx-module-master/src sudo make sudo make install 5. sudo cp fastdfs-nginx-module-master解壓後的目錄中src下的mod_fastdfs.conf/etc/fdfs/mod_fastdfs.conf 比如:sudo cp /home/python/Desktop/fastdfs-nginx-module-master/src/mod_fastdfs.conf/etc/fdfs/mod_fastdfs.conf 6. sudo vim /etc/fdfs/mod_fastdfs.conf 修改內容: connect_timeout=10 tracker_server=自己ubuntu虛擬機器的ip地址:22122 url_have_group_name=true store_path0=/home/python/fastdfs/storage 7. sudo cp 解壓縮的fastdfs-master/ conf目錄中的http.conf/etc/fdfs/http.conf 比如:sudo cp /home/python/Desktop/fastdfs-master/conf/http.conf/etc/fdfs/http.conf 8. sudo cp 解壓縮的fastdfs-master/ conf目錄中的mime.types /etc/fdfs/mime.types 比如:sudo cp /home/python/Desktop/fastdfs-master/conf/mime.types/etc/fdfs/mime.types 9.sudo vim /usr/local/nginx/conf/nginx.conf 在http部分中新增配置資訊如下: server { listen8888; server_namelocalhost; location ~/group[0-9]/ { ngx_fastdfs_module; } error_page500 502 503 504/50x.html; location = /50x.html { roothtml; } } 10. 進入根目錄啟動nginx sudo /usr/local/nginx/sbin/nginx 11. 測試nginx獲取fdfs伺服器的圖片 瀏覽器輸入地址:http://192.168.243.193:8888/group1/M00/00/01/wKjzwVouQn6AfD6ZAALb6Vx4KgI81.jpeg 說明:group1/M00/00/01/wKjzwVouQn6AfD6ZAALb6Vx4KgI81.jpeg 為之前上傳到fdfs伺服器的圖片路徑
6 使用python客戶端上傳測試
1.文件 https://github.com/jefforeilly/fdfs_client-py 2. workon django_py3 3. 進入fdfs_client-py-master.zip所在目錄 4. pip install fdfs_client-py-master.zip >>> from fdfs_client.client import Fdfs_client >>> client = Fdfs_client('/etc/fdfs/client.conf') >>> ret = client.upload_by_filename('test') >>> ret {'Group name':'group1','Status':'Upload successed.', 'Remote file_id':'group1/M00/00/00/ wKjzh0_xaR63RExnAAAaDqbNk5E1398.py','Uploaded size':'6.0KB','Local file name':'test' , 'Storage IP':'192.168.243.133'}