分布式文件系統(tǒng)FastDFS如何做到高可用

FastDFS是用C語(yǔ)言編寫(xiě)的一款開(kāi)源的輕量級(jí)分布式文件系統(tǒng)。它對(duì)文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件訪(fǎng)問(wèn)(文件上傳、文件下載)等,解決了大容量存儲(chǔ)和負(fù)載均衡的問(wèn)題。特別適合以文件為載體的在線(xiàn)服務(wù),如相冊(cè)網(wǎng)站、視頻網(wǎng)站等等。 
FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負(fù)載均衡、線(xiàn)性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo),使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到寬城網(wǎng)站設(shè)計(jì)與寬城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋寬城地區(qū)。

與Hadoop有什么區(qū)別?

Hadoop也是一個(gè)分布式文件系統(tǒng),hadoop是處理大數(shù)據(jù)的,什么是大數(shù)據(jù)呢?就是海量數(shù)據(jù)。海量數(shù)據(jù)你一塊磁盤(pán)估計(jì)存不下,那么就需要把數(shù)據(jù)存到多個(gè)磁盤(pán)上,還得統(tǒng)一管理,這時(shí)就需要一個(gè)分布式文件系統(tǒng)來(lái)管理。FastDFS同樣也是這么一個(gè)意思,圖片我們有很多,但容量有上限,所以我們要把這些所有的圖片存儲(chǔ)到多臺(tái)服務(wù)器上,還要進(jìn)行統(tǒng)一管理,那么就需要一個(gè)分布式文件系統(tǒng),很顯然那就是FastDFS了,F(xiàn)astDFS適合于存取圖片(建議范圍:4KB < file_size <500MB)。

FastDFS其實(shí)很早開(kāi)始使用,但這次要作內(nèi)訓(xùn),因此下面借鑒網(wǎng)友的部份內(nèi)容結(jié)合實(shí)踐作總結(jié),有些出處可能忘了 請(qǐng)多擔(dān)待。

FastDFS架構(gòu)

下面來(lái)看一張F(tuán)astDFS的架構(gòu)圖,如下圖所示。

FastDFS架構(gòu)包括Tracker server和Storage server。

客戶(hù)端請(qǐng)求Tracker server進(jìn)行文件上傳、下載,通過(guò)Tracker server調(diào)度最終由Storage server完成文件上傳和下載。Tracker server的作用是負(fù)載均衡和調(diào)度,通過(guò)Tracker server在文件上傳時(shí)可以根據(jù)一些策略找到Storage server提供文件上傳服務(wù),可以將tracker稱(chēng)為追蹤服務(wù)器或調(diào)度服務(wù)器。Tracker server跟蹤器和存儲(chǔ)節(jié)點(diǎn)都可以由一臺(tái)或多臺(tái)服務(wù)器構(gòu)成,跟蹤器和存儲(chǔ)節(jié)點(diǎn)中的服務(wù)器均可以隨時(shí)增加或下線(xiàn)而不會(huì)影響線(xiàn)上服務(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)提供讀寫(xiě)服務(wù)。

Storage server作用是文件存儲(chǔ),客戶(hù)端上傳的文件最終存儲(chǔ)在Storage服務(wù)器上,Storage server沒(méi)有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng)的文件系統(tǒng)來(lái)管理文件,可以將storage稱(chēng)為存儲(chǔ)服務(wù)器。存儲(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)。

分布式文件系統(tǒng)FastDFS如何做到高可用

 

