天天看點

分布式檔案系統FastDFS如何做到高可用

FastDFS是用C語言編寫的一款開源的輕量級分布式檔案系統。它對檔案進行管理,功能包括:檔案存儲、檔案同步、檔案通路(檔案上傳、檔案下載下傳)等,解決了大容量存儲和負載均衡的問題。特别适合以檔案為載體的線上服務,如相冊網站、視訊網站等等。  FastDFS為網際網路量身定制,充分考慮了備援備份、負載均衡、線性擴容等機制,并注重高可用、高性能等名額,使用FastDFS很容易搭建一套高性能的檔案伺服器叢集提供檔案上傳、下載下傳等服務。

  Hadoop也是一個分布式檔案系統,hadoop是處理大資料的,什麼是大資料呢?就是海量資料。海量資料你一塊磁盤估計存不下,那麼就需要把資料存到多個磁盤上,還得統一管理,這時就需要一個分布式檔案系統來管理。FastDFS同樣也是這麼一個意思,圖檔我們有很多,但容量有上限,是以我們要把這些所有的圖檔存儲到多台伺服器上,還要進行統一管理,那麼就需要一個分布式檔案系統,很顯然那就是FastDFS了,FastDFS适合于存取圖檔(建議範圍:4KB < file_size <500MB)。

  FastDFS其實很早開始使用,但這次要作内訓,是以下面借鑒網友的部份内容結合實踐作總結,有些出處可能忘了 請多擔待。

  下面來看一張FastDFS的架構圖,如下圖所示。

  FastDFS架構包括Tracker server和Storage server。

  用戶端請求Tracker server進行檔案上傳、下載下傳,通過Tracker server排程最終由Storage server完成檔案上傳和下載下傳。Tracker server的作用是負載均衡和排程,通過Tracker server在檔案上傳時可以根據一些政策找到Storage server提供檔案上傳服務,可以将tracker稱為追蹤伺服器或排程伺服器。Tracker server跟蹤器和存儲節點都可以由一台或多台伺服器構成,跟蹤器和存儲節點中的伺服器均可以随時增加或下線而不會影響線上服務,其中跟蹤器中的所有伺服器都是對等的,可以根據伺服器的壓力情況随時增加或減少。Tracker負責管理所有的Storage和group,每個storage在啟動後會連接配接Tracker,告知自己所屬的group等資訊,并保持周期性的心跳,tracker根據storage的心跳資訊,建立group==>[storage server list]的映射表,Tracker需要管理的元資訊很少,會全部存儲在記憶體中;另外tracker上的元資訊都是由storage彙報的資訊生成的,本身不需要持久化任何資料,這樣使得tracker非常容易擴充,直接增加tracker機器即可擴充為tracker cluster來服務,cluster裡每個tracker之間是完全對等的,所有的tracker都接受stroage的心跳資訊,生成中繼資料資訊來提供讀寫服務。

  Storage server作用是檔案存儲,用戶端上傳的檔案最終存儲在Storage伺服器上,Storage server沒有實作自己的檔案系統而是利用作業系統的檔案系統來管理檔案,可以将storage稱為存儲伺服器。存儲系統由一個或多個組組成,組與組之間的檔案是互相獨立的,所有組的檔案容量累加就是整個存儲系統中的檔案容量。一個卷[Volume](組[group])可以由一台或多台存儲伺服器組成,一個組中的存儲伺服器中的檔案都是相同的,組中的多台存儲伺服器起到了備援備份和負載均衡的作用,資料互為備份,存儲空間以group内容量最小的storage為準,是以建議group内的多個storage盡量配置相同,以免造成存儲空間的浪費。

分布式檔案系統FastDFS如何做到高可用

  我們從上圖還能看到,Client端可以有多個,也就是同時支援多個用戶端對FastDFS叢集服務進行通路,Tracker是跟蹤器,負責協調Client與Storage之間的互動,為了實作高可用性,需要用多個Tracker來作為跟蹤器。Storage是專門用來存儲東西的,而且是分組進行存儲的,每一組可以有多台裝置,這幾台裝置存儲的内容完全一緻,這樣做也是為了高可用性,當現有分組容量不夠時,我們可以水準擴容,即增加分組來達到擴容的目的。另外需要注意的一點是,如果一組中的裝置容量大小不一緻,比如裝置A容量是80G,裝置B的容量是100G,那麼這兩台裝置所在的組的容量會以小的容量為準,也就是說,當存儲的東西大小超過80G時,我們将無法存儲到該組中了。Client端在與Storage進行互動的時候也與Tracker cluster進行互動,說的通俗點就是Storage向Tracker cluster進行彙報登記,告訴Tracker現在自己哪些位置還空閑,剩餘空間是多大。

  現給出一張檔案上傳的時序圖,如下圖所示:

