本文目錄:
- 一、前言
- 二、FastDFS介紹
- 三、FastDFS下載安裝
- 四、配置tracker與storage
- 五、測試
- 六、fastdfs-nginx-module安裝配置
- 七、Storage的nginx安裝配置
- 八、Storage的其他配置
- 九、Tracker的nginx的配置
- 十、nginx下測試
一、前言:
本文實現了FastDFS的安裝,測試
系統環境:ubantu16.04
FastDFS版本:5.1.2
二、FastDFS介紹
FastDFS是一個由C語言實現的開源的輕量級分布式文件系統,它對文件進行管理,功能包括:文件存儲,文件同步,文件訪問(文件上傳,下載)等;解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務。如相冊網站,視頻網站等等。
同類的分布式文件還有谷歌的GFS,HDFS(Hadoop),TFS(淘寶)
FastDFS有兩個角色:Tracker(跟蹤器),Storage(存儲節點)
Tracker:主要做調度作用,起到負載均衡的作用;負責管理所有的Storage和Group,每一個Storage再啟動后會連接Tracker,告知自己所屬的Group,並保持周期心跳
Storage:存儲節點,主要提供容量和備份服務;以Group為單位,每個Group內可以有多台Storage,數據互相備份。
官方提供的架構圖:

本文架構是一台服務器:Tracker,Storage(為同一Group)
三、FastDFS的安裝(每台服務器都要安裝,這里只有一台)
1、下載安裝libfastcommon
由於fastdfs5.0.5依賴libfastcommon,先安裝libfastcommon
下載:github地址:https://github.com/happyfish100/libfastcommon 下載之后,將其壓縮為gzip格式的文件
將文件上傳到/home/suer/software/ 目錄下
解壓libfastcommon,命令:tar -zxvf libfastcommon-master.tar.gz
編譯,進入libfastcommon-master目錄,命令:cd libfastcommon
sudo ./make.sh

安裝,命令:sudo ./make.sh install

顯示如上圖,libfastcommon 安裝成功
2、下載安裝FastDFS
下載,網址: https://github.com/happyfish100/fastdfs
解壓FastDFS,命令:
tar -zxvf fastdfs-master.tar.gz
編譯,進入fastfds-master目錄,命令:
cd fastdfs-master ./make.sh

安裝,命令:
./make.sh install

顯示如上圖,FastDFS安裝成功
四、配置Tracker與Storage
FastDFS安裝成功后,會在/etc目錄下會有個fdfs目錄,進入fdfs,會發現三個.sample后綴的示例文件。
1、配置Tracker服務器(本文使用192.168.64.141)
在/etc/fdfs目錄下,修改tracker.conf,命令:
cp tracker.conf.sample tracker.conf vim tracker.conf

打開tracker.conf,修改如下處:
# the base path to store data and log files base_path=/data/fastdfs/tracker
當然前提是,首先要創建/data/fastdfs/tracker目錄,命令:
mkdir -p /data/fastdfs/tracker
修改保存, 啟動tracker服務,命令:
fdfs_trackerd /etc/fdfs/tracker.conf start
類似的命令,關閉tracker服務:
fdfs_trackerd /etc/fdfs/tracker.conf stop
啟動tracker服務后,查看監聽,命令:
netstat -unltp|grep fdfs

tracker默認端口22122
查看/data/fastdfs/tracker目錄文件,發現多出兩個文件,用來存放數據和日志的

至此tracker跟蹤器安裝成功。
2、配置Storage服務器(192.168.64.141)
兩台服務器,同樣進入/etc/fdfs目錄下,命令:
cp storage.conf.sample storage.conf vim storage.conf