我們從上圖還能看到,Client端可以有多個(gè),也就是同時(shí)支持多個(gè)客戶(hù)端對(duì)FastDFS集群服務(wù)進(jìn)行訪(fǎng)問(wèn),Tracker是跟蹤器,負(fù)責(zé)協(xié)調(diào)Client與Storage之間的交互,為了實(shí)現(xiàn)高可用性,需要用多個(gè)Tracker來(lái)作為跟蹤器。Storage是專(zhuān)門(mén)用來(lái)存儲(chǔ)東西的,而且是分組進(jìn)行存儲(chǔ)的,每一組可以有多臺(tái)設(shè)備,這幾臺(tái)設(shè)備存儲(chǔ)的內(nèi)容完全一致,這樣做也是為了高可用性,當(dāng)現(xiàn)有分組容量不夠時(shí),我們可以水平擴(kuò)容,即增加分組來(lái)達(dá)到擴(kuò)容的目的。另外需要注意的一點(diǎn)是,如果一組中的設(shè)備容量大小不一致,比如設(shè)備A容量是80G,設(shè)備B的容量是100G,那么這兩臺(tái)設(shè)備所在的組的容量會(huì)以小的容量為準(zhǔn),也就是說(shuō),當(dāng)存儲(chǔ)的東西大小超過(guò)80G時(shí),我們將無(wú)法存儲(chǔ)到該組中了。Client端在與Storage進(jìn)行交互的時(shí)候也與Tracker cluster進(jìn)行交互,說(shuō)的通俗點(diǎn)就是Storage向Tracker cluster進(jìn)行匯報(bào)登記,告訴Tracker現(xiàn)在自己哪些位置還空閑,剩余空間是多大。

文件上傳的流程

現(xiàn)給出一張文件上傳的時(shí)序圖,如下圖所示:

分布式文件系統(tǒng)FastDFS如何做到高可用

從中可以看到,Client想上傳圖片,它先向Tracker進(jìn)行詢(xún)問(wèn),Tracker查看一下登記信息之后,告訴Client哪個(gè)storage當(dāng)前空閑,Tracker會(huì)把IP和端口號(hào)都返回給Client,Client在拿到IP和端口號(hào)之后,便不再需要通過(guò)Tracker,直接便向Storage進(jìn)行上傳圖片,Storage在保存圖片的同時(shí),會(huì)向Tracker進(jìn)行匯報(bào),告訴Tracker它當(dāng)前是否還留有剩余空間,以及剩余空間大小。匯報(bào)完之后,Storage將服務(wù)器上存儲(chǔ)圖片的地址返回給Client,Client可以拿著這個(gè)地址進(jìn)行訪(fǎng)問(wèn)圖片。說(shuō)得更加細(xì)致一點(diǎn),客戶(hù)端上傳文件后存儲(chǔ)服務(wù)器將文件ID返回給客戶(hù)端,此文件ID用于以后訪(fǎng)問(wèn)該文件的索引信息。文件索引信息包括:組名,虛擬磁盤(pán)路徑,數(shù)據(jù)兩級(jí)目錄,文件名,如下所示:

分布式文件系統(tǒng)FastDFS如何做到高可用

組名:文件上傳后所在的storage組名稱(chēng),在文件上傳成功后由storage服務(wù)器返回,需要客戶(hù)端自行保存。
虛擬磁盤(pán)路徑:storage配置的虛擬路徑,與磁盤(pán)選項(xiàng)store_path*對(duì)應(yīng)。如果配置了store_path0則是M00,如果配置了store_path2則是M01,以此類(lèi)推。
數(shù)據(jù)兩級(jí)目錄:storage服務(wù)器在每個(gè)虛擬磁盤(pán)路徑下創(chuàng)建的兩級(jí)目錄,用于存儲(chǔ)數(shù)據(jù)文件。
文件名:與文件上傳時(shí)不同。是由存儲(chǔ)服務(wù)器根據(jù)特定信息生成,文件名包含:源存儲(chǔ)服務(wù)器IP地址、文件創(chuàng)建時(shí)間戳、文件大小、隨機(jī)數(shù)和文件拓展名等信息。

 

文件下載的流程

現(xiàn)給出一張文件下載的時(shí)序圖,如下圖所示:

分布式文件系統(tǒng)FastDFS如何做到高可用

文件下載的步驟可以是:

1. client詢(xún)問(wèn)tracker下載文件的storage,參數(shù)為文件標(biāo)識(shí)(組名和文件名)。
2. tracker返回一臺(tái)可用的storage。
3. client直接和storage通訊完成文件下載。

搭建FastDFS

安裝組件

nginx+FastDFS+fastdfs-nginx-module

布署結(jié)構(gòu):
tracker:storage0:192.168.80.32
storage1:192.168.80.30
storage2:192.168.80.31

