10分鐘杨名,教你快速搭建一套屬于自己的分布式文件系統(tǒng)

一脏榆、概述

為什么我們需要它?

眾所周知台谍,在微服務架構中须喂,從網關進來的請求會通過Ribbon進行負載均衡,可能造成你每次請求都有可能是不同的服務器處理的趁蕊,因為坞生,為了提高系統(tǒng)的吞吐量,某些服務被集群化掷伙,在這種情況下是己,當用戶需要進行文件存儲的時候,如果說把文件存儲在當前處理請求的服務器中任柜,那么下次當你想要獲得這個文件的時候可能就獲取不到了卒废,因為你的這次請求可能交由另一個服務器處理了。為了解決在分布式系統(tǒng)中文的件存儲這一問題乘盼,F(xiàn)astDFS應運而生

FastDFS是什么?

這是一款開源的分布式文件系統(tǒng)俄烁,負責對文件進行存儲绸栅,主要功能包括:文件存儲、文件同步页屠、文件訪問等粹胯,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務辰企,如相冊網站风纠、視頻網站等等。

FastDFS為互聯(lián)網量身定制牢贸,充分考慮了冗余備份竹观、負載均衡、線性擴容等潜索、并且注重高可用臭增、高性能,使用FastDFS可以很容易的搭建一套高性能的文件服務器集群提供上傳竹习、下載文件等服務

FastDFS的結構圖:

FastDFS服務端有兩個角色 :跟蹤器(tracker)和存儲節(jié)點(storage)誊抛。在Storage集群中,每一個Volume也稱作一個組(group)

FastDFS是怎么存儲文件的整陌?

存儲過程

Tracker主要負責對請求進行調度拗窃,起到負載均衡的作用瞎领,類似于微服務中的注冊中心(有心跳機制等等),它有每一個存儲點的信息随夸,在收到客戶端發(fā)來的存儲文件的請求時九默,會通過負載均衡算法來選擇某一個Storage來存儲該文件。

為什么是都是集群逃魄?

之前提到過高可用荤西、負載均衡等名詞,都是通過跟蹤器(tracker)的集群化來保證的伍俘。當某一個Tracker宕機后邪锌,其他的Tracker可以繼續(xù)對存儲請求進行處理,這就保證了高可用癌瘾。在決定文件要存到哪一個Storage的時候會使用隨機或輪詢等負載均衡的算法觅丰,來保證每個Storage所存儲的數(shù)據(jù)比較均勻

之前也提到過冗余備份、線性擴容妨退,是通過組(group)來保證的妇萄。首先,想想為什么會出現(xiàn)組這個概念呢咬荷?因為冠句,當我們進行文件存儲的時候,不是說把文件存儲到某個Storage后就萬事大吉了幸乒,萬一某臺機器故障了怎么辦懦底?

那里面的數(shù)據(jù)可能就都要丟失了,這是一件非常嚴重的情況罕扎,為了解決這種情況聚唐,F(xiàn)astDFS中可以采用多個Storage來存儲相同的文件,這樣做的目的是進行數(shù)據(jù)備份腔召,即冗余備份杆查,解決了某個Storage出現(xiàn)故障時文件丟失的問題。這些存儲相同文件的Storage就屬于同一個組(group)臀蛛。還有一種情況亲桦,當存儲的文件逐漸增多時,如何進行擴容呢浊仆?根據(jù)FastDFS的結構烙肺,我們可以通過增加組(group)的方式來擴容

二、安裝

這里推薦使用Docker安裝氧卧,因為簡單快捷桃笙,步驟簡單,適合第一次接觸FastDfs并且對Linux命令不是很熟悉的小白沙绝,話不多說直接進入正題搏明。

大體的流程:安裝Docker——拉取FastDFS鏡像——使用鏡像創(chuàng)建容器并修改配置文件——重啟后即可使用

安裝Docker