打開storage.conf,修改如下處:
# the base path to store data and log files base_path=/data/fastdfs/storage # store_path#, based 0, if store_path0 not exists, it's value is base_path # the paths must be exist store_path0=/data/fastdfs/storage # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address #配置tracker跟蹤器ip端口 tracker_server=192.168.64.141:22122
當然前提是,首先要創建/data/fastdfs/storage目錄,命令:
mkdir -p /data/fastdfs/storage
修改保存后,啟動storage服務,命令:可能會有點慢
fdfs_storaged /etc/fdfs/storage.conf start
啟動有錯誤,可以通過/data/fastdfs/storage/logs查看
查看/data/fastdfs/storage下文件內容,生成logs、data兩個目錄

查看下端口監聽,命令:
netstat -unltp|grep fdfs

storage默認端口23000
至此Storage存儲節點安裝成功。
所有存儲節點都啟動之后,可以在任一存儲節點上使用如下命令查看集群的狀態信息:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
通過上兩圖可以看到,storage都為Active,配置成功
五、測試上傳文件
三台服務器隨便選擇一台服務器,這里我選擇192.168.7.44服務器
同樣進入/etc/fdfs目錄,編譯client.conf,命令如下:
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf vim /etc/fdfs/client.conf

修改如下:
# the base path to store log files base_path=/data/fastdfs/client # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address #配置tracker跟蹤器ip端口 tracker_server=192.168.64.141:22122
同樣前提是,首先要創建/data/fastdfs/client目錄,命令:
mkdir -p /data/fastdfs/client
上傳/opt目錄的一張圖片(名為:14.jpg),命令:
fdfs_test /etc/fdfs/client.conf upload /home/suer/zhsq/20180910173729.jpg

如上圖,上傳成功,分別進入兩台storage服務器目錄/var/log/fdfs/storage/data/00/00下,都可以發現,文件保存成功

至此,文件上傳測試成功。
六、fastdfs-nginx-module安裝配置
a、下載,網址: https://github.com/happyfish100/fastdfs-nginx-module
b、解壓fastdfs-nginx-module-master,命令:tar -zxvf fastdfs-nginx-module-master.tar.gz
c、配置config文件,命令:
cd /opt/fastdfs/fastdfs-nginx-module/src vim config
修改如下:不修改后面編譯nginx會報錯
找到下面一行包含有 local 字眼去掉
e、復制 fastdfs-nginx-module 源碼中的配置文件到/etc/fdfs 目錄, 並修改,命令:
進入fastdfs-nginx-module/src目錄下,復制mod_fastdfs.conf文件到 /etc/fdfs目錄,進入/etc/fdfs目錄,修改mod_fastdfs.conf配置文件
cd fastdfs-nginx-module/src cp mod_fastdfs.conf /etc/fdfs cd /etc/fdfs vim mod_fastdfs.conf
修改如下三處:
tracker_server=192.168.7.73:22122 # tracker服務IP和端口
url_have_group_name=true # 訪問鏈接前綴加上組名
store_path0=/data/fastdfs/storage # 文件存儲路徑
修改保存。
六、fastdfs-nginx-module安裝配置
如果沒有nginx,就安裝nginx進行下面的配置
a、Nginx安裝依賴如下(gcc/pcre/zlib/openssl)插件,先要安裝如下插件,命令:
apt-get install openssl libssl-dev apt-get install libpcre3 libpcre3-dev apt-get install zlib1g-dev apt-get install build-essential
b、下載nginx,命令
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz

c、解壓,命令:
tar -zxvf nginx-1.10.1.tar.gz

d、編譯配置,命令:
- 注意最后一行,配置fastdfs-nginx模塊的路徑(這個路徑根據自己實際情況而定)
cd nginx-1.10.1 ./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/local/nginx/nginx.pid \ --lock-path=/var/lock/nginx/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --add-module=/opt/fastdfs/fastdfs-nginx-module/src

e、編譯安裝,命令:
make && make install
f、啟動,命令:
/usr/local/nginx/sbin/nginx

我這里啟動報錯,找不到那個目錄,於是手動創建,再啟動
mkdir -p /var/temp/nginx/client

nginx默認端口80,查看命令:
netstat -anp|grep 80

