FastDFS是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。
FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。
FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要做調度工作,在訪問上起負載均衡的作用。
搭建流程:
一,安裝
安裝libfastcommon:
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.38.tar.gz
安裝FastDFS
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
安裝Nginx
wget http://nginx.org/download/nginx-1.15.2.tar.gz
安裝fastdfs-nginx-module
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
解壓後,先配置libfastcommon和FastDFS
文件是用C語言寫的,所以我們還需要cd到解壓後的文件目錄中執行
./make.sh
./make.sh install
二,配置tracker
編譯成功後, cd 進入/etc/fdfs目錄中,可以看到3個帶.sample後綴的模板配置文件,我們先修改tracker.conf.sample 爲tracker.conf
裏面進行如下修改:
base_path=/home/xx/fdfs/tarcher #tracker存儲data和log的跟路徑,必須事前存在
port=23000 #tracker默認23000
http.server_port=80 #使用http服務器的端口。
三,配置Storage
同上,修改storage.conf.sample爲storage.conf。
裏面進行如下修改:
base_path=/home/xx/fdfs/storage #storage存儲data和log的跟路徑,必須提前創建好
port=23000 #storge默認23000,同一個組的storage端口號必須一致
group_name=group1 #默認組名,根據實際情況修改
store_path_count=1 #存儲路徑個數,需要和store_path個數匹配
store_path0=/home/xx/fdfs/storage #配置存儲路徑,若有多個存儲節點可繼續配置store_path1.。。
tracker_server=192.168.8.33:22122 #配置本storage監聽的tracker的機器的ip和port
配置完後啓動:
最好寫絕對路徑,不然會出現找不到文件的錯誤
fdfs_storaged /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start
四,配置nignx
進入nginx目錄
配置加載fastdfs-nginx-module模塊
–prefix=/usr/local/nginx指的是指定安裝nginx後的文件路徑,
add-module=/home/fastdfs-nginx-module-1.20/src/指的是fastdfs-nginx-module的src子文件夾的路徑。
./configure --prefix=/usr/local/nginx --add-module=/home/fastdfs-nginx-module-1.20/src/
由於版本問題會出現的錯誤:
XXXXX......error: common_define.h: No such file or directory
需vi fastdfs-nginx-module-1.20/src/config
修改下面兩行代碼,然後再進行配置:
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
配置完後進行編譯:
make
make install
出現Leaving directory ‘/home/python/nginx-1.15.2’ 可以忽略。
配置mod-fastdfs.conf:
把 fastdfs-nginx-module-1.20/src/下的mod_fastdfs.conf 文件放到fdfs目錄下。
cd fastdfs-nginx-module-1.20/src/
cp mod_fastdfs.conf /etc/fdfs
進行如下修改:
base_path=/home/xx/fdfs
tracker_server=192.168.8.33:22122 #tracker的地址
url_have_group_name=true #url是否包含group名稱
storage_server_port=23000 #需要和storage配置的相同
store_path_count=1 #存儲路徑個數,需要和store_path個數匹配
store_path0=/home/xx/fdfs/storage #文件存儲的位置
配置nginx
cd /usr/local/nginx/conf/
vi nginx.conf
server {
listen 80;
server_name localhost;
location ~/group[0-9]/{
ngx_fastdfs_module;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
拷貝相關依賴
cd /usr/local/src/fastdfs-5.11/conf
cp mime.types http.conf /etc/fdfs/
五,配置FastDFS啓動客戶端
cd /etc/fdfs
cp client.conf.sample client.conf
修改如下:
base_path=/home/xx/fdfs/tracker //tracker服務器文件路徑
tracker_server=192.168.8.33:22122 //tracker服務器IP地址和端口號
http.tracker_server_port=80 # tracker服務器的http端口號,必須和tracker的設置對應起來
六,植入django項目中
安裝依賴
下載路徑:https://github.com/jefforeilly/fdfs_client-py
pip install fdfs_client-py-master.zip
配置參數django的setting.py
#設置Django的文件存儲類
DEFAULT_FILE_STORAGE='utils.fdfs.storage.FDFSStorage'
#設置fdfs使用的client.conf文件路徑(把fdfs文件目錄下的client.conf文件拷貝到項目中)
FDFS_CLIENT_CONF='./fdfs/client.conf'
#設置fdfs存儲服務器上ngix的IP和端口號
FDFS_URL='http://192.168.8.33:80/'
封裝存儲文件到fdfs行爲(修改django文件上傳行爲):
torage.py
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
from django.conf import settings
class FDFSStorage(Storage):
def _open(self,name,mode='rb'):
pass
def _save(self,name,content):
#創建一個Fdfs_client對象
client=Fdfs_client(settings.FDFS_CLIENT_CONF)
#上傳文件到fast dfs系統中
res=client.upload_by_buffer(content.read())
if res == None:
raise Exception('上傳 失敗')
filename = res.get('Remote file_id')
return filename
def exists(self, name):
'''django判斷文件名是否可用'''
return False
def url(self, name):
'''返回訪問文件的url路徑'''
return settings.FDFS_URL+name
至此服務器fastdfs的植入完成。
在前端獲取圖片的時候則直接使用
例:
<img src="{{ books.image.url }}"></a>
{{ books.image.url }} =http://192.168.8.33:80/+文件存儲的唯一標誌。