Centos7搭建FastFDS----分佈式文件服務系統服務端

1、FastDFS介紹

FastDFS開源地址:https://github.com/happyfish100
參考:分佈式文件系統FastDFS設計原理
參考:FastDFS分佈式文件系統html

1.1簡介

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

1.2Tracker Server

跟蹤服務器,主要作調度工做,起到均衡的做用;負責管理全部的 storage server和 group,每一個 storage 在啓動後會鏈接 Tracker,告知本身所屬 group 等信息,並保持週期性心跳。Tracker須要管理的元信息不多,會所有存儲在內存中;另外tracker上的元信息都是由storage彙報的信息生成的,自己不須要持久化任何數據,這樣使得tracker很是容易擴展,直接增長tracker機器便可擴展爲tracker cluster來服務,cluster裏每一個tracker之間是徹底對等的,全部的tracker都接受stroage的心跳信息,生成元數據信息來提供讀寫服務。

linux

1.3Storage Server

Storage server(後簡稱storage)以組(卷,group或volume)爲單位組織,一個group內包含多臺storage機器,數據互爲備份,存儲空間以group內容量最小的storage爲準,因此建議group內的多個storage儘可能配置相同,以避免形成存儲空間的浪費。
以group爲單位組織存儲能方便的進行應用隔離、負載均衡、副本數定製(group內storage server數量即爲該group的副本數),好比將不一樣應用數據存到不一樣的group就能隔離應用數據,同時還可根據應用的訪問特性來將應用分配到不一樣的group來作負載均衡;缺點是group的容量受單機存儲容量的限制,同時當group內有機器壞掉時,數據恢復只能依賴group內地其餘機器,使得恢復時間會很長。

group內每一個storage的存儲依賴於本地文件系統,storage可配置多個數據存儲目錄,好比有10塊磁盤,分別掛載在/data/disk1-/data/disk10,則可將這10個目錄都配置爲storage的數據存儲目錄。

storage接受到寫文件請求時,會根據配置好的規則(後面會介紹),選擇其中一個存儲目錄來存儲文件。爲了不單個目錄下的文件數太多,在storage第一次啓動時,會在每一個數據存儲目錄裏建立2級子目錄,每級256個,總共65536個文件,新寫的文件會以hash的方式被路由到其中某個子目錄下,而後將文件數據直接做爲一個本地文件存儲到該目錄中。nginx

1.4Client

客戶端,上傳下載數據的服務器,也就是咱們本身的項目所部署在的服務器。 git

 

 

 

 

 2、FastDFS安裝

 

資源包:
資源包百度雲連接
一、解決Windows下安裝FastDFS報 Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat 問題
二、解決Windows下安裝FastDFS報 fdfs_client/sendfilemodule.c(53) fatal error C1189: #error : platfom not supported 問題,fdfs_client-py-1.2.6-jj 安裝包已經修改過, 使用python setup.py install 安裝github

2.1安裝gcc

yum install gcc

 

 

 2.2安裝libfastcommon

1. 解壓縮libfastcommon-master.zip
2. 進入到libfastcommon-master的目錄中
3. 執行 ./make.sh
4. 執行 sudo ./make.sh install

 

 

2.3安裝fastdfs

1. 解壓縮fastdfs-master.zip
2. 進入到 fastdfs-master目錄中
3. 執行 ./make.sh
4. 執行 sudo ./make.sh install

 

 

3、FastDFS配置

3.1配置跟蹤服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

 

 

3.2配置存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

 

 

3.3tracker 和 storage

# 啓動跟蹤器
sudo service fdfs_trackerd start
# 啓動存儲器 sudo service fdfs_storaged start

 

 

3.4測試是否安裝成功

 

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/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg的文件id則說明文件上傳成功

 

 

3.5設置開機自啓動

 

vi /etc/rc.local

# 啓動跟蹤器
sudo service fdfs_trackerd start
# 啓動存儲器
sudo service fdfs_storaged start

 

4.安裝nginxfastdfs-nginx-module web服 epoll

4.1安裝

使用清空命令
yum clean all
而後執行
yum groupinstall "Development Tools"

yum -y install pcre-devel zlib-develweb

