1.什么是FastDFS屈张?
????????FastDFS是用c語(yǔ)言編寫的一款開源的分布式文件系統(tǒng)擒权。FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份阁谆、負(fù)載均衡碳抄、線性擴(kuò)容等機(jī)制,并注重高可用场绿、高性能等指標(biāo)剖效,使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)焰盗。
2.FastDFS架構(gòu)
????????FastDFS架構(gòu)包括 Tracker server和Storage server璧尸。客戶端請(qǐng)求Tracker server進(jìn)行文件上傳熬拒、下載爷光,通過Tracker server調(diào)度最終由Storage server完成文件上傳和下載。
Tracker server作用是負(fù)載均衡和調(diào)度澎粟,通過Tracker server在文件上傳時(shí)可以根據(jù)一些策略找到Storage server提供文件上傳服務(wù)蛀序。可以將tracker稱為追蹤服務(wù)器或調(diào)度服務(wù)器活烙。
Storage server作用是文件存儲(chǔ)徐裸,客戶端上傳的文件最終存儲(chǔ)在Storage服務(wù)器上,Storage server沒有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來管理文件啸盏≈睾兀可以將storage稱為存儲(chǔ)服務(wù)器
????????服務(wù)端兩個(gè)角色:
????????Tracker:管理集群,tracker也可以實(shí)現(xiàn)集群回懦。每個(gè)tracker節(jié)點(diǎn)地位平等气笙。
收集Storage集群的狀態(tài)。FastDFS集群中的Tracker server可以有多臺(tái)粉怕,Tracker server之間是相互平等關(guān)系同時(shí)提供服務(wù)健民,Tracker server不存在單點(diǎn)故障抒巢∑侗矗客戶端請(qǐng)求Tracker server采用輪詢方式,如果請(qǐng)求的tracker無(wú)法提供服務(wù)則換另一個(gè)tracker。
????????Storage:實(shí)際保存文件稚晚,Storage分為多個(gè)組崇堵,每個(gè)組之間保存的文件是不同的。每個(gè)組內(nèi)部可以有多個(gè)成員客燕,組成員內(nèi)部保存的內(nèi)容是一樣的鸳劳,組成員的地位是一致的,沒有主從的概念也搓。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è)嗦玖,由此可見組內(nèi)存儲(chǔ)服務(wù)器的軟硬件配置最好是一致的患雇。
采用分組存儲(chǔ)方式的好處是靈活、可控性較強(qiáng)宇挫。比如上傳文件時(shí)苛吱,可以由客戶端直接指定上傳到的組也可以由tracker進(jìn)行調(diào)度選擇。一個(gè)分組的存儲(chǔ)服務(wù)器訪問壓力較大時(shí)器瘪,可以在該組增加存儲(chǔ)服務(wù)器來擴(kuò)充服務(wù)能力(縱向擴(kuò)容)又谋。當(dāng)系統(tǒng)容量不足時(shí),可以增加組來擴(kuò)充存儲(chǔ)容量(橫向擴(kuò)容)娱局。
3.文件上傳的流程
????????客戶端上傳文件后存儲(chǔ)服務(wù)器將文件ID返回給客戶端彰亥,此文件ID用于以后訪問該文件的索引信息。文件索引信息包括:組名衰齐,虛擬磁盤路徑任斋,數(shù)據(jù)兩級(jí)目錄,文件名耻涛。例如:
????????組名:文件上傳后所在的storage組名稱废酷,在文件上傳成功后有storage服務(wù)器返回,需要客戶端自行保存抹缕。
????????虛擬磁盤路徑:storage配置的虛擬路徑澈蟆,與磁盤選項(xiàng)store_path*對(duì)應(yīng)。如果配置了store_path0則是M00卓研,如果配置了store_path1則是M01趴俘,以此類推睹簇。
????????數(shù)據(jù)兩級(jí)目錄:storage服務(wù)器在每個(gè)虛擬磁盤路徑下創(chuàng)建的兩級(jí)目錄,用于存儲(chǔ)數(shù)據(jù)文件寥闪。
????????文件名:與文件上傳時(shí)不同太惠。是由存儲(chǔ)服務(wù)器根據(jù)特定信息生成,文件名包含:源存儲(chǔ)服務(wù)器IP地址疲憋、文件創(chuàng)建時(shí)間戳凿渊、文件大小、隨機(jī)數(shù)和文件拓展名等信息缚柳。
4.文件下載的流程
????????tracker根據(jù)請(qǐng)求的文件路徑即文件ID 來快速定義文件埃脏。比如請(qǐng)求下邊的文件:
????????1.通過組名tracker能夠很快的定位到客戶端需要訪問的存儲(chǔ)服務(wù)器組是group1,并選擇合適的存儲(chǔ)服務(wù)器提供客戶端訪問秋忙。 ?
????????2.存儲(chǔ)服務(wù)器根據(jù)“文件存儲(chǔ)虛擬磁盤路徑”和“數(shù)據(jù)文件兩級(jí)目錄”可以很快定位到文件所在目錄剂癌,并根據(jù)文件名找到客戶端需要訪問的文件。
5.FastDFS安裝
5.1FastDFS--tracker安裝
5.1.1FastDFS安裝環(huán)境? ? ? ?
?????????FastDFS是C語(yǔ)言開發(fā)翰绊,建議在linux上運(yùn)行佩谷,本教程使用Centos7作為安裝環(huán)境。
????????安裝FastDFS需要先將官網(wǎng)下載的源碼進(jìn)行編譯监嗜,編譯依賴gcc環(huán)境谐檀,如果沒有g(shù)cc環(huán)境,需要安裝gcc:
????????yum install gcc-c++
5.1.2安裝libfastcommon
????????下載:下載libfastcommon
????????將libfastcommon.zip復(fù)制到linux系統(tǒng)的/usr/local目錄下并解壓:unzip libfastcommon.zip
? ??????cd libfastcommon
????????./make.sh
????????./make.sh install
5.1.3安裝libevent
? ??????FastDFS依賴libevent庫(kù)裁奇,需要安裝:
????????yum -y install libevent
5.1.4tracker編譯安裝
? ??????將fastdfs.zip拷貝至/usr/local/下并解壓:
????????unzip fastdfs.zip
? ? ? ? cd fastdfs
? ? ? ?編譯: ./make.sh
? ? ? ?安裝:./make.sh install
5.1.5配置
????????cd? /etc/fdfs
????????拷貝一份新的tracker配置文件:
????????cp tracker.conf.sample tracker.conf
????????修改tracker.conf
????????vim tracker.conf
????????base_path=/home/yuqing/FastDFS???
????????改為:
????????base_path=/home/FastDFS
5.1.6啟動(dòng)tracker
????????/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
5.2安裝FastDFS--storage
在安裝tracker時(shí)已經(jīng)安裝了libevent與libfastcommon兩個(gè)庫(kù)桐猬。編譯安裝tracker時(shí)也已經(jīng)把storage一同編譯安裝了。
?5.2.1配置storage
? ? ? ? cd? /etc/fdfs
? ??????拷貝一份新的storage配置文件:
????????cp storage.conf.sample storage.conf
????????修改storage.conf
????????vim storage.conf
? ??????group_name=group1
????????base_path=/home/yuqing/FastDFS改為:????????base_path=/home/FastDFS
????????store_path0=/home/yuqing/FastDFS改為:????????store_path0=/home/FastDFS/fdfs_storage
? ??????#如果有多個(gè)掛載磁盤則定義多個(gè)store_path刽肠,如下
????????#store_path1=.....
????????#store_path2=......
????????tracker_server=192.168.xx.xx:22122#配置tracker服務(wù)器:IP
????????#如果有多個(gè)則配置多個(gè)tracker
????????tracker_server=192.168.xx.xx:22122
5.2.2啟動(dòng)storage
????????/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
6.上傳圖片測(cè)試
??????? FastDFS安裝成功可通過/usr/bin/fdfs_test測(cè)試上傳溃肪、下載等操作。?
????????修改/etc/fdfs/client.conf ??
? ??????base_path=/home/fastdfs
????????tracker_server=192.168.xx.xx:22122
? ??????使用格式:
????????/usr/bin/fdfs_test客戶端配置文件地址upload上傳文件
? ??????比如將/home下的圖片上傳到FastDFS中:
????????/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/picture.jpeg
? ??????http://192.168.xx.xxx/group1/M00/00/00/wKgghFwqIqaAJKEWAAE8SA5LkVU02_big.jpeg就是文件的下載路徑音五。
? ??????對(duì)應(yīng)stroage服務(wù)器上的/home/FastDFS/fdfs_storage/data/00/00/wKgghFwqIqaAJKEWAAE8SA5LkVU02_big.jpeg文件惫撰。
? ??????由于現(xiàn)在還沒有和nginx整合無(wú)法使用http下載。
7.FastDFS和nginx整合
7.1FastDFS-nginx-module
????????下載FastDFS-nginx-module?
? ? ? ? 將FastDFS-nginx-module.zip傳至/usr/local/下?并解壓
? ? ? ? unzip?fastdfs-nginx-module.zip
? ??????cd FastDFS-nginx-module/src
????????修改config文件將/usr/local/路徑改為/usr/
????????將FastDFS-nginx-module/src下的mod_fastdfs.conf拷貝至/etc/fdfs/下?????????? ? ?
????????cp mod_FastDFS.conf /etc/fdfs/
????????并修改mod_FastDFS.conf的內(nèi)容:
????????vim /etc/fdfs/mod_FastDFS.conf
????????base_path=/home/FastDFS
????????tracker_server=192.168.xx.xx:22122
????????#tracker_server=192.168.xx.xx:22122(多個(gè)tracker配置多行)
????????url_have_group_name=true? #url中包含group名稱
????????store_path0=/home/FastDFS/fdfs_storage #指定文件存儲(chǔ)路徑
????????將libfdfsclient.so拷貝至/usr/lib下
????????cp /usr/lib64/libfdfsclient.so /usr/lib/
????????創(chuàng)建nginx/client目錄
????????mkdir -p /var/temp/nginx/client
?7.2安裝nginx
? ? ? ? 添加FastDFS-nginx-module模塊
? ? ? ? ./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/local/fastdfs-nginx-module/src
? ? ? ? 編譯:make
? ? ? ? 安裝:make install
7.3nginx配置文件
? ????cd /usr/local/nginx
? ? ? ?在nginx.conf方件中添加server:
????????server {
????????????????listen ??????80;
????????????????server_name ?192.168.xx.xx;
????????????????location /group1/M00/{
????????????????????????#root /home/FastDFS/fdfs_storage/data;
????????????????????????ngx_fastdfs_module;
? ? ? ? ????????}
????????}
????? ? ??說明:
????????server_name指定本機(jī)ip
????????location /group1/M00/:group1為nginx 服務(wù) FastDFS的分組名稱躺涝,M00是FastDFS自動(dòng)生成編號(hào)厨钻,對(duì)應(yīng)store_path0=/home/FastDFS/fdfs_storage,如果FastDFS定義store_path1坚嗜,這里就是M01