分布式檔案系統FastDFS如何做到高可用

  從中可以看到,Client想上傳圖檔,它先向Tracker進行詢問,Tracker檢視一下登記資訊之後,告訴Client哪個storage目前空閑,Tracker會把IP和端口号都傳回給Client,Client在拿到IP和端口号之後,便不再需要通過Tracker,直接便向Storage進行上傳圖檔,Storage在儲存圖檔的同時,會向Tracker進行彙報,告訴Tracker它目前是否還留有剩餘空間,以及剩餘空間大小。彙報完之後,Storage将伺服器上存儲圖檔的位址傳回給Client,Client可以拿着這個位址進行通路圖檔。說得更加細緻一點,用戶端上傳檔案後存儲伺服器将檔案ID傳回給用戶端,此檔案ID用于以後通路該檔案的索引資訊。檔案索引資訊包括:組名,虛拟磁盤路徑,資料兩級目錄,檔案名,如下所示:

分布式檔案系統FastDFS如何做到高可用
組名:檔案上傳後所在的storage組名稱,在檔案上傳成功後由storage伺服器傳回,需要用戶端自行儲存。 虛拟磁盤路徑:storage配置的虛拟路徑,與磁盤選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。 資料兩級目錄:storage伺服器在每個虛拟磁盤路徑下建立的兩級目錄,用于存儲資料檔案。 檔案名:與檔案上傳時不同。是由存儲伺服器根據特定資訊生成,檔案名包含:源存儲伺服器IP位址、檔案建立時間戳、檔案大小、随機數和檔案拓展名等資訊。

  現給出一張檔案下載下傳的時序圖,如下圖所示:

分布式檔案系統FastDFS如何做到高可用

檔案下載下傳的步驟可以是:

1. client詢問tracker下載下傳檔案的storage,參數為檔案辨別(組名和檔案名)。 2. tracker傳回一台可用的storage。 3. client直接和storage通訊完成檔案下載下傳。

安裝元件

nginx+FastDFS+fastdfs-nginx-module

下載下傳下列最新的安裝包: 

fastdfs-master.zip:FastDFS源碼 

libfastcommon-master.zip:(從 FastDFS 和 FastDHT 中提取出來的公共 C 函數庫) 

fastdfs-nginx-module-master.zip:storage節點http服務nginx子產品 

nginx.tar.gz:Nginx安裝包

防火牆中打開tracker伺服器端口( 預設為 22122) 

shell> vi /etc/sysconfig/iptables 

添加如下端口行:

storage伺服器需要添加端口

重新開機防火牆: 

shell> service iptables restart

先将fastdfs-master.zip和libfastcommon-master.zip 上傳至所有伺服器的/opt檔案夾下

1. 解壓縮 unzip libfastcommon-master.zip

編譯安裝

2. cd libfastcommon-master

3. ./make.sh

4. ./make.sh install

5. 把/usr/lib64/libfastcommon.so檔案向/usr/lib/下複制一份 (32位才需要)

解壓縮unzip fastdfs-master.zip

安裝後在/usr/bin/目錄下有以fdfs開頭的檔案都是編譯出來的。

配置檔案都放到/etc/fdfs檔案夾

把/opt/fastdfs-master/conf目錄下的所有的配置檔案都複制到/etc/fdfs下。

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

修改/etc/fdfs/conf/tracker.conf檔案。

其它内容預設,有關配置說明參考文章後面補充内容。

在2台storage伺服器上配置storage服務,前題也是安裝libfastcommon和fastdfs。

修改/etc/fdfs/conf/storage.conf檔案。

隻編輯tracker伺服器上的client.conf

以上就是fastdfs的所有配置,下面分别啟動32服務上的tracker、storage和30和31上的storage。

重新開機使用指令:

檢查FastDFS Tracker Server是否啟動成功: 

