1.創(chuàng)建fastdfs安裝目錄棒仍,我的是在etc/fastdfs。
首先在etc目錄下的hosts文件添加一行IP地址
192.168.1.14 file.gaci.com
如果要本機(jī)訪問(wèn)虛擬機(jī)军拟,在C:\Windows\System32\drivers\etc\hosts中同樣增加一行
2.下載安裝libfastcommon
我這邊使用的是wget命令:
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
如果遇到wget未找到命令,
使用命令:yum -y install wget
再次使用上面的wget命令下載安裝包
接下來(lái)解壓安裝包到當(dāng)前目錄下
解壓成功,接下來(lái)就是編譯,安裝
使用./make.sh命令可能會(huì)出現(xiàn)如下錯(cuò)誤
使用如下的命令
yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
然后再使用./make.sh命令
使用./make.sh install進(jìn)行安裝
libfastcommon.so 安裝到/usr/lib64/libfastcommon.so姐仅,但是FastDFS主程序設(shè)置的lib目錄是/usr/local/lib,所以需要?jiǎng)?chuàng)建軟鏈接刻盐。
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
3.下載安裝fastDFS
我使用的是wget命令
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
解壓fastdfs
編譯fastdfs
安裝fastdfs
默認(rèn)安裝方式安裝后的相應(yīng)文件與目錄
A掏膏、服務(wù)腳本:
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracker
B、配置文件(這三個(gè)是作者給的樣例配置文件) :
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
C敦锌、命令工具在 /usr/bin/ 目錄下:
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
stop.sh
restart.sh
FastDFS 服務(wù)腳本設(shè)置的 bin 目錄是 /usr/local/bin馒疹, 但實(shí)際命令安裝在 /usr/bin/ 下。
兩種方式:
》 一是修改FastDFS 服務(wù)腳本中相應(yīng)的命令路徑乙墙,也就是把 /etc/init.d/fdfs_storaged 和 /etc/init.d/fdfs_tracker 兩個(gè)腳本中的 /usr/local/bin 修改成 /usr/bin颖变。
# vim fdfs_trackerd
使用查找替換命令進(jìn)統(tǒng)一修改:%s+/usr/local/bin+/usr/bin
# vim fdfs_storaged
使用查找替換命令進(jìn)統(tǒng)一修改:%s+/usr/local/bin+/usr/bin
二是建立 /usr/bin 到 /usr/local/bin 的軟鏈接,我是用這種方式听想。
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/fdfs_storaged /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
4.配置FastDFS跟蹤器(Tracker)
FastDFS配置文件詳解
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1941456&extra=page%3D1%26filter%3Ddigest%26digest%3D1
目錄進(jìn)入 /etc/fdfs腥刹,復(fù)制 FastDFS 跟蹤器樣例配置文件 tracker.conf.sample,并重命名為 tracker.conf汉买。
修改tracker.conf文件
配置文件是否不生效衔峰,false 為生效
disabled=false
提供服務(wù)的端口
port=22122
Tracker 數(shù)據(jù)和日志目錄地址(根目錄必須存在,子目錄會(huì)自動(dòng)創(chuàng)建)base_path=/usr/fastdfs/tracker
HTTP 服務(wù)端口http.server_port=80
創(chuàng)建tracker基礎(chǔ)數(shù)據(jù)目錄,即base_path對(duì)應(yīng)的目錄
Mkdir -p /usr/fastdfs/tracker
防火墻打開跟蹤端口
進(jìn)入etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
重啟防火墻:
啟動(dòng)tracker
可以用這種方式啟動(dòng)
/etc/init.d/fdfs_trackerd start
也可以用這種方式啟動(dòng),前提是上面創(chuàng)建了軟鏈接垫卤,后面都用這種方式
service fdfs_trackerd start
查看 FastDFS Tracker 是否已成功啟動(dòng) 威彰,22122端口正在被監(jiān)聽,則算是Tracker服務(wù)安裝成功葫男。
關(guān)閉Tracker命令:
service fdfs_trackerd stop
設(shè)置Tracker開機(jī)啟動(dòng)
chkconfig fdfs_trackerd on
或者:
vim /etc/rc.d/rc.local
加入配置:
/etc/init.d/fdfs_trackerd start
tracker server 目錄及文件結(jié)構(gòu)
Tracker服務(wù)啟動(dòng)成功后抱冷,會(huì)在base_path下創(chuàng)建data、logs兩個(gè)目錄梢褐。目錄結(jié)構(gòu)如下:
${base_path}
|__data
| |__storage_groups.dat:存儲(chǔ)分組信息
| |__storage_servers.dat:存儲(chǔ)服務(wù)器列表
|__logs
| |__trackerd.log: tracker server 日志文件
5.配置FastDFS 存儲(chǔ) (Storage)
進(jìn)入 /etc/fdfs 目錄旺遮,復(fù)制 FastDFS 存儲(chǔ)器樣例配置文件 storage.conf.sample,并重命名為 storage.conf
編輯storage.conf文件
配置文件是否不生效盈咳,false 為生效
disabled=false
指定此 storage server 所在 組(卷)
group_name=group1
storage server 服務(wù)端口
port=23000
心跳間隔時(shí)間耿眉,單位為秒 (這里是指主動(dòng)向 tracker server 發(fā)送心跳)
heart_beat_interval=30
Storage 數(shù)據(jù)和日志目錄地址(根目錄必須存在,子目錄會(huì)自動(dòng)生成)base_path=/usr/fastdfs/storage
存放文件時(shí) storage server 支持多個(gè)路徑鱼响。這里配置存放文件的基路徑數(shù)目鸣剪,通常只配一個(gè)目錄。
store_path_count=1
逐一配置 store_path_count 個(gè)路徑丈积,索引號(hào)基于 0筐骇。
如果不配置 store_path0,那它就和 base_path 對(duì)應(yīng)的路徑一樣江滨。store_path0=/usr/fastdfs/file
FastDFS 存儲(chǔ)文件時(shí)铛纬,采用了兩級(jí)目錄。這里配置存放文件的目錄個(gè)數(shù)唬滑。
如果本參數(shù)只為 N(如: 256)告唆,那么 storage server 在初次運(yùn)行時(shí),會(huì)在 store_path 下自動(dòng)創(chuàng)建 N * N 個(gè)存放文件的子目錄晶密。
subdir_count_per_path=256
tracker_server 的列表 擒悬,會(huì)主動(dòng)連接 tracker_server
有多個(gè) tracker server 時(shí),每個(gè) tracker server 寫一行tracker_server=file.gaci.com:22122
允許系統(tǒng)同步的時(shí)間段 (默認(rèn)是全天) 稻艰。一般用于避免高峰同步產(chǎn)生一些問(wèn)題而設(shè)定懂牧。
sync_start_time=00:00
sync_end_time=23:59
訪問(wèn)端口
http.server_port=80
創(chuàng)建Storage基礎(chǔ)數(shù)據(jù)目錄,對(duì)應(yīng)base_path目錄
防火墻中打開存儲(chǔ)器端口(默認(rèn)的 23000)
vi /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
重啟防火墻:
啟動(dòng)storage
注意:?jiǎn)?dòng)Storage前確保Tracker是啟動(dòng)的连锯。初次啟動(dòng)成功归苍,會(huì)在 /ljzsg/fastdfs/storage 目錄下創(chuàng)建 data、 logs 兩個(gè)目錄运怖。
可以用這種方式啟動(dòng)
/etc/init.d/fdfs_storaged start
也可以用這種方式,后面都用這種
service fdfs_storaged start
查看 Storage 是否成功啟動(dòng)夏伊,23000 端口正在被監(jiān)聽摇展,就算 Storage 啟動(dòng)成功。
netstat -unltp|grep fdfs
關(guān)閉Storage命令:
service fdfs_storaged stop
查看Storage和Tracker是否在通信:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
設(shè)置 Storage 開機(jī)啟動(dòng)
chkconfig fdfs_storaged on
或者:
vim /etc/rc.d/rc.local
加入配置:
/etc/init.d/fdfs_storaged start
6.文件上傳測(cè)試
修改 Tracker 服務(wù)器中的客戶端配置文件
cd /etc/fdfs
cp client.conf.sample client.conf
vi client.conf
修改如下配置即可溺忧,其它默認(rèn)
Client 的數(shù)據(jù)和日志目錄
base_path=/usr/fastdfs/client
Tracker端口
tracker_server=file.gaci.com:22122
創(chuàng)建/usr/fastdfs下的client文件
上傳測(cè)試
在linux內(nèi)部執(zhí)行如下命令上傳 name.jpg 圖片
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/name.jpg
group1/M00/00/00/wKgBEl4LBr2ADhGoAAAw9HW8yuU088.jpg
返回的文件ID由group咏连、存儲(chǔ)目錄盯孙、兩級(jí)子目錄、fileid祟滴、文件后綴名(由客戶端指定振惰,主要用于區(qū)分文件類型)拼接而成骑晶。
上面將文件上傳成功了仔雷,但我們無(wú)法下載惕稻。因此安裝Nginx作為服務(wù)器以支持Http方式訪問(wèn)文件肘迎。同時(shí)宋梧,后面安裝FastDFS的Nginx模塊也需要Nginx。
安裝步驟見:Linux-安裝nginx
7.FastDFS 配置 Nginx 模塊
fastdfs-nginx-module 模塊說(shuō)明
FastDFS 通過(guò) Tracker 服務(wù)器,將文件放在 Storage 服務(wù)器存儲(chǔ), 但是同組存儲(chǔ)服務(wù)器之間需要進(jìn)行文件復(fù)制, 有同步延遲的問(wèn)題。
假設(shè) Tracker 服務(wù)器將文件上傳到了 192.168.51.128,上傳成功后文件 ID已經(jīng)返回給客戶端。
此時(shí) FastDFS 存儲(chǔ)集群機(jī)制會(huì)將這個(gè)文件同步到同組存儲(chǔ) 192.168.51.129,在文件還沒(méi)有復(fù)制完成的情況下,客戶端如果用這個(gè)文件 ID 在 192.168.51.129 上取文件,就會(huì)出現(xiàn)文件無(wú)法訪問(wèn)的錯(cuò)誤。
而 fastdfs-nginx-module 可以重定向文件鏈接到源服務(wù)器取文件,避免客戶端由于復(fù)制延遲導(dǎo)致的文件無(wú)法訪問(wèn)錯(cuò)誤。
1.安裝配置nginx模塊
下載 fastdfs-nginx-module、解壓
這里為啥這么長(zhǎng)一串呢据某,因?yàn)樽钚掳娴膍aster與當(dāng)前nginx有些版本問(wèn)題扳还。
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
解壓
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
重命名
mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module-master
使用wget命令下載
解壓
重命名
配置nginx
在nginx中添加模塊
先停掉nginx服務(wù)
/usr/local/nginx/sbin/nginx -s stop
進(jìn)入nginx解壓包目錄
添加模塊
重新編譯,安裝
make && make install
查看Nginx的模塊
/usr/local/nginx/sbin/nginx -V
復(fù)制 fastdfs-nginx-module 源碼中的配置文件到/etc/fdfs 目錄寡喝, 并修改
修改如下配置糙俗,其它默認(rèn)
連接超時(shí)時(shí)間
connect_timeout=10
Tracker Server
tracker_server=file.gaci.com:22122
StorageServer 默認(rèn)端口
storage_server_port=23000
如果文件ID的uri中包含/group**,則要設(shè)置為true
url_have_group_name = true
Storage 配置的store_path0路徑预鬓,必須和storage.conf中的一致store_path0=/usr/fastdfs/file
復(fù)制 FastDFS 的部分配置文件到/etc/fdfs 目錄
cd /usr/fastdfs/fastdfs-5.05/conf
cp anti-steal.jpg http.conf mime.types /etc/fdfs/
配置nginx巧骚,修改nginx.conf
vi /usr/local/nginx/conf/nginx.conf
修改配置,其它的默認(rèn)
在80端口下添加fastdfs-nginx模塊
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
在/usr/fastdfs/file 文件存儲(chǔ)目錄下創(chuàng)建軟連接格二,將其鏈接到實(shí)際存放數(shù)據(jù)的目錄劈彪,這一步可以省略。
ln -s /usr/fastdfs/file/data/ /usr/fastdfs/file/data/M00
啟動(dòng)nginx
打印處如下就算配置成功
8.JavaAPI
待續(xù)...
9.權(quán)限控制
前面使用nginx支持http方式訪問(wèn)文件顶猜,但所有人都能直接訪問(wèn)這個(gè)文件服務(wù)器了沧奴,所以做一下權(quán)限控制。
FastDFS的權(quán)限控制是在服務(wù)端開啟token驗(yàn)證长窄,客戶端根據(jù)文件名滔吠、當(dāng)前unix時(shí)間戳、秘鑰獲取token挠日,在地址中帶上token參數(shù)即可通過(guò)http方式訪問(wèn)文件疮绷。
服務(wù)端開啟token驗(yàn)證
修改http.conf
vi /etc/fdfs/http.conf
設(shè)置為true表示開啟token驗(yàn)證http.anti_steal.check_token=true
設(shè)置token失效的時(shí)間單位為秒(s)
http.anti_steal.token_ttl=1800
密鑰,跟客戶端配置文件的fastdfs.http_secret_key保持一致http.anti_steal.secret_key=FASTDFS147258369
如果token檢查失敗肆资,返回的頁(yè)面http.anti_steal.token_check_fail=/gaci/fastdfs/page/403.html
記得重啟服務(wù)矗愧。