013-FastDFS安裝(單機(jī))

項(xiàng)目中用到文件服務(wù)器fastdfs,所以就了解學(xué)習(xí)了一番,感覺確實(shí)頗為強(qiáng)大,在此再次感謝淘寶資深架構(gòu)師余慶大神開源了如此優(yōu)秀的輕量級(jí)分布式文件系統(tǒng),本篇文章學(xué)習(xí)并記錄一下fastdfs的在centos7中的安裝與配置。


首先簡(jiǎn)單了解一下基礎(chǔ)概念,FastDFS是一個(gè)開源的輕量級(jí)分布式文件系統(tǒng),由跟蹤服務(wù)器(trackerserver)、存儲(chǔ)服務(wù)器(storageserver)和客戶端(client)三個(gè)部分組成,主要解決了海量數(shù)據(jù)存儲(chǔ)問(wèn)題,特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務(wù)。


FastDFS的系統(tǒng)結(jié)構(gòu)圖


如上圖,FastDFS的兩個(gè)核心概念分別是:Tracker(跟蹤器),Storage(存儲(chǔ)節(jié)點(diǎn)) 。


Tracker主要做調(diào)度工作,相當(dāng)于mvc中的controller的角色,在訪問(wèn)上起負(fù)載均衡的作用。跟蹤器和存儲(chǔ)節(jié)點(diǎn)都可以由一臺(tái)或多臺(tái)服務(wù)器構(gòu)成,跟蹤器和存儲(chǔ)節(jié)點(diǎn)中的服務(wù)器均可以隨時(shí)增加或下線而不會(huì)影響線上服務(wù),其中跟蹤器中的所有服務(wù)器都是對(duì)等的,可以根據(jù)服務(wù)器的壓力情況隨時(shí)增加或減少。Tracker負(fù)責(zé)管理所有的Storage和group,每個(gè)storage在啟動(dòng)后會(huì)連接Tracker,告知自己所屬的group等信息,并保持周期性的心跳,tracker根據(jù)storage的心跳信息,建立group==>[storage server list]的映射表,Tracker需要管理的元信息很少,會(huì)全部存儲(chǔ)在內(nèi)存中;另外tracker上的元信息都是由storage匯報(bào)的信息生成的,本身不需要持久化任何數(shù)據(jù),這樣使得tracker非常容易擴(kuò)展,直接增加tracker機(jī)器即可擴(kuò)展為tracker cluster來(lái)服務(wù),cluster里每個(gè)tracker之間是完全對(duì)等的,所有的tracker都接受stroage的心跳信息,生成元數(shù)據(jù)信息來(lái)提供讀寫服務(wù)。




Storage采用了分卷[Volume](或分組[group])的組織方式,存儲(chǔ)系統(tǒng)由一個(gè)或多個(gè)組組成,組與組之間的文件是相互獨(dú)立的,所有組的文件容量累加就是整個(gè)存儲(chǔ)系統(tǒng)中的文件容量。一個(gè)卷[Volume](組[group])可以由一臺(tái)或多臺(tái)存儲(chǔ)服務(wù)器組成,一個(gè)組中的存儲(chǔ)服務(wù)器中的文件都是相同的,組中的多臺(tái)存儲(chǔ)服務(wù)器起到了冗余備份和負(fù)載均衡的作用,數(shù)據(jù)互為備份,存儲(chǔ)空間以group內(nèi)容量最小的storage為準(zhǔn),所以建議group內(nèi)的多個(gè)storage盡量配置相同,以免造成存儲(chǔ)空間的浪費(fèi)。





下面進(jìn)行單機(jī)版的安裝,共分為一下幾個(gè)步驟:

01 下載安裝文件

02 安裝libfastcommon

03 安裝FastDFS

04 配置 Tracker

05 配置Storage

06 命令上傳測(cè)試

07 安裝 fastdfs-nginx-module

08 安裝 storage 的 nginx

09 安裝 tracker 的 nginx

10 http測(cè)試