安裝
# 1鼠锈、yum 包更新到最新
yum update
# 2、安裝需要的軟件包星著, yum-util 提供yum-config-manager功能购笆,另外兩個是devicemapper驅動依賴的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 設置yum源虚循,(如果提示說沒有yum-config-manager這個命令:yum -y install yum-utils)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4同欠、 安裝docker,出現(xiàn)輸入的界面都按
y yum install -y docker-ce
# 5横缔、 查看docker版本铺遂,驗證是否驗證成功
docker -v
# 6、出現(xiàn)docker的版本信息說明成功了
配置鏡像加速

登錄阿里云茎刚,在左側菜單選中鏡像加速器獲取自己的專屬鏡像加地址

阿里云鏡像獲取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors襟锐,

/etc/docker/daemon.json文件末尾增加你自己的鏡像加速地址(如果沒有這個文件,就創(chuàng)建一個)

{ "registry-mirrors": ["https://你的ID.mirror.aliyuncs.com"]}
常用命令:
systemctl start docker    #啟動
systemctl stop docker     #停止
systemctl restart docker  #重啟

docker ps  #查看運行的容器
docker images #查看下載的鏡像

拉取FastDFS鏡像

這一步下載鏡像需要一點點時間膛锭,耐心等待即可

docker pull morunchang/fastdfs

運行Tracker和Storage

運行tracker
  • –name 后面的是容器名
  • –net=host 表示設置為host網絡模式粮坞,容器使用主機的ip,并且不用做端口映射
  • sh后面是執(zhí)行的是sh文件初狰,如果運行的是storage容器莫杈,就是storage.sh
docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
運行storage

為了方便后面測試是否成功,還需要提前創(chuàng)建一個文件夾奢入,用來關聯(lián)storage存儲的文件筝闹,我們可以通過更改此文件來更改storage容器里的文件,你可以把這兩個文件夾理解為同一個

#創(chuàng)建文件夾用于后面做文件的映射
mkdir -p /apps/storage/data
  • -v 后面是設置的虛擬機文件和容器里的文件的映射關系
  • TRACKER_IP改成自己Linux系統(tǒng)的ip地址(可通過ifconfig查看)俊马,如果是云服務器丁存,則改成公網IP
  • -e 后面跟的是容器的參數(shù),GROUP_NAME是組名肩杈,可以根據(jù)自己的需求進行設置
docker run -d --name storage -v /apps/storage/data:/data/fast_data/data --net=host -e TRACKER_IP=192.168.220.100:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh

修改Nginx的配置(storage容器內的)

進入storage容器內部
docker exec -it storage /bin/bash

打開nginx的配置文件nginx.conf

vi /etc/nginx/conf/nginx.conf

