在咱們工做中遇到一些項目有大量的文件時須要採用分佈式存儲系統來提供更好的服務,咱們能夠採用fastdfs,分佈式系統有不少,入NFS,TFS,MFS,FastDFS等,各有優點,具體採用哪一種,各位同窗能夠自行百度查看每一個系統的特性,那個更適合本身的業務。nginx
我這裏是須要存儲大量的小視頻文件,若是直接存儲的話不利於管理,並且會影響讀寫速度,單機的話可能會存在數據丟失的風險等,因此採用FastDFS系統來存儲。c++
分佈式優點:防止單機故障,數據讀取速度快,利於管理等。vim
安裝步驟和優化以下:centos
軟件包:服務器
libfastcommon-master.zip fastdfs-master.zip fastdfs-nginx-module-master.zip
提早安裝相關操做系統包分佈式
yum install unzip zip gcc-c++
建立一個文件夾/root/fastfds,用來保存相關軟件ide
libfastcommon包安裝
FastDFS 將之前版本的公共的一些函數單獨封裝成了libfastcommon包,因此在安裝FastDFS以前咱們還必須安裝libfastcommon。
解壓縮函數
unzip libfastcommon-master.zip
執行編譯步驟:./make.sh 執行安裝步驟:./make.sh install
libfastcommon.so 默認安裝到了/usr/lib64/libfastcommon.so,可是FastDFS主程序設置的lib目錄是/usr/local/lib,
因此此處須要從新設置軟連接工具
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
FastDFS 安裝測試
unzip fastdfs-master.zip cd fastdfs-master ./make.sh ./mae.sh install
cd /etc/fdfs/
對三個配置文件進行拷貝,後面有用
cp client.conf.sample client.conf cp storage.conf.sample storage.conf cp tracker.conf.sample tracker.conf
Tracker 安裝
建立Tracker服務器的文件路徑,即用於存儲Tracker的數據文件和日誌文件等:
mkdir /data1/fastdfs_tracker
編輯上/etc/fdfs/tracker.conf 配置文件,打開文件後依次作如下修改:
vim /etc/fdfs/tracker.conf
#啓用配置文件(默認false) disabled=false #設置tracker的端口號,一般採用22122這個默認端口 port=22122 #設置tracker的數據文件和日誌目錄 base_path=/data1/fastdfs_tracker #設置http端口號,初始值爲8080 http.server_port= 58808
爲啓動腳本建立軟引用,由於fdfs_trackerd等命令在/usr/local/bin中並無,而是在/usr/bin路徑下:
ln -s /usr/bin/fdfs_trackerd /usr/local/bin ln -s /usr/bin/stop.sh /usr/local/bin ln -s /usr/bin/restart.sh /usr/local/bin
最後經過命令啓動Tracker服務器:
service fdfs_trackerd start
若是啓動命令執行成功,那麼同時在剛纔建立的tracker文件目錄/opt/fastdfs_tracker中就能夠看到啓動後新生成的data和logs目錄,tracker服務的端口也應當被正常監聽,最後再經過netstat命令查看一下端口監聽狀況:
netstat -unltp|grep fdfs
服務運行的22122端口正常
Storage安裝
建立Storage服務器的文件目錄,注意同Tracker相比要多建一個目錄,由於Storage還須要一個文件存儲路徑,用於存放接收的文件:
mkdir /data1/fastdfs_storage mkdir /data1/fastdfs_storage_data
接下來修改/etc/fdfs/storage.conf配置文件,打開文件後依次作如下修改:
#設置storage端口號,默認是23000,同一個組的storage端口號必須一致 port=23000 #設置storage數據文件和日誌目錄 base_path=/data1/fastdfs_storage #實際文件存儲路徑 store_path0=/data1/fastdfs_storage_data #存儲路徑個數,須要和store_path個數匹配 store_path_count=1 #tracker 服務器的 IP地址和端口號,若是是單機搭建,IP不要寫127.0.0.1,不然啓動不成功 tracker_server= 58.216.10.7:22122 #設置 http 端口號 http.server_port=8888
配置完成後一樣要爲Storage服務器的啓動腳本設置軟引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin
接下來就能夠啓動Storage服務了:
service fdfs_storaged start
驗證成功啓動的方法:
netstat -unltp|grep fdfs
查看是否有23000,22122,兩個端口在
成功的話,/data1/fastdfs_storage/data目錄下生成好的文件夾,data下有256個1級目錄,每級目錄下又有256個2級子目錄,總共65536個文件夾。
新寫的文件會以hash的方式被路由到其中某個子目錄下,而後將文件數據直接做爲一個本地文件存儲到該目錄中。那麼最後咱們再看一下storage服務的端口監聽狀況:
查看:storage服務器是否已經登記到 tracker服務器,運行如下命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
看到58.216.10.7 ACTIVE 字樣便可說明storage服務器已經成功登記到了tracker服務器
至此咱們就已經完成了fastdfs的所有配置,此時也就能夠用客戶端工具進行文件上傳下載的測試了。
fastdfs-nginx-module
FastDFS目前已不支持http協議
餘大提供了nginx上使用FastDFS的模塊fastdfs-nginx-module,
這樣作最大的好處就是提供了HTTP服務而且解決了group中storage服務器的同步延遲問題,
安nginx模塊依賴lib庫
yum -y install pcre pcre-devel yum -y install zlib zlib-devel yum -y install openssl openssl-devel
前提要先安裝好nginx等
接下來就具體記錄一下fastdfs-nginx-module的安裝配置過程進入源碼nginx安裝文件夾
解壓成功後就能夠編譯安裝nginx了,進入nginx目錄並輸入如下命令進行配置:
--prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --add-module=/root/fastdfs-nginx-module-master/src --http-client-body-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi make make install
配置nginx.conf文件,加入server{ }中
listen 58808; location ~/group1/M00 { root /data1/fastdfs_storage_data/data; ngx_fastdfs_module; } cp /root/fastfds/fastdfs-master/conf/http.conf /etc/fdfs/ cp /root/fastfds/fastdfs-master/conf/mime.types /etc/fdfs/ cp /root/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
編輯mod_fastdfs.conf文件,vim /etc/fdfs/mod_fastdfs.conf:
#保存日誌目錄 base_path=/data1/fastdfs_storage #tracker服務器的IP地址以及端口號 tracker_server=58.216.10.7:22122 #storage服務器的端口號 storage_server_port=23000 #文件 url 中是否有 group 名 url_have_group_name = true
store_path0=/opt/fastdfs_storage_data #設置組的個數,事實上此次只使用了group1 group_count = 1 設置了group_count = 1,接下來就須要在文件尾部追加這1個group setting: [group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/data1/fastdfs_storage_data
接下來還須要創建 M00 至存儲目錄的符號鏈接:
ln -s /data1/fastdfs_storage_data/data /data1/fastdfs_storage_data/data/00
最後啓動nginx:
/etc/init.d/nginx start
配置集羣:
存儲服務器上配置:
#設置storage端口號,默認是23000,同一個組的storage端口號必須一致 port=23000 #設置storage數據文件和日誌目錄 base_path=/data1/fastdfs_storage #實際文件存儲路徑 store_path0=/data1/fastdfs_storage_data #存儲路徑個數,須要和store_path個數匹配 store_path_count=1 #tracker 服務器的 IP地址和端口號,若是是單機搭建,IP不要寫127.0.0.1,不然啓動不成功 tracker_server=58.216.10.7:22122 #設置 http 端口號 http.server_port=8888
啓動存儲服務器:
/etc/init.d/fdfs_storaged start
主服務器上傳測試存儲服務器有沒有同步過來