可以看到,fastdfs的安裝十分繁瑣,任何軟件的下載配置和安裝出錯(cuò)都會(huì)前功盡棄,所以每一步都要小心謹(jǐn)慎安裝。下面開始正式進(jìn)行安裝。



01 下載安裝文件

共需要下載四個(gè)文件

libfastcommon(下載地址:https://codeload.github.com/happyfish100/libfastcommon/zip/master)

fastdfs(下載地址:https://codeload.github.com/happyfish100/fastdfs/zip/master)

fastdfs-nginx-module(下載地址:https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master)

nginx(下載地址:http://nginx.org/en/download.html)

把上面下載的四個(gè)文件都放到根目錄下面的 /packages 目錄下,統(tǒng)一管理。

注意:網(wǎng)上還有其他個(gè)人或者官網(wǎng)的下載地址,只要文件沒(méi)問(wèn)題,都可以!如圖:





02 安裝libfastcommon

首先要安裝gcc編譯器

yum -y install gcc-c++

將libfastcommon解壓到/usr/local目錄下

unzip /packages/libfastcommon-master.zip -d /usr/local/

安裝libfastcommon

cd /usr/local/libfastcommon-master/

./make.sh

./make.sh install

看到類似下面的提示信息就說(shuō)明安裝成功:


因?yàn)閘ibfastcommon.so 默認(rèn)安裝到了/usr/lib64/libfastcommon.so,但是FastDFS主程序設(shè)置的lib目錄是/usr/local/lib,所以此處需要重新設(shè)置軟鏈接

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so


03 安裝FastDFS

首先解壓壓縮包

cd /packages/

unzip fastdfs-master.zip

然后執(zhí)行安裝命令

cd /packages/fastdfs-master

./make.sh

./make.sh install

沒(méi)有報(bào)錯(cuò)說(shuō)明安裝成功,并且已經(jīng)安裝到了 /etc/fdfs 中,我們看一下該目錄下的文件:


如上圖,安裝成功后就會(huì)生成如上的幾個(gè).sample文件(示例配置文件),我們?cè)俜謩e拷貝出其中幾個(gè)后面用到的正式的配置文件:

cd /etc/fdfs/

cp client.conf.sample client.conf

cp storage.conf.sample storage.conf

cp tracker.conf.sample tracker.conf

此時(shí)目錄中的文件如下:


至此FastDFS已經(jīng)安裝完畢,接下來(lái)的工作就是依次配置Tracker和Storage了。

04 配置 Tracker

在配置Tracker之前,首先需要?jiǎng)?chuàng)建Tracker的文件路徑,即用于存儲(chǔ)Tracker的數(shù)據(jù)文件和日志文件等,我這里選擇在/opt目錄下創(chuàng)建一個(gè)fastdfs_tracker目錄用于存放Tracker服務(wù)器的相關(guān)文件:

mkdir /opt/fastdfs_tracker

接下來(lái)就要重新編輯上一步準(zhǔn)備好的/etc/fdfs目錄下的tracker.conf配置文件,

vim /etc/fdfs/tracker.conf

打開文件后依次做以下修改:

#啟用配置文件(默認(rèn)啟用) (默認(rèn)屬性存在并且值為false,不需要修改)

disabled=false

#設(shè)置tracker的端口號(hào),通常采用22122這個(gè)默認(rèn)端口 (默認(rèn)屬性存在,并且值為22122,不需要修改)

port=22122

#設(shè)置tracker的數(shù)據(jù)文件和日志目錄 (默認(rèn)屬性存在,但是值需要修改成當(dāng)前設(shè)置的路徑)

base_path=/opt/fastdfs_tracker

#設(shè)置http端口號(hào),默認(rèn)為8080 (默認(rèn)屬性存在,但是值需要修改成6666)

http.server_port=6666

配置完成后就可以啟動(dòng)Tracker服務(wù)器了,但首先依然要為啟動(dòng)腳本創(chuàng)建軟引用,因?yàn)閒dfs_trackerd等命令在/usr/local/bin中并沒(méi)有,而是在/usr/bin路徑下:

ln -s /usr/bin/fdfs_trackerd /usr/local/bin

ln -s /usr/bin/stop.sh /usr/local/bin

ln -s /usr/bin/restart.sh /usr/local/bin

最后通過(guò)命令啟動(dòng)Tracker服務(wù)器:

service fdfs_trackerd start

命令執(zhí)行后可以看到以下提示:


如果啟動(dòng)命令執(zhí)行成功,那么同時(shí)在剛才創(chuàng)建的tracker文件目錄/opt/fastdfs_tracker中就可以看到啟動(dòng)后新生成的data和logs目錄,


tracker服務(wù)的端口也應(yīng)當(dāng)被正常監(jiān)聽,最后再通過(guò)netstat命令查看一下端口監(jiān)聽情況:

netstat -unltp|grep fdfs*

可以看到tracker服務(wù)運(yùn)行的22122端口正常被監(jiān)聽:


確認(rèn)tracker正常啟動(dòng)后可以將tracker設(shè)置為開機(jī)啟動(dòng),打開/etc/rc.d/rc.local:

vim /etc/rc.d/rc.local

在其中加入以下配置:

service fdfs_trackerd start

如果重啟后發(fā)現(xiàn)未能自動(dòng)啟動(dòng)則通過(guò)下面命令檢查一下rc.local是否具備可執(zhí)行權(quán)限:

ll /etc/rc.d/rc.local

若是無(wú)可執(zhí)行權(quán)限則通過(guò)chmod +x 進(jìn)行授權(quán):

chmod +x /etc/rc.d/rc.local

Tracker至此就配置好了,接下來(lái)就可以配置FastDFS的另一核心——Storage。


05 配置Storage

步驟基本與配置Tracker一致,首先是創(chuàng)建Storage服務(wù)器的文件目錄,需要注意的是同Tracker相比我多建了一個(gè)目錄,因?yàn)镾torage還需要一個(gè)文件存儲(chǔ)路徑,用于存放接收的文件:

mkdir /opt/fastdfs_storage

mkdir /opt/fastdfs_storage_data

接下來(lái)修改/etc/fdfs目錄下的storage.conf配置文件,

vim /etc/fdfs/storage.conf

打開文件后依次做以下修改:

#啟用配置文件(默認(rèn)啟用)

disabled=false

#組名,根據(jù)實(shí)際情況修改

group_name=group1

#設(shè)置storage的端口號(hào),默認(rèn)是23000,同一個(gè)組的storage端口號(hào)必須一致

port=23000

#設(shè)置storage數(shù)據(jù)文件和日志目錄

base_path=/opt/fastdfs_storage

#存儲(chǔ)路徑個(gè)數(shù),需要和store_path個(gè)數(shù)匹配

store_path_count=1

#實(shí)際文件存儲(chǔ)路徑

store_path0=/opt/fastdfs_storage_data

#tracker 服務(wù)器的 IP地址和端口號(hào),如果是單機(jī)搭建,IP不要寫127.0.0.1,否則啟動(dòng)不成功(比如當(dāng)前ip是192.168.1.52)

tracker_server=192.168.1.52:22122

#設(shè)置 http 端口號(hào)

http.server_port=8888

配置完成后同樣要為Storage服務(wù)器的啟動(dòng)腳本設(shè)置軟引用:

ln -s /usr/bin/fdfs_storaged /usr/local/bin

接下來(lái)就可以啟動(dòng)Storage服務(wù)了:

service fdfs_storaged start

命令執(zhí)行后可以看到以下提示,如圖:


同理,如果啟動(dòng)成功,/opt/fastdfs_storage中就可以看到啟動(dòng)后新生成的data和logs目錄:


端口23000也應(yīng)被正常監(jiān)聽:


可以看到/opt/fastdfs_storage/data目錄下生成好的pid文件和dat文件:


還有一點(diǎn)就是文件實(shí)際存儲(chǔ)路徑/opt/fastdfs_storage_data/data下會(huì)生成多級(jí)存儲(chǔ)目錄,那么接下來(lái)看看是否啟動(dòng)成功了:


如上圖,沒(méi)有任何問(wèn)題,data下有256個(gè)1級(jí)目錄,每級(jí)目錄下又有256個(gè)2級(jí)子目錄,總共65536個(gè)文件,新寫的文件會(huì)以hash的方式被路由到其中某個(gè)子目錄下,然后將文件數(shù)據(jù)直接作為一個(gè)本地文件存儲(chǔ)到該目錄中。

至此storage服務(wù)器就已經(jīng)配置完成,確定了storage服務(wù)器啟動(dòng)成功后,還有一項(xiàng)工作就是看看storage服務(wù)器是否已經(jīng)登記到 tracker服務(wù)器(也可以理解為tracker與storage是否整合成功),運(yùn)行以下命令:

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

如下圖所示,看到192.168.1.52 ACTIVE 字樣即可說(shuō)明storage服務(wù)器已經(jīng)成功登記到了tracker服務(wù)器:


添加開機(jī)啟動(dòng),打開/etc/rc.d/rc.local:

vim /etc/rc.d/rc.local

并將如下配置追加到文件中:

service fdfs_storaged start

至此我們就已經(jīng)完成了fastdfs的全部配置,此時(shí)也就可以用客戶端工具進(jìn)行文件上傳下載的測(cè)試了。

06 命令上傳測(cè)試

fastdfs安裝成功,并成功啟動(dòng)了Tracker和Storage的配置,此時(shí)可以用命令進(jìn)行文件上傳的測(cè)試了。

測(cè)試時(shí)需要設(shè)置客戶端的配置文件,編輯/etc/fdfs目錄下的client.conf 文件:

vim /etc/fdfs/client.conf

打開文件后依次做以下修改:

#tracker服務(wù)器文件路徑

base_path=/opt/fastdfs_tracker

#tracker服務(wù)器IP地址和端口號(hào)

tracker_server=192.168.1.52:22122

# tracker 服務(wù)器的 http 端口號(hào),必須和tracker的設(shè)置對(duì)應(yīng)起來(lái)

http.tracker_server_port=6666

配置完成后就可以模擬文件上傳了,先給/packages目錄下放一張圖片 123.jpg:


然后通過(guò)執(zhí)行客戶端上傳命令嘗試上傳:

/usr/bin/fdfs_upload_file? /etc/fdfs/client.conf? /packages/123.jpg

可以看到命令行返回了一個(gè)文件的路徑(圖片名和路徑以各自的服務(wù)器的為準(zhǔn)):


這就表示我們的文件已經(jīng)上傳成功了,當(dāng)文件存儲(chǔ)到某個(gè)子目錄后,即認(rèn)為該文件存儲(chǔ)成功,接下來(lái)會(huì)為該文件生成一個(gè)文件名,文件名由group、存儲(chǔ)目錄、兩級(jí)子目錄、文件名、文件后綴名(由客戶端指定,主要用于區(qū)分文件類型)拼接而成,如下:

group1:組名

M00:磁盤

00/00:兩級(jí)子目錄

wKgBNFssou2Ade4jAAAzm2-Ii4E247:文件名

.jpg:文件后綴名

同時(shí)在之前配置的storage服務(wù)器的實(shí)際文件存儲(chǔ)路徑中也可以根據(jù)返回的路徑找到實(shí)際文件:


接下來(lái)嘗試用瀏覽器發(fā)送HTTP請(qǐng)求訪問(wèn)一下文件:

http://192.168.1.52:6666/group1/M00/00/00/wKgBNFssou2Ade4jAAAzm2-Ii4E247.jpg