添加如下內容(已存在的柴我,不用改),這一步的目的是將ip:port/組名/M00/*的請求映射到ngx_fastdfs_module模塊下扩然,并且存儲在當前容器的/data/fast_data/data目錄下

location ~ /M00 {
 root /data/fast_data/data;
    ngx_fastdfs_module;
    add_header Cache-Control no-store;
}

設置好后就可以退出容器了

exit

容器storage容器

docker restart storage

除了上面的之外艘儒,如果你有其他的需求,比如修改配置文件的其他信息夫偶,可以按照如下步驟來進行修改

docker exec -it storage /bin/bash
cd /etc/fdfs
vi tracker.conf
vi storage.conf

三界睁、測試

第一步:

測試Nginx是否啟動正常,如果上面的步驟中你沒有修改nginx的配置文件兵拢,默認是8080端口打開

打開瀏覽器翻斟,輸入:Linux的ip:8080,如果看到Welcom to Nginx則表示Nginx啟動沒有問題

不成功的解決辦法:

如果訪問被秒拒絕说铃,則說明是防火墻的原因访惜,如果等待了一段時間后提示錯誤嘹履,則可能是其他原因,這個時候需要進入storage容器查看nginx的error日志卦羡,在容器/etc/nginx/下的日志目錄下

第二步:

如果第一步沒有問題滋恬,則可以往Linux下的/apps/storage/data/data/00/00目錄下傳入一個圖片贞奋,

例如:命名為rBCY81_Rh2eAcZAgAA7o7y_7EUQ049.png(因為文件名太短是訪問不到的),

或者自己創(chuàng)建一個文件

vi /apps/storage/data/data/00/00/rBCY81_Rh2eAcZAgAA7o7y_7EUQ049.txt隨便寫的內容

然后嘗試用瀏覽器進行訪問這個文件焕刮,輸入如下格式的URL

ip:8080/組名(默認group1)/M00/00/00/文件(例如:rBCY81_Rh2eAcZAgAA7o7y_7EUQ049.txt)

不成功的解決辦法:

如果無法訪問,可以進入容器墙杯,通過查看容器后查看配置文件來鎖定錯誤原因

步驟:

進入容器

docker exec -it storage /bin/bash

查看storage日志文件信息

cat /data/fast_data/logs/storaged.log

在使用SpringBoot或者SpringCloud的FdfsClient進行上傳圖片時配并,如果沒有get到tracker或者storage,去打開防火墻的22122霍转,23000端口荐绝,云服務器的話需要去管理頁面開啟這些端口(具體百度,根據(jù)操作系統(tǒng)) 如果是報的錯是超時,可以查看以下application.yml配置文件的超時時間避消,設置長一些再進行測試

四低滩、總結

對于剛接觸這個的小白來說,如果遇到了問題岩喷,首先要做的不是盲目的去百度搜解決辦法恕沫,而應該第一時間想到查看日志文件,并且要知道查看哪一個日志文件纱意,如果說你不知道日志文件在那個目錄下婶溯,沒關系,別著急偷霉,這個網上一艘便是迄委,查看日志文件然后再根據(jù)日志文件提示的錯誤鎖定問題,然后再針對性的去找解決辦法类少。

平時遇到的很多問題往往都是比較寬泛的叙身,你可能會搜索到各式各樣的解決方案,因為一個表面的問題硫狞,往往有很多中深層次的問題導致的信轿,是否能靠網上搜到的解決你遇到的問題完全是在靠運氣。

重要的事說三遍:

出現(xiàn)問題一定要看日志文件2蟹浴2坪觥!出現(xiàn)問題一定要看日志文件F辍<幢搿!出現(xiàn)問題一定要看日志文件

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末活尊,一起剝皮案震驚了整個濱河市隶校,隨后出現(xiàn)的幾起案子琼蚯,更是在濱河造成了極大的恐慌,老刑警劉巖惠况,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遭庶,死亡現(xiàn)場離奇詭異,居然都是意外死亡稠屠,警方通過查閱死者的電腦和手機峦睡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來权埠,“玉大人榨了,你說我怎么就攤上這事∪帘危” “怎么了龙屉?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長满俗。 經常有香客問我转捕,道長,這世上最難降的妖魔是什么唆垃? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任五芝,我火速辦了婚禮,結果婚禮上辕万,老公的妹妹穿的比我還像新娘枢步。我一直安慰自己,他們只是感情好渐尿,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布醉途。 她就那樣靜靜地躺著,像睡著了一般砖茸。 火紅的嫁衣襯著肌膚如雪隘擎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天渔彰,我揣著相機與錄音嵌屎,去河邊找鬼推正。 笑死恍涂,一個胖子當著我的面吹牛,可吹牛的內容都是我干的植榕。 我是一名探鬼主播再沧,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尊残!你這毒婦竟也來了炒瘸?” 一聲冷哼從身側響起淤堵,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顷扩,沒想到半個月后拐邪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡隘截,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年扎阶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婶芭。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡东臀,死狀恐怖,靈堂內的尸體忽然破棺而出犀农,到底是詐尸還是另有隱情惰赋,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布呵哨,位于F島的核電站赁濒,受9級特大地震影響,放射性物質發(fā)生泄漏孟害。R本人自食惡果不足惜流部,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纹坐。 院中可真熱鬧枝冀,春花似錦、人聲如沸耘子。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谷誓。三九已至绒障,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捍歪,已是汗流浹背户辱。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糙臼,地道東北人庐镐。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像变逃,于是被迫代替她去往敵國和親必逆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容