分布式圖片服務(wù)器FastDFS

什么是FastDFS

FastDFS 是用 c 語言編寫的一款開源的分布式文件系統(tǒng)组底。FastDFS 為互聯(lián)網(wǎng)量身定制, 充分考慮了冗余備份筐骇、負(fù)載均衡债鸡、線性擴(kuò)容等機(jī)制,并注重高可用铛纬、高性能等指標(biāo)厌均,使用 FastDFS 很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)告唆。
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ù)器上滤钱, Storageserver 沒有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來管理文件∧ɑΓ可以將 storage 稱為存儲(chǔ)服務(wù)器摇展。

image.png
服務(wù)端兩個(gè)角色:

Tracker:管理集群吻氧,tracker 也可以實(shí)現(xiàn)集群。每個(gè) tracker 節(jié)點(diǎn)地位平等咏连。收集 Storage 集群的狀態(tài)盯孙。

Storage:實(shí)際保存文件 Storage 分為多個(gè)組,每個(gè)組之間保存的文件是不同的祟滴。每 個(gè)組內(nèi)部可以有多個(gè)成員振惰,組成員內(nèi)部保存的內(nèi)容是一樣的,組成員的地位是一致的垄懂,沒有 主從的概念骑晶。

文件上傳流程

image.png

客戶端上傳文件后存儲(chǔ)服務(wù)器將文件 ID 返回給客戶端痛垛,此文件 ID 用于以后訪問該文 件的索引信息。文件索引信息包括:組名桶蛔,虛擬磁盤路徑匙头,數(shù)據(jù)兩級(jí)目錄,文件名仔雷。


image.png

組名:文件上傳后所在的 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ù)和文件拓展名等信息狰挡。

文件下載流程

image.png

簡(jiǎn)易FastDFS架構(gòu)

image.png

FastDFS安裝

所需安裝包
fastdfs-master
fastdfs-nginx-module-master
fdfs_client-py-master
libfastcommon-master
nginx-1.14.2
下載地址https://gitee.com/sbigtree/package.git

安裝fastdfs依賴包
  1. 解壓縮libfastcommon-master.zip
  2. 進(jìn)入到libfastcommon-master的目錄中
  3. 執(zhí)行 ./make.sh
  4. 執(zhí)行 sudo ./make.sh install
安裝fastdfs
  1. 解壓縮fastdfs-master.zip
  2. 進(jìn)入到 fastdfs-master目錄中
  3. 執(zhí)行 ./make.sh
  4. 執(zhí)行 sudo ./make.sh install
配置跟蹤服務(wù)器tracker

/home/python/路徑中的python是你的家目錄

#1. 
sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
#2. 在/home/python/目錄中創(chuàng)建目錄 fastdfs/tracker      
mkdir –p /home/python/fastdfs/tracker
#3. 編輯/etc/fdfs/tracker.conf配置文件    
sudo vim /etc/fdfs/tracker.conf
#修改 
base_path=/home/python/fastdfs/tracker
配置存儲(chǔ)服務(wù)器storage
#1. 
sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
#2. 在/home/python/fastdfs/ 目錄中創(chuàng)建目錄 storage
mkdir –p /home/python/fastdfs/storage
#3. 編輯/etc/fdfs/storage.conf配置文件  
sudo vim /etc/fdfs/storage.conf
#修改內(nèi)容:
base_path=/home/python/fastdfs/storage
store_path0=/home/python/fastdfs/storage
tracker_server=8888 
# ps: 這個(gè)8888端口, 是nginx幀聽的端口, 就是自己項(xiàng)目的那個(gè)端口
啟動(dòng)tracker 和 storage
sudo service fdfs_trackerd start
sudo service fdfs_storaged start
#沒有service這個(gè)命令的直接去bin里執(zhí)行
#查找fdfs_trackerd命令在哪
whereis fdfs_trackerd 

輸出

fdfs_trackerd: /usr/bin/fdfs_trackerd /usr/local/bin/fdfs_trackerd
啟動(dòng)方法
Usage: /usr/local/bin/fdfs_trackerd <config_file> [start | stop | restart]

/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
# fdfs_storaged 啟動(dòng)也是一樣
測(cè)試是否安裝成功
  1. sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
  2. 編輯/etc/fdfs/client.conf配置文件 sudo vim /etc/fdfs/client.conf
    修改內(nèi)容:
base_path=/home/python/fastdfs/tracker
#ip必須是內(nèi)網(wǎng)的那個(gè)ip, 不是127.0.0.1, 類似192.x.x.x這種, 
#我這個(gè)是公網(wǎng)服務(wù)器, 所以是172開頭的, 端口就用默認(rèn)的22122
tracker_server=172.16.0.122:22122 
  1. 上傳文件測(cè)試
    fdfs_upload_file /etc/fdfs/client.conf 要上傳的圖片文件
fdfs_upload_file /etc/fdfs/client.conf ~/xxx.jpg

