-
內(nèi)容簡(jiǎn)介
在跟隨項(xiàng)目實(shí)踐過(guò)程中,代碼中需要使用上傳圖片的功能廓鞠,其中使用了FastDFS作為圖片服務(wù)器恤左,在此記錄一下搭建FastDFS服務(wù)器的過(guò)程
-
框架介紹
1.什么是FastDFS
FastDFS是用c語(yǔ)言編寫(xiě)的一款開(kāi)源的分布式文件系統(tǒng)世杀。FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份鸣皂、負(fù)載均衡、線(xiàn)性擴(kuò)容等機(jī)制暮蹂,并注重高可用签夭、高性能等指標(biāo),使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳椎侠、下載等服務(wù)第租。
2.FastDFS架構(gòu)
FastDFS架構(gòu)包括 Tracker server和Storage server∥壹停客戶(hù)端請(qǐng)求Tracker server進(jìn)行文件上傳慎宾、下載,通過(guò)Tracker server調(diào)度最終由Storage server完成文件上傳和下載浅悉。
Tracker server作用是負(fù)載均衡和調(diào)度趟据,通過(guò)Tracker server在文件上傳時(shí)可以根據(jù)一些策略找到Storage server提供文件上傳服務(wù)∈踅。可以將tracker稱(chēng)為追蹤服務(wù)器或調(diào)度服務(wù)器汹碱。
Storage server作用是文件存儲(chǔ),客戶(hù)端上傳的文件最終存儲(chǔ)在Storage服務(wù)器上荞估,Storage server沒(méi)有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來(lái)管理文件咳促。可以將storage稱(chēng)為存儲(chǔ)服務(wù)器,如下圖:3.Tracker 集群
FastDFS集群中的Tracker server可以有多臺(tái)勘伺,Tracker server之間是相互平等關(guān)系同時(shí)提供服務(wù)跪腹,Tracker server不存在單點(diǎn)故障》勺恚客戶(hù)端請(qǐng)求Tracker server采用輪詢(xún)方式冲茸,如果請(qǐng)求的tracker無(wú)法提供服務(wù)則換另一個(gè)tracker。
4.Storage集群
Storage集群采用了分組存儲(chǔ)方式缅帘。storage集群由一個(gè)或多個(gè)組構(gòu)成轴术,集群存儲(chǔ)總?cè)萘繛榧褐兴薪M的存儲(chǔ)容量之和。一個(gè)組由一臺(tái)或多臺(tái)存儲(chǔ)服務(wù)器組成钦无,組內(nèi)的Storage server之間是平等關(guān)系逗栽,不同組的Storage server之間不會(huì)相互通信,同組內(nèi)的Storage server之間會(huì)相互連接進(jìn)行文件同步铃诬,從而保證同組內(nèi)每個(gè)storage上的文件完全一致的祭陷。一個(gè)組的存儲(chǔ)容量為該組內(nèi)存儲(chǔ)服務(wù)器容量最小的那個(gè)苍凛,由此可見(jiàn)組內(nèi)存儲(chǔ)服務(wù)器的軟硬件配置最好是一致的。
采用分組存儲(chǔ)方式的好處是靈活兵志、可控性較強(qiáng)醇蝴。比如上傳文件時(shí),可以由客戶(hù)端直接指定上傳到的組也可以由tracker進(jìn)行調(diào)度選擇想罕。一個(gè)分組的存儲(chǔ)服務(wù)器訪問(wèn)壓力較大時(shí)悠栓,可 -
準(zhǔn)備工作
1.前提條件
安裝好了VM+CentOs6.4(網(wǎng)絡(luò)等配置都可正常使用)
已安裝nginx(非必須)
JDK1.72.安裝所需
fastdfs-nginx-module_v1.16.tar.gz - 集成nginx所需模塊
FastDFS_v5.05.tar.gz - FastDFS源碼,C語(yǔ)言編寫(xiě)按价,需要手動(dòng)編譯
jdk-7u67-linux-x64.tar.gz
nginx-1.8.0.tar.gz - nginx源碼,C語(yǔ)言編寫(xiě)惭适,需要手動(dòng)編譯
libfastcommonV1.0.7.tar.gz - FastDFS官方提供的基礎(chǔ)庫(kù)
perl-5.20.2.tar.gz - 編譯基礎(chǔ)庫(kù)所需要的語(yǔ)言環(huán)境
-
服務(wù)搭建
1.環(huán)境介紹
VM + CentOs6.4 + Jdk1.7 + nginx1.8.0
此處記錄的是在同一臺(tái)服務(wù)器上同時(shí)搭建tracker和storage,并且都是一個(gè),組成的是一個(gè)最簡(jiǎn)便的集群環(huán)境楼镐。
2.安裝libfastcommon基礎(chǔ)庫(kù)
將壓縮包上傳至虛擬機(jī)/usr/local下癞志,解壓縮
進(jìn)入文件夾,看到有make.sh文件框产,執(zhí)行 ./make.sh ,初次安裝會(huì)報(bào)錯(cuò)凄杯,因?yàn)槿鄙俦匾恼Z(yǔ)言運(yùn)行環(huán)境,執(zhí)行下列命令
# FastDFS依賴(lài)libevent庫(kù)秉宿,需要安裝: yum -y install libevent # 安裝gcc庫(kù),若之前安裝過(guò)nginx戒突,則不需要重復(fù)安裝 yum -y install gcc yum -y install gcc -c++
- 安裝Perl語(yǔ)言環(huán)境,需要下載源碼perl-5.20.2.tar.gz,上傳至/usr/local下描睦,解壓縮膊存,進(jìn)入目錄,依次執(zhí)行:
$ tar -xzf perl-5.x.y.tar.gz //解壓縮 $ cd perl-5.x.y $ ./Configure -de $ make $ make test $ make install $ perl -v //檢測(cè)是否安裝成功
- 環(huán)境準(zhǔn)備完成后再進(jìn)入libfastcommon目錄忱叭,執(zhí)行 ./make.sh 隔崎,庫(kù)會(huì)安裝在/usr/lib64目錄下,但是FastDFS設(shè)置的lib目錄是/usr/local/lib ,所以此時(shí)可以有兩種方式
# 第一種方式窑多,復(fù)制一份 cp /usr/lib64/libfastcommon.so /usr/local/lib # 第二種方式仍稀,建立軟連接(推薦) ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
- 到此基礎(chǔ)庫(kù)安裝完成
3.安裝FastDFS
- 將FastDFS_v5.05.tar.gz拷貝至/usr/local/下,依次執(zhí)行
tar -zxvf FastDFS_v5.05.tar.gz cd FastDFS ./make.sh ./make.sh install
- 如果安裝過(guò)程中沒(méi)有報(bào)錯(cuò),并且在/etc/fdfs目錄中包含配置文件埂息,說(shuō)明安裝成功,隨后將FastDFS目錄下的conf下的文件拷貝到/etc/fdfs/下
4.配置tracker
前面所執(zhí)行的步驟無(wú)論是tracker還是storage都是必須的遥巴,之后若要在不同的虛擬機(jī)上分別配置千康,主要就是對(duì)FastDFS安裝完成之后的配置過(guò)程的不同,此處演示的是在同一臺(tái)虛擬機(jī)上安裝配置
初始化文件目錄
# 配置tracker所需要的base_path mkdir /home/fastdfs_tracker
進(jìn)入/etc/fdfs目錄铲掐,復(fù)制tracker.conf.simple并改名為tracker.conf
編輯tracker.conf拾弃,對(duì)以下幾個(gè)配置進(jìn)行修改
# 是否啟用此配置文件 disabled = true # 端口號(hào),一般使用這個(gè)默認(rèn)端口 port = 22122 # tracker的數(shù)據(jù)和日志文件目錄(預(yù)先創(chuàng)建) base_path = /home/fastdfs_tracker
- 啟動(dòng)tracker,執(zhí)行命令
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
- 查看日志觀察啟動(dòng)過(guò)程中是否報(bào)錯(cuò)
tail -100f /home/fastdfs_tracker/logs/tracker.log (base_path路徑)
- 啟動(dòng)沒(méi)有問(wèn)題摆霉,則設(shè)置tracker為開(kāi)機(jī)自動(dòng)啟動(dòng),編輯:vi /etc/rc.d/rc.local 豪椿, 將此命令加入末行奔坟。至此,tracker安裝完畢
5.配置storage
若更換虛擬機(jī)則需要執(zhí)行以上的步驟搭盾,此處繼續(xù)在原虛擬機(jī)上執(zhí)行
初始化文件目錄
# 配置storage所需要的base_path,保存日志信息 mkdir /home/fastdfs_storage_info # 配置storage所需要的base_path,保存數(shù)據(jù)文件 mkdir /home/fastdfs_storage_data
進(jìn)入/etc/fdfs目錄咳秉,復(fù)制storage.conf.simple并改名為storage.conf
編輯storage.conf,對(duì)以下幾個(gè)配置進(jìn)行修改
# 是否啟用此配置文件 disabled = true # 組名 group_name = group1 # 端口,同一組必須保證端口統(tǒng)一 port = 23001 # 日志目錄 base_path = /home/fastdfs_storage_info # 存儲(chǔ)路徑個(gè)數(shù)鸯隅,與組成員個(gè)數(shù)保持一致 store_path_count = 1 # 數(shù)據(jù)文件存儲(chǔ)路徑澜建,果有多個(gè)掛載磁盤(pán)則定義多個(gè)store_path,后綴遞增即可 store_path0 = /home/fastdfs_storage_data # tracker服務(wù)器IP和端口蝌以,如果有多個(gè)則配置多個(gè)tracker tracker_server = 192.168.XX.XXX:22122
- 啟動(dòng)storage,執(zhí)行命令
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
- 觀察啟動(dòng)過(guò)程中是否報(bào)錯(cuò)
# 通過(guò)日志觀察 tail -100f /home/fastdfs_storage_info/logs/storaged.log # 通過(guò)監(jiān)控觀察是否成功注冊(cè)到tracker /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
- 啟動(dòng)沒(méi)有問(wèn)題炕舵,則設(shè)置storage為開(kāi)機(jī)自動(dòng)啟動(dòng),編輯:vi /etc/rc.d/rc.local , 將此命令加入末行跟畅。至此咽筋,storage安裝完畢
6.測(cè)試服務(wù)
FastDFS安裝成功可通過(guò)/usr/bin/fdfs_test測(cè)試上傳、下載等操作徊件。
編輯/etc/fdfs/client.conf晤硕,修改以下配置
base_path=/home/fastdfs_tracker tracker_server=192.168.XX.XXX:22122
- 使用格式:/usr/bin/fdfs_test 客戶(hù)端配置文件地址 upload 上傳文件,例如:
/usr/bin/fdfs_test /etc/fdfs/client.conf upload test.jpg
-
上傳后會(huì)打印返回信息,可以觀察是否上傳成功
http://192.168.XX.XXX/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png 就是文件的下載路徑庇忌。
對(duì)應(yīng)storage服務(wù)器上的:/home/fastdfs/fdfs_storage_data/data/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png文件舞箍。
由于現(xiàn)在還沒(méi)有和nginx整合無(wú)法使用http下載
-
整合nginx
1.此處討論的是在之前nginx上重新安裝nginx(添加了新模塊)的情況,如何安裝nginx可以參考之前的博文:學(xué)習(xí)筆記-nginx
2.不管是在tracker上安裝還是storage安裝nginx皆疹,都需要先上傳FastDFS-nginx-module模塊疏橄,并且修改相應(yīng)配置
3.tracker上安裝nginx
在每個(gè)tracker上安裝nginx,的主要目的是做負(fù)載均衡及實(shí)現(xiàn)高可用略就。此處只有一個(gè)tracker.為配置nginx
4.在storage上安裝nginx
庫(kù)環(huán)境在此處不再贅述捎迫,由于之前已經(jīng)安裝了nginx,此處需要添加新模塊FastDFS-nginx-module表牢,添加之前窄绒,先下載該模塊并且修改相應(yīng)的配置文件
上傳FastDFS-nginx-module至/usr/java目錄,解壓縮崔兴,進(jìn)入/FastDFS-nginx-module/src目錄下彰导,編輯config文件,將/usr/local改為/usr (將/local去掉)
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/" CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
- 將FastDFS-nginx-module/src下的mod_FastDFS.conf拷貝至/etc/fdfs/下,并且修改配置(類(lèi)比按照自己實(shí)際情況修改):
base_path = /home/fastdfs_storage_info tracker_server = XX storage_server_port = XX group_name = XX url_have_group_name = true #是否在url中使用組名 store_path_count = 1 store_path0 = /home/fastdfs_storage_data group_count = 1 #最后根據(jù)自己實(shí)際情況敲茄,為每一個(gè)組添加如下配置 [group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/home/fastdfs_storage_data
- 進(jìn)入nginx源碼的目錄(不是編譯后生產(chǎn)的目錄):/usr/java/nginx-1.8.0執(zhí)行命令:
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi --add-module=/usr/java/fastdfs-nginx-module/src //XXX為模塊存在路徑
成功后執(zhí)行make位谋,重新編譯,會(huì)生成新的nginx執(zhí)行文件堰燎,不要執(zhí)行make install掏父,在obj目錄下,將obj/nginx復(fù)制到舊版本的nginx安裝目錄下秆剪,將舊版本的改為nginx.bak
測(cè)試新的nginx程序是否正確赊淑,執(zhí)行/usr/local/nginx/sbin/nginx -t , 若顯示以下信息則測(cè)試通過(guò)
nginx: theconfiguration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx:configuration file /usr/local/nginx/conf/nginx.conf test issuccessful
- FastDFS設(shè)置的lib目錄是/usr/local/lib ,所以此時(shí)可以有兩種方式
# 第一種方式爵政,復(fù)制一份 cp /usr/lib64/libfdfsclient.so /usr/local/lib # 第二種方式,建立軟連接(推薦) ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
- 最后需要配置nginx反向代理陶缺,進(jìn)入nginx安裝目錄钾挟,編輯nginx.conf文件,添加server節(jié)點(diǎn):
server { listen 80; server_name localhost; location /group1/M00 { root /home/fastdfs_storage_data/data; ngx_fastdfs_module; } # location / { # root html; # index index.html index.htm; # } error_page 500 502 503 504 /50x.html; location = /50x.html { root html81; } }
- 配置好節(jié)點(diǎn)后组哩,依次重啟tracker,重啟storage等龙,重啟nginx,利用上述測(cè)試上傳圖片返回的url伶贰,在瀏覽器中訪問(wèn)蛛砰,檢測(cè)是否可以成功訪問(wèn)
5.坑和排坑
我在操作過(guò)程中,卡在重新安裝nginx這一個(gè)步驟很久黍衙,啟動(dòng)nginx的時(shí)候一直不成功泥畅,此時(shí)可以通過(guò)查看nginx的日志文件來(lái)查看錯(cuò)誤,這個(gè)很重要
編輯nginx.conf文件琅翻,添加server節(jié)點(diǎn)時(shí)位仁,注意監(jiān)聽(tīng)的端口,80端口只能配置一個(gè)
若正常啟動(dòng)了nginx還是不能成功訪問(wèn)圖片(圖片已經(jīng)成功上傳的情況下)方椎,也可以通過(guò)查看日志來(lái)解決聂抢,比如我訪問(wèn)的時(shí)候路徑里面會(huì)帶上/html/group1/...等路徑,就是因?yàn)橄旅婺莻€(gè)默認(rèn)的location沒(méi)有注釋掉導(dǎo)致的
看日志棠众,很重要 tail -100f /var/log/nginx/error.log
作者:Little_Dragon_
鏈接:http://www.reibang.com/p/ba5bef6cdcea
來(lái)源:簡(jiǎn)書(shū)
簡(jiǎn)書(shū)著作權(quán)歸作者所有琳疏,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。