yum -y install openssl openssl-develshell

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 make
sudo make install

 

 

4.2修改配置文件

1. sudo cp fastdfs-nginx-module-master解壓後的目錄中src下的mod_fastdfs.conf  /etc/fdfs/mod_fastdfs.conf
2. 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
3. sudo cp 解壓縮的fastdfs-master目錄conf目錄中的http.conf  /etc/fdfs/http.conf
4. sudo cp 解壓縮的fastdfs-master目錄conf目錄中的mime.types /etc/fdfs/mime.types
5.sudo vim /usr/local/nginx/conf/nginx.conf
注意:在頂部必須添加:user  root;   

worker_processes  1;django

events {ubuntu

    worker_connections  1024;

}

    http {

        include      mime.types;

        default_type  application/octet-stream;

        sendfile        on;

        keepalive_timeout  65;

        server {

            listen      8888;

            server_name  localhost;

            location ~/group[0-9]/ {

                ngx_fastdfs_module;

            }

            error_page  500 502 503 504  /50x.html;

            location = /50x.html {

            root  html;

            }

        }

    }

 

4.3開放防火牆中相關你端口

 #(--permanent永久生效,沒有此參數重啓後失效)

firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --zone=public --add-port=22122/tcp --permanent 

firewall-cmd --zone=public --add-port=80/tcp --permanent 

firewall-cmd --zone=public --add-port=23000/tcp --permanent

 
#重載防火牆
firewall-cmd --reload

 

4.4nginx

sudo /usr/local/nginx/sbin/nginx

 

五、使用python客戶端上傳測試

github源碼:https://github.com/JaceHo/fdfs_client-py

5.1Linux下安裝

 

1. workon django_py3 # 這裏是進入正在Linux建的python虛擬環境(可跳過)
2. 進入fdfs_client-py-master.zip所在目錄
3. pip install fdfs_client-py-master.zip
4. 

>>> 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'}

 

 

 

 

5.2windows下安裝

1.解壓fdfs_client-py-master.zip
進入fdfs_client-py-master所在目錄
將fdfs_client文件夾copy到python解釋器的 /lib 目錄下
2.修改fdfs_client/storage_client.py文件,將第12行刪除或註釋(不然,使用時會報錯ImportError: No module named sendfile)
# from fdfs_client.sendfile import *
3.安裝 mutagen 和 requests
pip install mutagen
pip isntall requests

 

 

4.修改fastdfs配置文件:client_config

# connect timeout in seconds
# default value is 30s
connect_timeout=30

# network timeout in seconds
# default value is 30s
network_timeout=60

# the base path to store log files

# 日誌存放路徑  
base_path=../../logs    

# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# tracker服務器
tracker_server=192.168.11.200:22122     

#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info

# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false

# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600

# if load FastDFS parameters from tracker server
# since V4.05
# default value is false
load_fdfs_parameters_from_tracker=false

# if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.05
use_storage_id = false

# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf


#HTTP settings
http.tracker_server_port=80

#use "#include" directive to include HTTP other settiongs
##include http.conf

 


5.在 python 虛擬環境下進入 shell 終端進行上傳測試

 

導入模塊:
from fdfs_client.client import Fdfs_client

導入配置文件
注意:windows環境下絕對路徑會發生轉義,須要加上 "r" 說明是原生字符串
client = Fdfs_client(r'配置文件絕對路徑')

上傳圖片
注意:windows環境下絕對路徑會發生轉義,須要加上 "r" 說明是原生字符串
client.upload_by_filename(r'圖片文件絕對路徑')

 

注意:

1.修改lib/fdfs_client/storage_client.py文件,註釋第12行;
2.windows環境下路徑分隔符是 ‘\’ ,而linux使用 ‘/’,因此須要使用 ‘r’ 來聲明是原生字符串;
3.若是上傳文件提示鏈接tracker失敗,請仔細檢查client_config配置文件,配置文件中必定不要出現中文;
4.若是剛開始使用 pip install fdfs_client,報錯,不要盲目安裝VC++ 14.0,能夠先去 控制面板==>>程序==>>程序和功能 查看是否已經安裝過。
相關文章
相關標籤/搜索