學(xué)習(xí)筆記-FastDFS(轉(zhuǎn))

  • 內(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ù)器,如下圖:

    fastdfs-show

    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.7

    2.安裝所需

    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)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闸拿,一起剝皮案震驚了整個(gè)濱河市空盼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌新荤,老刑警劉巖揽趾,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異苛骨,居然都是意外死亡篱瞎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)智袭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奔缠,“玉大人,你說(shuō)我怎么就攤上這事吼野。” “怎么了两波?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵瞳步,是天一觀的道長(zhǎng)闷哆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)单起,這世上最難降的妖魔是什么抱怔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嘀倒,結(jié)果婚禮上屈留,老公的妹妹穿的比我還像新娘。我一直安慰自己测蘑,他們只是感情好灌危,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著碳胳,像睡著了一般勇蝙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挨约,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天味混,我揣著相機(jī)與錄音,去河邊找鬼诫惭。 笑死翁锡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夕土。 我是一名探鬼主播馆衔,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼隘弊!你這毒婦竟也來(lái)了哈踱?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梨熙,失蹤者是張志新(化名)和其女友劉穎开镣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體咽扇,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邪财,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了质欲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片树埠。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嘶伟,靈堂內(nèi)的尸體忽然破棺而出怎憋,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布绊袋,位于F島的核電站毕匀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏癌别。R本人自食惡果不足惜皂岔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望展姐。 院中可真熱鬧躁垛,春花似錦、人聲如沸圾笨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)墅拭。三九已至活玲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谍婉,已是汗流浹背舒憾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穗熬,地道東北人镀迂。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像唤蔗,于是被迫代替她去往敵國(guó)和親探遵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容