一、背景html
FastDFS 是一款開源的、分佈式文件系統(Distributed File System),由淘寶開發平臺部資深架構師餘慶開發。該開源項目的主頁是 http://code.google.com/p/fastdfs 。能夠經過 fastdfs.sourceforge.net 下載。FastDFS論壇是 http://www.csource.org ,目前是指向 ChinaUnix 開源項目孵化平臺的一個板塊 FastDFS,網址爲 bbs.chinaunix.net/forum-240-1.html 。(摘自 http://blog.csdn.net/poechant/article/details/6977407)java
二、上傳流程linux
咱們能夠經過 FastDFS 對文件的上傳過程,來初步瞭解 FastDFS 的基本架構。首先客戶端 client 發起對 FastDFS 的文件傳輸動做,是經過鏈接到某一臺 Tracker Server 的指定端口來實現的,Tracker Server 根據目前已掌握的信息,來決定選擇哪一臺 Storage Server ,而後將這個Storage Server 的地址等信息返回給 client,而後 client 再經過這些信息鏈接到這臺 Storage Server,將要上傳的文件傳送到給 Storage Server上。nginx
上傳流程簡述:c++
下載流程簡述:vim
三、架構簡析centos
FastDFS 是包括一組 Tracker Server 和 Storage Server 的。Tracker Server 與 Storage Server 之間不直接通訊,其基本的信息由配置文件在系統啓動加載時獲知。多臺 Tracker Server 之間保證了 Tracker 的分佈式,Tracker Server 之間是對等的,防止了單點故障。 Storage Server 是分紅多個 Group,每一個 Group 中的Storage 都是互相備份的,也就是說,若是 Group1 有 Storage一、Storage二、Storage3,其容量分別是100GB、100GB、100GB,那麼 Group1 的存儲能力是 100GB,而不是 300GB,這就是互相備份的意思。進一步說,整個 Group 的存儲能力由該組中該儲能力最小的 Storage 決定。多個 Group 之間的存儲方式,能夠採用 round robin(輪訓)、load balanced(負載均衡)或指定 Group 的方式。瀏覽器
術語緩存
FastDFS兩個主要的角色:Tracker Server 和 Storage Server
Tracker Server:跟蹤服務器,主要負責調度storage節點與client通訊,在訪問上起負載均衡的做用,和記錄storage節點的運行狀態,是鏈接client和storage節點的樞紐。
Storage Server:存儲服務器,保存文件和文件的meta data(元數據)
Group:文件組,也能夠稱爲卷。同組內服務器上的文件是徹底相同的,作集羣時每每一個組會有多臺服務器,上傳一個文件到同組內的一臺機器上後,FastDFS會將該文件即時同步到同組內的其它全部機器上,起到備份的做用。
meta data:文件相關屬性,鍵值對(Key Value Pair)方式,如:width=1024, height=768。和阿里雲OSS的meta data類似。服務器
五、安裝環境準備
提示:本例安裝目標爲:一臺虛擬機(centos 7)安裝部署一個 tracker 和一個組 group1(其中包含兩個 storage)
linux 基礎環境:centos 7 minimal(官方歷史版本:http://vault.centos.org/)
相關源碼包(此處省略經過 ftp 傳送源碼包,有興趣的可移步至:)
linux 中須要事先準備相關程序(linux 聯網直接安裝)
yum -y install gcc (必須在最開始的環境裏就已經安裝了,不然上面的源碼包安裝過程會出錯)
yum -y install gcc-c++(必須在最開始的環境裏就已經安裝了,不然上面的源碼包安裝過程會出錯)
yum -y install vim (可選擇,文本編輯器)
perl-5.20.2
nginx 負載均衡環境部署先的依賴程序準備
六、文件夾初始化
建立 tracker 所需的文件夾 base_path:mkdir /opt/fastdfs_tracker
建立 storage所需的日誌目錄:mkdir /opt/fastdfs_storage_info (這個目錄是用來記錄 storage 同步文件的日誌)
建立 storage 存儲所需的文件目錄:mkdir /opt/fastdfs_storage_data (此目錄存儲文件)
七、 安裝 libfastcommon-1.0.7
解壓:tar -zxvf libfastcommonV1.0.7.tar.gz
進入安裝文件夾:cd libfastcommon-1.0.7
依次執行 make 命令:./make.sh 和 ./make.sh install
從安裝記錄能夠看出:安裝路徑爲 /usr/lib64,可是FastDFS主程序設置的默認安裝目錄是lib目錄:/usr/local/lib,因此要建立鏈接:
八、安裝 FastDFS-5.0.5
解壓 tar 包:tar -zxvf FastDFS_v5.05.tar.gz
進入安裝文件夾:cd FastDFS
依次執行 make 命令:./make.sh 和 ./make.sh install
安裝過程沒有錯誤提示,再檢查 /etc/fdfs 目錄中是否含有如下文件,若是有則安裝成功:
九、配置 tracker
9.1 進入 /etc/fdfs 文件夾,執行以下命令: cp tracker.conf.sample tracker.conf
9.2 編輯 tracker.conf 文件:vim tracker.conf
9.3 具體配置信息:
a. disabled=false # 啓用配置文件
b. port=22122 # 設置 tracker 端口好,通常採用默認端口 22122
c. base_path=/opt/fastdfs_tracker # 設置 tracker 的數據文件和日誌目錄
d. http.server_port=80 # fastdfs5.0.5版本沒有,保險起見,這裏設置成 80 端口
其餘配置信息保持默認,不用動。
9.4 啓動 tracker: /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
檢測是否啓動成功:
方法1: netstat -unltp|grep fdfs ,看 22122 端口監聽狀況
方法2: 經過命令查看 tracker 啓動日誌:tail -100f /opt/fastdfs_tracker/logs/trackerd.log
9.5 若是成功啓動 tracker,將啓動命令添加到服務器的開機啓動配置中:
vim /etc/rc.d/rc.local
在文本中添加這行,並保存:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
十、配置 stroage(和 trcker 配置相似)
10.1 進入 /etc/fdfs 文件夾,執行命令: cp storage.conf.sample storage.conf
10.2 編輯 storage.conf 文件,執行命令: vim storage.conf
10.3 具體配置信息:
a. disabled=false #啓用配置文件
b. group_name=group1 #組名,這裏本例只配置一組,因此命名爲 group1
c. port=23000 #這裏設置 storage 端口號,23000是默認端口,同一個組的 storage 端口號必須一致
d. base_path=/opt/fastdfs_storage_info #記錄 storage 日誌(預先已經建立的文件夾)
e. store_path_count=1 #存儲的路徑個數,個數須要和 store_path 的個數一致
f. store_path0=/opt/fastdfs_storage_data #存儲路徑,這裏是一個 group1 組配置了兩個 storage
store_path1=/opt/fastdfs_storage_data
g. tracker_server=192.168.25.131:22122 # tracker 服務器的 ip 和端口號,本 ip 是本 linux的 ip
h. http.server_port=80 # 設置 http 端口號,fastdfs-5.0.5 這個版本已經不用配置,保險起見,就配置一下吧
10.4 啓動 tracker:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
檢測是否啓動成功:
方法1: netstat -unltp|grep fdfs ,看 23000 端口監聽狀況(配置的是 什麼端口就監聽哪一個端口)
方法2: 經過命令查看 tracker 啓動日誌:tail -100f /opt/fastdfs_storage_info/logs/storage.log
啓動成功以後,能夠經過 fdfs_monitor 查看集羣狀況:stroage 是否已經註冊到服務器中:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf # 查看192.168.25.131:23000 是 「 ACTIVE 」狀態便可
10.5 啓動沒有問題,則將 stroage 啓動命令配置到服務器啓動項裏: vim /etc/rc.d/rc.local
添加這行命令,並保存: /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
===================================分割線====================================
以上安裝配置步驟就是 fastdfs 的配置。
storage 中安裝 nginx 目的是爲了提供 http 的訪問服務,同時解決 group 和 storage 同步延遲問題,
tracker 中安裝 nginx 目的是爲了提供 http 訪問的反向代理、負載均衡及緩存服務。
===================================分割線====================================
十一、nginx 安裝前的環境準備
yum install -y gcc # 前面步驟已安裝,略過
yum install -y gcc-c++ # 前面步驟已安裝,略過
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
十二、 在 storage 中安裝 nginx
12.1 建立 nginx 默認安裝文件夾: mkdir /usr/local/nginx
12.2 解壓 tar 包:
tar -zxvf nginx1.7.8.tar.gz # 獲得 nginx-1.7.8 文件目錄
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz # 獲得 fastdfs-nginx-module 文件目錄
12.3 修改 fastdfs-nginx-module 文件目錄中的 config 文件:
cd /fastdfs-nginx-module/src
vim config
將 CORE_INCS中 的參數路徑修改一下,local 所有不要: CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
12.4 創建軟鏈接,在第七步驟中已經建立,可略過:
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so (第七步驟中已經建立,可略過)
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so (第七步驟中已經建立,可略過)
12.5 進入nginx 安裝文件夾:cd nginx-1.7.8
執行命令:./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src
備註:執行命令中的 add-module 參數爲 fastdfs-nginx-module 文件目錄路徑,這裏是 /usr/local/src 目錄下的。
命令執行完畢以後,依次執行 make 和 make install,沒有錯誤提示表示安裝成功。
12.6 執行命令 cd /usr/local/nginx/conf, 編輯 vim nginx.conf 文件:
在 http 語句塊中將 listen 修改爲:listen 80;
在 server 語句塊中添加:
location /group1/M00 {
root/fdfs/storage/data;
ngx_fastdfs_module;
}
注意:這裏 group 組名是上面配置的 group1,要和第 10 步驟的 10.3 步驟中的配置組信息一致
若是 nginx 成功啓動,瀏覽器不能訪問,就在 nginx.conf 這個配置文件中,把第一行的註解打開,配置成:user root; 便可。
12.7 執行命令:cd /usr/local/rsrc/FastDFS/conf ,將 conf 文件夾目錄下的 http.conf 和 mime.types 複製到 /etc/fdfs/ 下,
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
若是不執行這個操做,啓動 nginx 會報異常
12.8 執行命令:cd/usr/local/rsrc/fastdfs-nginx-module/src
將 conf 文件夾下的 mod_fastdfs.conf 文件複製到 /etc/fdfs/下:cp mod_fastdfs.conf /etc/fdfs/
12.9 在 /etc/fdfs/ 文件目錄下,打開編輯:vim mod_fastdfs.conf
a. base_path=/opt/fastdfs_storage_info # 保存日誌目錄
b. tracker_server=192.168.25.131:22122 # tracker的ip和端口
c. storage_server_port=23000 # storage服務器的端口號
d. group_name=group1 #當前服務器的 group名稱
e. url_have_group_name= true # 文件 url中是否有 group名稱
f. store_path_count=2 #存儲路徑個數,必須和 下面的store_path個數一致
g. store_path0=/opt/fastdfs_storage_data #文件存儲路徑
store_path1=/opt/fastdfs_storage_data #本例設置了兩個stroage,和第 10 步驟的 10.3 步驟配置一致
h. http.need_find_content_type=true #從文件擴展名查找文件類型,這個配置 fastdfs-5.0.5沒有,保險起見,仍是配置吧
i. group_count= 1 # 設置組的個數 這裏設置了一個組 group1 因此配置爲 1
j. 在配置信息的最後,將註解的 group 信息展開,這裏設置的是一個組,因此只配置一個:
注意組的名稱 端口 存儲路徑個數 和存儲路徑
12.10 建立軟鏈接: ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/M00
12.11 啓動 nginx:/usr/local/nginx/sbin/nginx
提示:/usr/local/nginx/sbin/nginx -s stop # 中止nginx
檢查是否啓動成功:netstat -anp | grep 80,若是有寬口衝突,也能夠檢測到,kill -9 對應的pid 便可。
啓動成功只會提示一個 pid,須要本身經過瀏覽器驗證。
常見問題:
若是上面配置都完整無誤,瀏覽器仍是沒法訪問,則能夠 ping 一下網絡,再 telnet 一下端口,頗有多是防火牆的問題:
添加開放端口 firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,沒有此參數重啓後失效)
刪除開放端口 firewall-cmd --zone=public --remove-port=80/tcp --permanent
添加或者刪除開放端口以後須要更新防火牆規則: firewall-cmd --reload
查看全部打開的端口: firewall-cmd --zone=public --list-ports 或者 firewall-cmd --list-services
顯示防火牆狀態是否運行:firewall-cmd --state 或者 systemctl status firewalld.service
用了一天時間,折騰好幾回,又是重裝系統又是查資料的,感受能這麼細緻的講解的真很少,因而就想把這個心得寫下來,讓讀者們少走坑。
經過 java 代碼測試一番,成功!
1三、tracker 中安裝 nginx
待續…