ps -ef | grep fdfs_trackerd

停止:

/etc/init.d/fdfs_trackerd stop

設定tracker服務開機啟動

分布式檔案系統FastDFS如何做到高可用

有以上傳回内容說明已經上傳成功,但我們将url 在浏覽器上通路時會傳回404 是不允許直接通路的,是以我們需要用到下面的nginx代理來作web服務通路。

fastdfs-nginx-module 作用說明 

FastDFS 通過 Tracker 伺服器,将檔案放在 Storage 伺服器存儲,但是同組存儲伺服器之間需要進入檔案複制,有同步延遲的問題。

如果Tracker 伺服器将檔案上傳到了 192.168.80.30,上傳成功後檔案ID已經傳回給用戶端。此時 FastDFS 存儲叢集機制會将這個檔案同步到同組存儲192.168.80.31,在檔案還沒有複制完成的情況下,用戶端如果用這個檔案 ID 在 192.168.80.31 上取檔案,就會出現檔案無法通路的錯誤。

而 fastdfs-nginx-module 可以重定向檔案連接配接到源伺服器取檔案,避免用戶端由于複制延遲導緻的檔案無法通路錯誤

可以使用官方提供的nginx插件。要使用nginx插件需要重新編譯。

上傳fastdfs-nginx-module.tar.gz

1. 解壓插件壓縮包

2. 修改/opt/fastdfs-nginx-module/src/config檔案,把其中的local去掉。(最新的沒有local)

分布式檔案系統FastDFS如何做到高可用

将mod_fastdfs.conf 拷貝到fdfs下進行配置

分布式檔案系統FastDFS如何做到高可用
分布式檔案系統FastDFS如何做到高可用

安裝依賴包

上傳解壓nginx

cd nginx

分布式檔案系統FastDFS如何做到高可用
分布式檔案系統FastDFS如何做到高可用

 再進行

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

配置nginx

 vim /opt/nginx/conf/nginx.conf

分布式檔案系統FastDFS如何做到高可用
分布式檔案系統FastDFS如何做到高可用

 但上面的内容已經固定死了group1的M00,Storage 對應有多個 group 的情況下,通路路徑帶 group 名,如/group1/M00/00/00/xxx,在這裡改用:

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

ngx_fastdfs_module;

}

8888 端口值是要與/etc/fdfs/storage.conf 中的http.server_port=8888 相對應,因為 http.server_port 預設為 8888,如果想改成 80,則要對應修改過來。 

如查下載下傳時如發現老報 404, 将 nginx.conf 第一行 user nobody 修改為 user root 後重新啟動。

 防火牆中打開 Nginx 的 8888 端口 

vi /etc/sysconfig/iptables

添加:

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

重新啟動防火牆:

即在rc.local增加啟動代碼就可以了。

vi /etc/rc.local

增加一行 /opt/nginx/sbin/nginx

設定執行權限:

chmod 755 rc.local

shell> /opt/nginx/sbin/nginx

ngx_http_fastdfs_set pid=xxx

nginx重新開機指令為:

/opt/nginx/sbin/nginx -s reload

  通過浏覽器通路測試時上傳的檔案,測試上傳後傳回的檔案ID為:group1/M00/00/00/wKhQIFoKF3KAfw8wAABdrZgsqUU551_big.jpg,用浏覽通路的位址為:http://192.168.80.32:8888/group1/M00/00/00/wKhQIFoKF3KAfw8wAABdrZgsqUU551_big.jpg

注意: 千萬不要使用 kill -9 指令強殺 FastDFS 程序,否則可能會導緻 binlog 資料丢失。

   至此已經搭起了一個簡單的叢集模式,其中上面的配置需要根據實際情況進行調整。

tracker配置檔案說明:

分布式檔案系統FastDFS如何做到高可用
分布式檔案系統FastDFS如何做到高可用

storage.conf配置說明:

分布式檔案系統FastDFS如何做到高可用
分布式檔案系統FastDFS如何做到高可用

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

分布式檔案系統FastDFS如何做到高可用

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

分布式檔案系統FastDFS如何做到高可用

本文轉自歡醉部落格園部落格,原文連結http://www.cnblogs.com/zhangs1986/p/8268927.html如需轉載請自行聯系原作者

歡醉

繼續閱讀