如果返回類似group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg的文件id則說明文件上傳

安裝nginx及fastdfs-nginx-module
  1. 解壓縮 nginx-1.8.1.tar.gz
  2. 解壓縮 fastdfs-nginx-module-master.zip
  3. 進(jìn)入nginx-1.8.1目錄中
  4. 執(zhí)行
    --with-http_ssl_module添加ssl模塊, 可以代理https
sudo ./configure --prefix=/usr/local/nginx/ --with-http_ssl_module  --add-module=fastdfs-nginx-module-master解壓后的目錄的絕對(duì)路徑/src
sudo make
sudo make install

可能會(huì)報(bào)錯(cuò)


image.png
解決辦法

找到對(duì)應(yīng)的Maakefile文件,將gcc參數(shù)中的-Werror去掉释涛。

我上面顯示的是objs/Makefile文件加叁,我打開看了下,將第三行的-Werror去掉就可以


image.png
sudo cp fastdfs-nginx-module-master解壓后的目錄中src下的mod_fastdfs.conf  /etc/fdfs/mod_fastdfs.conf
sudo vim /etc/fdfs/mod_fastdfs.conf
#修改內(nèi)容:
connect_timeout=10 #超時(shí)10秒
tracker_server=公網(wǎng)ip:22122
url_have_group_name=true
store_path0=/home/python/fastdfs/storage
  1. sudo cp 解壓縮的fastdfs-master目錄中的http.conf /etc/fdfs/http.conf
  2. sudo cp 解壓縮的fastdfs-master目錄中的mime.types /etc/fdfs/mime.types
  3. sudo vim /usr/local/nginx/conf/nginx.conf
    在http部分中添加配置信息如下:
server {
            listen       8888;
            server_name  localhost;
            location / {
                root   /www/ice_iyucc_com/;
                index  index.html index.htm;
            }

            # 經(jīng)測(cè)試, 這樣子不生效
            #location ~/group[0-9]/ {
            #    ngx_fastdfs_module;
            #}
            #只能這樣使用
            location /group1/M00 { # /group1/M00是文件存儲(chǔ)的路徑
                    # ngx_fastdfs_module;
                    alias /home/ubuntu/fastdfs/storage/data;
            }

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                  root   html;
            }
        }

啟動(dòng)nginx

sudo /usr/local/nginx/sbin/nginx

使用python客戶端上傳測(cè)試

進(jìn)入fdfs_client-py-master.zip所在目錄
pip install fdfs_client-py-master.zip

如果 安裝有其他fdfs包, 要先卸載完再安裝py3Fdfs

pip install py3Fdfs
from fdfs_client.client import *
client_conf_obj = get_tracker_conf('/etc/fdfs/client.conf')
client = Fdfs_client(client_conf_obj)
ret = client.upload_by_filename('test')
ret

{'Group name':'group1','Status':'Upload successed.', 'Remote file_id':'group1/M00/00/00/
wKjzh0_xaR63RExnAAAaDqbNk5E1398.py','Uploaded size':'6.0KB','Local file name':'test'
, 'Storage IP':'192.168.243.133'}

關(guān)于storege.conf配置文件

tracker_server = 填寫所在服務(wù)器的外網(wǎng)ip

安全組開放 配置文件里的23000端口

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唇撬,一起剝皮案震驚了整個(gè)濱河市它匕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窖认,老刑警劉巖豫柬,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扑浸,居然都是意外死亡烧给,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門喝噪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來础嫡,“玉大人,你說我怎么就攤上這事酝惧×穸Γ” “怎么了涧尿?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長檬贰。 經(jīng)常有香客問我姑廉,道長,這世上最難降的妖魔是什么翁涤? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任桥言,我火速辦了婚禮,結(jié)果婚禮上葵礼,老公的妹妹穿的比我還像新娘号阿。我一直安慰自己,他們只是感情好鸳粉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布扔涧。 她就那樣靜靜地躺著,像睡著了一般届谈。 火紅的嫁衣襯著肌膚如雪枯夜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天艰山,我揣著相機(jī)與錄音湖雹,去河邊找鬼。 笑死曙搬,一個(gè)胖子當(dāng)著我的面吹牛摔吏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纵装,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼征讲,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了橡娄?” 一聲冷哼從身側(cè)響起诗箍,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瀑踢,沒想到半個(gè)月后扳还,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡橱夭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桑逝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棘劣。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖楞遏,靈堂內(nèi)的尸體忽然破棺而出茬暇,到底是詐尸還是另有隱情首昔,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布糙俗,位于F島的核電站勒奇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巧骚。R本人自食惡果不足惜赊颠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劈彪。 院中可真熱鬧竣蹦,春花似錦、人聲如沸沧奴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滔吠。三九已至纲菌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疮绷,已是汗流浹背驰后。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矗愧,地道東北人灶芝。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像唉韭,于是被迫代替她去往敵國和親夜涕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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