別問我在哪里
也許我早已不是我自己,別問我在哪里,我一直在這里。
突然不知道說些什么了...
初識 FastDFS
記得那是我剛畢業后進入的第一家公司,一個技術小白進入到當時的項目組后,在開發中上傳用戶頭像調用了一個據說是叫 FastDFS 的東西,我並不懂是什么,只知道是一個文件服務器,據說還是在 Linux 上部署的,還是多台服務器什么的,還是切片存儲、說京東用的就是,反正很厲害的樣子,我其實並接觸不到這玩意兒,我的任務也只是調用大神們封裝好的接口就行了,這可能是我第一次和 FastDFS 的第一次親密接觸。
后來不知道為什么,當時的文件服務器老是出問題,每次圖片下載不下來我就低聲下氣的去找運維說:文件又下載不了了,老大讓你重啟一下 Storage 服務器
。這時候我也並不知道 Storage服務器
是什么鬼,反正就好像項目一出問題都是程序猿的錯,真特么的!!!
FastDFS is an open source high performance distributed file system (DFS). It's major functions include: file storing, file syncing and file accessing, and design for high capacity and load balance.
翻譯:FastDFS 是一個開源的高性能分布式文件系統(DFS)。 它的主要功能包括:文件存儲,文件同步和文件訪問,以及高容量和負載平衡。
這是余慶老師在他的 Github 上介紹關於 FastDFS 這個開源項目的描述。說的很明白了,這是一個高性能的輕量級開源分布式文件系統,解決了我們日常項目中眾所周知的文件存儲性能問題,幾乎適合市面上所有項目使用,據說好多家你知道的大公司也在使用,甚至你使用的各大網盤公司也在使用(盡管最近多家網盤公司關閉了),反正就是特別好用。感謝余慶老師對開源世界的無私奉獻,這是余老師的 GitHub 地址: https://github.com/happyfish100/fastdfs
試着簡單了解一下
大家都在用,肯定錯不了。正好最近公司想搭建自己的文件服務器,好像據說是原來用的七牛產生了巨額流量費用,領導安排了解一下這個開源分布式文件系統。了解一個東西,我們就要進入她的內部,人也一樣。那我們首先來看一下他的內部是怎么工作或者說設計的吧!
FastDFS 系統有三個角色:跟蹤服務器(Tracker Server)、存儲服務器(Storage Server)和
客戶端(Client)。
- Tracker Server: 跟蹤服務器,主要做調度工作,起到均衡的作用;負責管理所有的 storage server
和 group,每個 storage 在啟動后會連接 Tracker,告知自己所屬 group 等信息,並保持周期性心跳。 - Storage Server:存儲服務器,主要提供容量和備份服務;以 group 為單位,每個 group 內可以有多台 storage server,數據互為備份。
- Client:客戶端,上傳下載數據的服務器,也就是我們自己的項目所部署在的服務器。
這里免不了放一張余慶老師介紹 FastDFS 的 PPT 中的一張架構圖,清晰的說明了上述職責及關系:
上述架構優點:1.高可靠性:無單點故障 2.高吞吐性:只要 Group 足夠多,數據流量將足夠分散。
那么怎么上傳下載以及同步文件這么操作呢?我在這就不詳細說全部流程了,大概上傳流程就是客戶端發送上傳請求到Tracker Server
服務器,接着Tracker Server
服務器分配group
和Storage Server
,當然這是有一定規則的,選擇好Storage Server
后再根據一定規則選擇存儲在這個服務器會生成一個file_id
,這個file_id
包含字段包括:storage server ip、文件創建時間、文件大小、文件 CRC32 校驗碼和隨機數;每個存儲目錄下有兩個 256 * 256 個子目錄,后邊你會知道一個Storage Server
存儲目錄下有好多個文件夾的,storage 會按文件file_id
進行兩次 hash ,路由到其中一個子目錄,然后將文件存儲到該子目錄下,最后生成文件路徑:group 名稱、虛擬磁盤路徑、數據兩級目錄、file_id和文件后綴就是一個完整的文件地址。
可能我理解的也不是很徹底,下載、同步操作我不寫了,這里有一篇文章 分布式文件系統FastDFS設計原理 講解的很詳細,我就不班門弄斧了,大家可以點擊去看看。
下面我要做什么?
接下來我可能會安裝配置一下 FastDFS 服務,試着搭建一個分布式文件服務器,我試着把整體的詳細步驟都記錄下來,對以后項目中使用做技術儲備或者說讓自己以后翻起來也簡單一些。可能有時候說不定就幫助到你了...
我的搭建環境是:
- 操作系統: CentOS 7 或 CentOS 6.8
- FastDFS: fastdfs-5.05 、 fastdfs-nginx-module-v1.16 、 libfastcommon-v1.0.7
- Nginx : nginx-1.10.1
應該都是截至目前最新版本了,可能和你網上能搜到的 4.05 、4.06 甚至 2.? 的版本步驟不一樣,我大概會分下面兩篇具體的文章來記錄這個過程:
我保證這也行是目前 FastDFS 最新最穩定最簡單坑最少的一個配置安裝部署教程了。期間我也會把我踩的坑都放出來,我保證大家照着做就幾乎不會有坑。其實我在寫這篇文章的時候已經踩了好多坑了,哈哈...
總結一下
FastDFS 是一個由 C 語言實現的開源輕量級分布式文件系統,作者余慶(happyfish100),支持 Linux、FreeBSD、AID 等 Unix 系統,解決了大數據存儲和讀寫負載均衡等問題,適合存儲 4KB~500MB 之間的小文件,如圖片網站、短視頻網站、文檔、app 下載站等,UC、京東、支付寶、迅雷、酷狗等都有使用。
再次感謝余慶老師對開源世界的無私奉獻,這是余老師的 GitHub 地址: https://github.com/happyfish100/