此時(shí)發(fā)現(xiàn)并不能訪問(wèn),因?yàn)镕astDFS的4.0.5版本開始移除了自帶的HTTP支持(因?yàn)橹白詭У腍TTP服務(wù)較為簡(jiǎn)單,無(wú)法提供負(fù)載均衡等高性能服務(wù)),所以軟件提供了nginx上使用FastDFS的模塊fastdfs-nginx-module。


07 安裝 fastdfs-nginx-module

nginx上使用FastDFS的模塊fastdfs-nginx-module,這樣做最大的好處就是提供了HTTP服務(wù)并且解決了group中storage服務(wù)器的同步延遲問(wèn)題,接下來(lái)就具體記錄一下fastdfs-nginx-module的安裝配置過(guò)程。

首先需要先安裝一些模塊依賴的lib庫(kù):

yum -y install pcre pcre-devel

yum -y install zlib zlib-devel

yum -y install openssl openssl-devel

然后解壓fastdfs-nginx-module:

cd /packages

unzip fastdfs-nginx-module-master.zip

接下來(lái)還需要把fastdfs-nginx-module安裝目錄中src目錄下的mod_fastdfs.conf也拷貝到/etc/fdfs目錄下:

cp /packages/fastdfs-nginx-module-master/src/mod_fastdfs.conf? /etc/fdfs/

接下來(lái)就需要編輯剛拷貝的這個(gè)mod_fastdfs.conf文件了,打開mod_fastdfs.conf:

vim /etc/fdfs/mod_fastdfs.conf

按順序依次編譯以下內(nèi)容:

#保存日志目錄

base_path=/opt/fastdfs_storage

#tracker服務(wù)器的IP地址以及端口號(hào)

tracker_server=192.168.1.52:22122

#storage服務(wù)器的端口號(hào)

storage_server_port=23000

#文件 url 中是否有 group 名

url_have_group_name = true

# 存儲(chǔ)路徑

store_path0=/opt/fastdfs_storage_data

#設(shè)置組的個(gè)數(shù),事實(shí)上這次只使用了group1

group_count = 3

#設(shè)置了group_count = 3,接下來(lái)就需要在文件尾部追加這3個(gè)group setting:

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/opt/fastdfs_storage_data


[group2]

group_name=group2

storage_server_port=23000

store_path_count=1

store_path0=/opt/fastdfs_storage_data


[group3]

group_name=group3

storage_server_port=23000

store_path_count=1

store_path0=/opt/fastdfs_storage_data

關(guān)于fastdfs-nginx-module的配置完成。注意:上面的三個(gè)group一定要寫的格式清晰,有的文章中括號(hào)折行是導(dǎo)致測(cè)試不通過(guò)的主要原因。


08 安裝 storage 的 nginx

首先解壓nginx

cd /packages/

tar -zxvf nginx-1.13.12.tar.gz

然后編譯安裝nginx,進(jìn)入nginx目錄并輸入以下命令進(jìn)行配置:

cd /packages/nginx-1.13.12

./configure --prefix=/usr/local/nginx --add-module=/packages/fastdfs-nginx-module-master/src

配置成功后會(huì)看到如下信息:


緊接著就可以進(jìn)行編譯安裝了,依次執(zhí)行以下命令:

cd /packages/nginx-1.13.12

make

make? install

安裝完成后,我們?cè)谖覀冎付ǖ哪夸?usr/local/nginx中就可以看到nginx的安裝目錄了:


接下來(lái)要修改一下nginx的配置文件,進(jìn)入conf目錄并打開nginx.conf文件加入以下配置:

# 首先刪除原來(lái)的80監(jiān)聽

#然后加入下面的9999監(jiān)聽

listen 9999;

#然后加入下面的配置

location /group1/M00 {

? ? ? ? root /opt/fastdfs_storage_data/data;

? ? ? ? ngx_fastdfs_module;

}

然后進(jìn)入FastDFS的安裝目錄下的conf目錄,將http.conf和mime.types拷貝到/etc/fdfs目錄下:

cp /packages/fastdfs-master/conf/http.conf /etc/fdfs/