nginx 放在192.168.80.32

下載下列最新的安裝包: 
fastdfs-master.zip:FastDFS源碼 
libfastcommon-master.zip:(從 FastDFS 和 FastDHT 中提取出來(lái)的公共 C 函數(shù)庫(kù)) 
fastdfs-nginx-module-master.zip:storage節(jié)點(diǎn)http服務(wù)nginx模塊 
nginx.tar.gz:Nginx安裝包

防火墻

防火墻中打開(kāi)tracker服務(wù)器端口( 默認(rèn)為 22122) 
shell> vi /etc/sysconfig/iptables 
添加如下端口行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT

 

storage服務(wù)器需要添加端口

-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

 

重啟防火墻: 
shell> service iptables restart

 

所有服務(wù)器先安裝libevent工具包

yum -y install libevent

 

所有服務(wù)器安裝libfastcommon工具包

先將fastdfs-master.zip和libfastcommon-master.zip 上傳至所有服務(wù)器的/opt文件夾下

1. 解壓縮 unzip libfastcommon-master.zip

編譯安裝
2. cd libfastcommon-master
3. ./make.sh
4. ./make.sh install
5. 把/usr/lib64/libfastcommon.so文件向/usr/lib/下復(fù)制一份 (32位才需要)

 

安裝Tracker服務(wù)

解壓縮unzip fastdfs-master.zip

編譯安裝

 cd fastdfs-master
 ./make.sh
./make.sh install

安裝后在/usr/bin/目錄下有以fdfs開(kāi)頭的文件都是編譯出來(lái)的。
配置文件都放到/etc/fdfs文件夾
把/opt/fastdfs-master/conf目錄下的所有的配置文件都復(fù)制到/etc/fdfs下。

