一脏榆、概述
為什么我們需要它?
眾所周知台谍,在微服務架構中须喂,從網關進來的請求會通過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)問題一定要看日志文件