cp /packages/fastdfs-master/conf/mime.types /etc/fdfs/

最后啟動(dòng)nginx:

/usr/local/nginx/sbin/nginx

顯示如下信息說(shuō)明nginx已啟動(dòng)成功:


通過(guò)瀏覽器也可以看到nginx的主頁(yè)(http://192.168.1.52:9999):


storage服務(wù)器的nginx就已經(jīng)安裝完畢,接下來(lái)看一下tracker服務(wù)器的nginx安裝。


09 安裝 tracker 的 nginx

同理,再裝一個(gè)nginx,目錄命名為nginx2,安裝路徑依舊放在/usr/local下,由于和之前一樣,此處就不再做詳細(xì)解釋:

cd /packages/nginx-1.13.12

./configure --prefix=/usr/local/nginx2 --add-module=/packages/fastdfs-nginx-module-master/src

cd /packages/nginx-1.13.12

make

make? install


接下來(lái)依然是修改nginx2的配置文件,進(jìn)入conf目錄

cd /usr/local/nginx2/conf/

打開nginx.conf文件加入以下配置,storage的nginx無(wú)需修改listen端口,即默認(rèn)的80端口,并將upstream指向tracker的nginx地址:

#upstream 加在 http下面

upstream fdfs_group1 {

? ? ? server 127.0.0.1:9999;

}


location /group1/M00 {

? ? ? ? proxy_pass http://fdfs_group1;

}

接下來(lái)啟動(dòng)nginx2:

/usr/local/nginx2/sbin/nginx

此時(shí)訪問(wèn)nginx2的主頁(yè),由于沒(méi)有修改端口,直接訪問(wèn)ip地址即可:


最后一步就是需要修改/etc/fdfs目錄下的client.conf文件,打開該文件并加入以下配置:

#日志存放路徑

base_path=/data/fastdfs_storage

#tracker 服務(wù)器 IP 地址和端口號(hào)

tracker_server=192.168.1.52:22122

# tracker 服務(wù)器的 http 端口號(hào),必須和tracker的設(shè)置對(duì)應(yīng)起來(lái)

http.tracker_server_port=6666

至此關(guān)于fastdfs就已經(jīng)全部配置完畢了。


10 http測(cè)試

再一次測(cè)試上面上傳的123.jpg的地址,可以發(fā)現(xiàn),已經(jīng)能夠訪問(wèn)成功:

http://192.168.1.52/group1/M00/00/00/wKgBNFssou2Ade4jAAAzm2-Ii4E247.jpg

圖片為:



注意,上一次測(cè)試訪問(wèn)的端口是6666,本次因?yàn)閚ginx,所以訪問(wèn)的端口是80

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0.參考本文是在學(xué)習(xí)淘淘商城項(xiàng)目時(shí)記錄的。主要是參考了淘淘商城視頻及《Java 程序員眼中的 Linux》 htt...
    種個(gè)太陽(yáng)砸死你閱讀 9,803評(píng)論 1 8
  • 最低配置要求 請(qǐng)查看你的系統(tǒng)是否符合最低推薦配置要求: 基礎(chǔ)配置 32-bit dual core 2Ghz CP...
    百曉通客棧KK閱讀 2,612評(píng)論 0 1
  • 前幾天,從初中就交好的朋友L來(lái)我們學(xué)??荚嚕c我吃了一頓飯。我們已經(jīng)五年未見,她變了很多,臉上不見讓她一直...
    蘆葦一條魚閱讀 370評(píng)論 0 1
  • 每個(gè)女孩都會(huì)以為她的愛情是世界上獨(dú)一無(wú)二的,獨(dú)一無(wú)二的他,獨(dú)一無(wú)二的甜蜜,獨(dú)一無(wú)二的爭(zhēng)吵,獨(dú)一無(wú)二的歡笑和淚水,獨(dú)...
    正念大如閱讀 794評(píng)論 0 0

友情鏈接更多精彩內(nèi)容