cp -r /opt/fastdfs-master/conf/*  /etc/fdfs

創(chuàng)建文件存放路徑

mkdir -p /data/fastdfs/tracker #創(chuàng)建tracker文件存放路徑(tracker服務(wù)器才需要)
mkdir -p /data/fastdfs/storage #創(chuàng)建storage 文件存放路徑
mkdir -p /data/fastdfs/client #創(chuàng)建client 文件存放路徑

 

配置tracker服務(wù)

修改/etc/fdfs/conf/tracker.conf文件。

vim /etc/fdfs/tracker.conf #編輯tracker配置文件
bind_addr=  #綁定IP  綁定的IP地址 (常用于服務(wù)器有多個(gè)IP但只希望一個(gè)IP提供服務(wù))。如果不填則表示所有的(一般不填就OK),相信較熟練的SA都常用到類(lèi)似功能,很多系統(tǒng)和應(yīng)用都有
port=22122     #tracker服務(wù)端口  
base_path=/data/fastdfs/tracker #目錄地址,里面會(huì)創(chuàng)建data(存放存儲(chǔ)服務(wù)器信息)、logs,日志文件  (根目錄必須存在,子目錄會(huì)自動(dòng)創(chuàng)建)

 

其它內(nèi)容默認(rèn),有關(guān)配置說(shuō)明參考文章后面補(bǔ)充內(nèi)容。

配置storage服務(wù)

在2臺(tái)storage服務(wù)器上配置storage服務(wù),前題也是安裝libfastcommon和fastdfs。

修改/etc/fdfs/conf/storage.conf文件。

group_name=group1 #存儲(chǔ)組名
client_bind=true #當(dāng)連接其他服務(wù)器時(shí)解析該主機(jī)地址
port=23000 #storage端口 23000
base_path=/data/fastdfs/storage #基礎(chǔ)存儲(chǔ)數(shù)據(jù)和日志文件
store_path0=/data/fastdfs/storage #group 所占用的目錄或硬盤(pán),有幾個(gè)寫(xiě)幾個(gè)
tracker_server=192.168.80.32:22122 #指定tracker1服務(wù)器

 

其它內(nèi)容默認(rèn),有關(guān)配置說(shuō)明參考文章后面補(bǔ)充內(nèi)容。

只編輯tracker服務(wù)器上的client.conf

vim /etc/fdfs/client.conf
base_path=/data/fastdfs/client  #基礎(chǔ)數(shù)據(jù)和日志文件
tracker_server=192.168.80.32:22122 #tracker1服務(wù)器

 

以上就是fastdfs的所有配置,下面分別啟動(dòng)32服務(wù)上的tracker、storage和30和31上的storage。

啟動(dòng)tracker

/usr/bin/fdfs_trackerd  /etc/fdfs/tracker.conf

重啟使用命令:

/usr/bin/fdfs_trackerd  /etc/fdfs/tracker.conf  restart

檢查FastDFS Tracker Server是否啟動(dòng)成功: 
ps -ef | grep fdfs_trackerd

停止:

/etc/init.d/fdfs_trackerd stop
設(shè)置tracker服務(wù)開(kāi)機(jī)啟動(dòng)

chkconfig fdfs_trakcerd on

啟動(dòng)storage服務(wù)

/usr/bin/fdfs_storaged  /etc/fdfs/storage.conf restart
停止storage服務(wù)器
 /etc/init.d/fdfs_storaged stop
設(shè)置storage服務(wù)開(kāi)機(jī)啟動(dòng)
chkconfig fdfs_storaged on

 

測(cè)試服務(wù)

/usr/bin/fdfs_test  /etc/fdfs/client.conf  upload   /etc/fdfs/anti-steal.jpg

 

分布式文件系統(tǒng)FastDFS如何做到高可用

有以上返回內(nèi)容說(shuō)明已經(jīng)上傳成功,但我們將url 在瀏覽器上訪(fǎng)問(wèn)時(shí)會(huì)返回404 是不允許直接訪(fǎng)問(wèn)的,因此我們需要用到下面的nginx代理來(lái)作web服務(wù)訪(fǎng)問(wèn)。

搭建nginx提供http服務(wù)

fastdfs-nginx-module 作用說(shuō)明 
FastDFS 通過(guò) Tracker 服務(wù)器,將文件放在 Storage 服務(wù)器存儲(chǔ),但是同組存儲(chǔ)服務(wù)器之間需要進(jìn)入文件復(fù)制,有同步延遲的問(wèn)題。
如果Tracker 服務(wù)器將文件上傳到了 192.168.80.30,上傳成功后文件ID已經(jīng)返回給客戶(hù)端。此時(shí) FastDFS 存儲(chǔ)集群機(jī)制會(huì)將這個(gè)文件同步到同組存儲(chǔ)192.168.80.31,在文件還沒(méi)有復(fù)制完成的情況下,客戶(hù)端如果用這個(gè)文件 ID 在 192.168.80.31 上取文件,就會(huì)出現(xiàn)文件無(wú)法訪(fǎng)問(wèn)的錯(cuò)誤。
而 fastdfs-nginx-module 可以重定向文件連接到源服務(wù)器取文件,避免客戶(hù)端由于復(fù)制延遲導(dǎo)致的文件無(wú)法訪(fǎng)問(wèn)錯(cuò)誤
可以使用官方提供的nginx插件。要使用nginx插件需要重新編譯。

更改fastdfs-nginx-module配置

上傳fastdfs-nginx-module.tar.gz
1. 解壓插件壓縮包
2. 修改/opt/fastdfs-nginx-module/src/config文件,把其中的local去掉。(最新的沒(méi)有l(wèi)ocal)

分布式文件系統(tǒng)FastDFS如何做到高可用

 

將mod_fastdfs.conf 拷貝到fdfs下進(jìn)行配置

cd fastdfs-nginx-module/src
cp mod_fastdfs.conf /etc/fdfs/ #將mod_fastdfs.conf 拷貝到fdfs下進(jìn)行配置

vim /etc/fdfs/mod_fastdfs.conf
base_path=/tmp #日志存放路徑
tracker_server=192.168.80.32:22122 #配置成tracker server 地址和端口
storage_server_port=23000
url_have_group_name = true #url 中是否包組名
store_path0=/data/fastdfs/storage #文件存放路徑,與storage 一致
group_name=group1

編譯安裝Nginx

安裝依賴(lài)包

yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

安裝nginx

上傳解壓nginx

cd nginx

對(duì)nginx重新config
./configure \
--prefix=/opt/nginx \
--pid-path=/opt/nginx/nginx.pid \
--lock-path=/opt/nginx.lock \
--error-log-path=/opt/nginx/log/error.log \
--http-log-path=/opt/nginx/log/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/opt/nginx/client \
--http-proxy-temp-path=/opt/nginx/proxy \
--http-fastcgi-temp-path=/opt/nginx/fastcgi \
--http-uwsgi-temp-path=/opt/nginx/uwsgi \
--http-scgi-temp-path=/opt/nginx/scgi \
--add-module=/opt/fastdfs-nginx-module/src

 

 再進(jìn)行

./make.sh && ./make.sh install 

配置nginx

 vim /opt/nginx/conf/nginx.conf

在nginx的配置文件中添加一個(gè)Server:
server {
        listen       8888;
        server_name  192.168.80.32;

        location /group1/M00/{
                #root /home/FastDFS/fdfs_storage/data;
                ngx_fastdfs_module;
        }
}

 

 但上面的內(nèi)容已經(jīng)固定死了group1的M00,Storage 對(duì)應(yīng)有多個(gè) group 的情況下,訪(fǎng)問(wèn)路徑帶 group 名,如/group1/M00/00/00/xxx,在這里改用:

location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}

注意:

8888 端口值是要與/etc/fdfs/storage.conf 中的http.server_port=8888 相對(duì)應(yīng),因?yàn)?http.server_port 默認(rèn)為 8888,如果想改成 80,則要對(duì)應(yīng)修改過(guò)來(lái)。 

如查下載時(shí)如發(fā)現(xiàn)老報(bào) 404, 將 nginx.conf 第一行 user nobody 修改為 user root 后重新啟動(dòng)。
 防火墻中打開(kāi) Nginx 的 8888 端口 
vi /etc/sysconfig/iptables
添加:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
重新啟動(dòng)防火墻:
shell> service iptables restart

開(kāi)機(jī)自啟動(dòng)

即在rc.local增加啟動(dòng)代碼就可以了。
vi /etc/rc.local
增加一行 /opt/nginx/sbin/nginx
設(shè)置執(zhí)行權(quán)限:
chmod 755 rc.local

啟動(dòng)Nginx

shell> /opt/nginx/sbin/nginx
ngx_http_fastdfs_set pid=xxx

nginx重啟命令為:

/opt/nginx/sbin/nginx -s reload

訪(fǎng)問(wèn)測(cè)試圖片

通過(guò)瀏覽器訪(fǎng)問(wèn)測(cè)試時(shí)上傳的文件,測(cè)試上傳后返回的文件ID為:group1/M00/00/00/wKhQIFoKF3KAfw8wAABdrZgsqUU551_big.jpg,用瀏覽訪(fǎng)問(wèn)的地址為:http://192.168.80.32:8888/group1/M00/00/00/wKhQIFoKF3KAfw8wAABdrZgsqUU551_big.jpg
注意: 千萬(wàn)不要使用 kill -9 命令強(qiáng)殺 FastDFS 進(jìn)程,否則可能會(huì)導(dǎo)致 binlog 數(shù)據(jù)丟失。

   至此已經(jīng)搭起了一個(gè)簡(jiǎn)單的集群模式,其中上面的配置需要根據(jù)實(shí)際情況進(jìn)行調(diào)整。

說(shuō)明:

tracker配置文件說(shuō)明:

disabled=false#配置是否生效
bind_addr=192.168.6.102#綁定IP
port=22122#服務(wù)端口
connect_timeout=30#連接超時(shí)時(shí)間
network_timeout=60# tracker server的網(wǎng)絡(luò)超時(shí),單位為秒。
base_path=/home/yangzi#目錄地址,里面會(huì)創(chuàng)建data(存放存儲(chǔ)服務(wù)器信息)、logs,日志文件
max_connections=256#系統(tǒng)提供服務(wù)最大連接數(shù)
work_threads=4#線(xiàn)程數(shù),通常設(shè)置CPU數(shù)
store_lookup=2
上傳組(卷) 的方式 0:輪詢(xún)方式 1: 指定組 2: 平衡負(fù)載(選擇最大剩余空間的組(卷)上傳)
這里如果在應(yīng)用層指定了上傳到一個(gè)固定組,那么這個(gè)參數(shù)被繞過(guò)
store_group=group1
當(dāng)上一個(gè)參數(shù)設(shè)定為1 時(shí) (store_lookup=1,即指定組名時(shí)),必須設(shè)置本參數(shù)為系統(tǒng)中存在的一個(gè)組名。如果選擇其他的上傳方式,這個(gè)參數(shù)就沒(méi)有效了
store_server=0
選擇哪個(gè)storage server 進(jìn)行上傳操作(一個(gè)文件被上傳后,這個(gè)storage server就相當(dāng)于這個(gè)文件的storage server源,會(huì)對(duì)同組的storage server推送這個(gè)文件達(dá)到同步效果)
# 0: 輪詢(xún)方式
# 1: 根據(jù)ip 地址進(jìn)行排序選擇第一個(gè)服務(wù)器(IP地址最小者)
# 2: 根據(jù)優(yōu)先級(jí)進(jìn)行排序(上傳優(yōu)先級(jí)由storage server來(lái)設(shè)置,參數(shù)名為upload_priority)
store_path=0
選擇storage server 中的哪個(gè)目錄進(jìn)行上傳。storage server可以有多個(gè)存放文件的base path(可以理解為多個(gè)磁盤(pán))。
# 0: 輪流方式,多個(gè)目錄依次存放文件
# 2: 選擇剩余空間最大的目錄存放文件(注意:剩余磁盤(pán)空間是動(dòng)態(tài)的,因此存儲(chǔ)到的目錄或磁盤(pán)可能也是變化的)
download_server=0
 選擇哪個(gè) storage server 作為下載服務(wù)器
# 0: 輪詢(xún)方式,可以下載當(dāng)前文件的任一storage server
# 1: 哪個(gè)為源storage server 就用哪一個(gè) (前面說(shuō)過(guò)了這個(gè)storage server源 是怎樣產(chǎn)生的) 就是之前上傳到哪個(gè)storage server服務(wù)器就是哪個(gè)了
reserved_storage_space = 4GB
storage server 上保留的空間,保證系統(tǒng)或其他應(yīng)用需求空間(指出 如果同組的服務(wù)器的硬盤(pán)大小一樣,以最小的為準(zhǔn),也就是只要同組中有一臺(tái)服務(wù)器達(dá)到這個(gè)標(biāo)準(zhǔn)了,這個(gè)標(biāo)準(zhǔn)就生效,原因就是因?yàn)樗麄冞M(jìn)行備份)
log_level=info#選擇日志級(jí)別
run_by_group=#操作系統(tǒng)運(yùn)行FastDFS的用戶(hù)組
run_by_user=#操作系統(tǒng)運(yùn)行FastDFS的用戶(hù)
allow_hosts=*#可以連接到此 tracker server 的ip范圍(對(duì)所有類(lèi)型的連接都有影響,包括客戶(hù)端,storage server)
sync_log_buff_interval = 10# 同步或刷新日志信息到硬盤(pán)的時(shí)間間隔,單位為秒
# 注意:tracker server 的日志不是時(shí)時(shí)寫(xiě)硬盤(pán)的,而是先寫(xiě)內(nèi)存。
check_active_interval = 120# 檢測(cè) storage server 存活的時(shí)間隔,單位為秒。
# storage server定期向tracker server 發(fā)心跳,如果tracker server在一個(gè)check_active_interval內(nèi)還沒(méi)有收到storage server的一次心跳,那邊將認(rèn)為該storage server已經(jīng)下線(xiàn)。所以本參數(shù)值必須大于storage server配置的心跳時(shí)間間隔。通常配置為storage server心跳時(shí)間間隔的2倍或3倍。
thread_stack_size = 64KB# 線(xiàn)程棧的大小。FastDFS server端采用了線(xiàn)程方式。更正一下,tracker server線(xiàn)程棧不應(yīng)小于64KB,不是512KB。
# 線(xiàn)程棧越大,一個(gè)線(xiàn)程占用的系統(tǒng)資源就越多。如果要啟動(dòng)更多的線(xiàn)程(V1.x對(duì)應(yīng)的參數(shù)為max_connections,
V2.0為work_threads),可以適當(dāng)降低本參數(shù)值。
storage_ip_changed_auto_adjust = true# 這個(gè)參數(shù)控制當(dāng)storage server IP地址改變時(shí),集群是否自動(dòng)調(diào)整。注:只有在storage server進(jìn)程重啟時(shí)才完成自動(dòng)調(diào)整。
storage_sync_file_max_delay = 86400# V2.0引入的參數(shù)。存儲(chǔ)服務(wù)器之間同步文件的最大延遲時(shí)間,缺省為1天。根據(jù)實(shí)際情況進(jìn)行調(diào)整
storage_sync_file_max_time = 300# V2.0引入的參數(shù)。存儲(chǔ)服務(wù)器同步一個(gè)文件需要消耗的最大時(shí)間,缺省為300s,即5分鐘。
http.disabled=true# HTTP服務(wù)是否不生效 當(dāng)然編譯的時(shí)候我已經(jīng)把 with_httpd宏去掉了,
http.server_port=80# HTTP服務(wù)端口
# 下列參數(shù)只有 開(kāi)啟http服務(wù)才有用
http.check_alive_interval=30
http.check_alive_type=tcp
http.check_alive_uri=/status.html
http.need_find_content_type=true

 

storage.conf配置說(shuō)明:

disabled=false#配置是否生效
group_name=group1#storage所在組(卷)
bind_addr=192.168.6.100# 綁定IP,另一太 storage IP為 192.168.6.101
client_bind=true#bind_addr通常是針對(duì)server的。當(dāng)指定bind_addr時(shí),本參數(shù)才有效。
port=23000# 是storage 服務(wù)端口
connect_timeout=30# 連接超時(shí)時(shí)間,針對(duì)socket套接字函數(shù)connect
network_timeout=60# storage server 網(wǎng)絡(luò)超時(shí)時(shí)間,單位為秒。
heart_beat_interval=30# 心跳間隔時(shí)間,單位為秒
stat_report_interval=60# storage server向tracker server報(bào)告磁盤(pán)剩余空間的時(shí)間間隔,單位為秒。
base_path=/home/eric# base_path 目錄地址,根目錄必須存在 子目錄會(huì)自動(dòng)生成
# 會(huì)產(chǎn)生data(數(shù)據(jù)存儲(chǔ)地方)、 logs日志文件
max_connections=256# 最大連接數(shù)
buff_size = 256KB# 設(shè)置隊(duì)列結(jié)點(diǎn)的buffer大小。
work_threads=4# 工作線(xiàn)程數(shù)
disk_rw_separated = true# 磁盤(pán)IO讀寫(xiě)是否分離,缺省是分離的。
disk_reader_threads = 1# 針對(duì)單個(gè)存儲(chǔ)路徑的讀線(xiàn)程數(shù),缺省值為1
disk_writer_threads = 1# 針對(duì)單個(gè)存儲(chǔ)路徑的寫(xiě)線(xiàn)程數(shù),缺省值為1
sync_wait_msec=200# 同步文件時(shí),如果從binlog中沒(méi)有讀到要同步的文件,休眠N毫秒后重新讀取,0表示不休眠,立即再次嘗試讀取。
sync_interval=0# 同步上一個(gè)文件后,再同步下一個(gè)文件的時(shí)間間隔,單位為毫秒,0表示不休眠,直接同步下一個(gè)文件。
sync_start_time=00:00
sync_end_time=23:59# 允許系統(tǒng)同步的時(shí)間段 (默認(rèn)是全天) 。一般用于避免高峰同步產(chǎn)生一些問(wèn)題而設(shè)定,相信sa都會(huì)明白。
write_mark_file_freq=500# 把storage的mark文件定期同步到磁盤(pán)的時(shí)間間隔,單位為秒
store_path_count=1# 存放文件時(shí)storage server支持多個(gè)路徑(例如磁盤(pán))。這里配置存放文件的基路徑數(shù)目,通常只配一個(gè)目錄。
store_path0=/home/eric# 逐一配置store_path個(gè)路徑,索引號(hào)基于0。注意配置方法后面有0,1,2 ......,需要配置0到store_path - 1。
# 如果不配置base_path0,那邊它就和base_path對(duì)應(yīng)的路徑一樣。
subdir_count_per_path=32# FastDFS存儲(chǔ)文件時(shí),采用了兩級(jí)目錄。這里配置存放文件的目錄個(gè)數(shù)
tracker_server=192.168.6.188:22122# tracker_server 的列表 要寫(xiě)端口的哦
log_level=info# 日志級(jí)別
run_by_group=# 運(yùn)行storage 用戶(hù)組
run_by_user=# 運(yùn)行storage 用戶(hù)
allow_hosts=*# 允許連接IP列表
file_distribute_path_mode=0
# 文件在data目錄下分散存儲(chǔ)策略。
# 0: 輪流存放
# 1: 隨機(jī)存儲(chǔ)
file_distribute_rotate_count=100# 當(dāng)上面的參數(shù)file_distribute_path_mode配置為0(輪流存放方式)時(shí),本參數(shù)有效。
#當(dāng)一個(gè)目錄下的文件存放的文件數(shù)達(dá)到本參數(shù)值時(shí),后續(xù)上傳的文件存儲(chǔ)到下一個(gè)目錄中
fsync_after_written_bytes=0# 當(dāng)寫(xiě)入大文件時(shí),每寫(xiě)入N個(gè)字節(jié),調(diào)用一次系統(tǒng)函數(shù)fsync將內(nèi)容強(qiáng)行同步到硬盤(pán)。0表示從不調(diào)用fsync
sync_log_buff_interval=10# 同步或刷新日志信息到硬盤(pán)的時(shí)間間隔,單位為秒
sync_binlog_buff_interval=60# 同步binglog(更新操作日志)到硬盤(pán)的時(shí)間間隔,單位為秒
sync_stat_file_interval=300# 把storage的stat文件同步到磁盤(pán)的時(shí)間間隔,單位為秒。
thread_stack_size=512KB# 線(xiàn)程棧的大小。FastDFS server端采用了線(xiàn)程方式。
# 線(xiàn)程棧越大,一個(gè)線(xiàn)程占用的系統(tǒng)資源就越多。
upload_priority=10
本storage server作為源服務(wù)器,上傳文件的優(yōu)先級(jí),可以為負(fù)數(shù)。值越小,優(yōu)先級(jí)越高。這里就和 tracker.conf 中store_server= 2時(shí)的配置相對(duì)應(yīng)了
if_alias_prefix=
check_file_duplicate=0 # 是否檢測(cè)上傳文件已經(jīng)存在。如果已經(jīng)存在,則不存在文件內(nèi)容,建立一個(gè)符號(hào)鏈接以節(jié)省磁盤(pán)空間?!〗Y(jié)合 fastdfh使用的。 1是檢測(cè),0是不檢測(cè),我們不使用fastdfh 當(dāng)然 0 
key_namespace=FastDFS# 當(dāng)上個(gè)參數(shù)設(shè)定為1 或 yes時(shí) (true/on也是可以的) , 在FastDHT中的命名空間
keep_alive=0# 與FastDHT servers 的連接方式 (是否為持久連接) 

# 下面是http的配置了就不多說(shuō)了
http.disabled=true
http.domain_name=
http.server_port=80
http.trunk_size=256KB
http.need_find_content_type=true

 

 問(wèn)題:

編譯安裝nginx需要pcre包,未安裝會(huì)有如下提示:

分布式文件系統(tǒng)FastDFS如何做到高可用

./configure: error: the HTTP rewrite module requires the PCRE library.You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

需要安裝pcre的devel包,pcre-devel。使用yum安裝即可:(以下命令還帶有ssl、zlib等依賴(lài)的安裝)

yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel


網(wǎng)頁(yè)題目:分布式文件系統(tǒng)FastDFS如何做到高可用
分享路徑:http://www.muchs.cn/article2/gciooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、定制網(wǎng)站網(wǎng)站策劃、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化