如上圖,至此nginx安裝成功
還有一種情況,就是已經安裝了nginx,那么我們應該先去查看nginx的版本,命令是:nginx -V

如果是apt-get直接安裝的,就沒有相應的源碼包,可以去nginx官網下載相應的版本
完了之后解壓,可以重新編譯,命令是:
sudo ./configure --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads --add-module=/home/suer/software/fastdfs-nginx-module-master/src
注意加粗的地方,這個是加入新的fastdfs-nginx-module-master進行編譯。執行這個命令之后,可能會報錯

此時,應該更新一下安裝包,命令是:sudo apt-get update
然后執行命令 sudo agt-get install gcc,sudo apt-get install libpcre3 libpcre3-dev,安裝這些需要的包
再一次執行 sudo ./configure這個命令,看是否沒有問題
我有報錯是
![]()
於是,sudo apt-get install libxml2 libxml2-dev libxslt-dev,sudo apt-get install libgd2-xpm-dev,sudo apt-get install libgeoip-dev
安裝了一大批軟件包,終於編譯沒有問題了sudo make,單數后面還是不能make成功
只能卸載原來的nginx
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/local/nginx/nginx.pid \ --lock-path=/var/lock/nginx/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --add-module=/home/suer/software/fastdfs-nginx-module-master/src
sudo make&&sudo make install
使用sudo /usr/local/nginx/sbin/nginx -t,看是否nginx啟動成功。

我這里啟動報錯,找不到那個目錄,於是手動創建,再啟動
mkdir -p /var/temp/nginx/client

nginx默認端口80,查看命令:
netstat -anp|grep 80

如上圖,至此nginx安裝成功
配置軟鏈接
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
現在就可以不用路徑直接輸入nginx啟動。
八、Storage的其他配置
復制 FastDFS 的部分配置文件到/etc/fdfs 目錄,命令:
cd /opt/fastdfs/fastdfs-5.05/conf cp http.conf mime.types /etc/fdfs

配置nginx.conf文件,命令:
vim /usr/local/nginx/conf/nginx.conf
修改端口與/etc/fdfs/storage.conf 中的http.server_port=8888 相對應
在配置文件中加入如下內容:
location /group1/M00 {
root /data/fastdfs/storage/;
ngx_fastdfs_module;
}

注意事項:
8888 端口值是要與/etc/fdfs/storage.conf 中的http.server_port=8888 相對應,因為 http.server_port 默認為 8888,如果想改成 80,則要對應修改過來。
Storage 對應有多個 group 的情況下,訪問路徑帶 group 名,如/group1/M00/00/00/xxx,對應的 Nginx 配置為:
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
如查下載時如發現老報 404, 將 nginx.conf 第一行 user nobody 修改為 user root 后重新啟動。
保存,重啟nginx服務
/usr/local/nginx/sbin/nginx -s reload
九、跟蹤Tracker(192.168.64.141)服務器配置Ngnix
配置Nginx,設置tracker負載均衡
vim /usr/local/nginx/conf/nginx.conf
設置group負載均衡,設置nginx端口為8000
vim /usr/local/nginx/conf/nginx.conf
設置group負載均衡,設置nginx端口為8000

#設置 group1 的服務器
upstream fdfs_group1 {
server 192.168.7.149:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.7.44:8888 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 8000;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#設置 group 的負載均衡參數
location /group1/M00 {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://fdfs_group1;
expires 30d;
}
g、啟動nginx服務,查看啟動
/usr/local/nginx/sbin/nginx netstat -anp|grep 8000


測試
通過瀏覽器訪問
測試上傳后返回的文件ID為 fdfs_test /etc/fdfs/client.conf upload /home/suer/zhsq/20180910173729.jpg
用瀏覽通過Storage直接訪問:http://192.168.64.141/group1/M00/00/00/wKhAjVubY5OAQ9bvAACQ5k9ZMcA905.jpg
