前言:該篇博客需要使用到的安裝包有:FastDFS_v5.08.tar.gz,fastdfs-nginx-module_v1.16.tar.gz,libfastcommon-master.zip,nginx-1.10.0.tar.gz(這四個是必須的),若沒有請自行下載。或者聯繫作者微信免費提供:微信暱稱 unhejing
1.安裝依賴
(1)GCC用來對C語言代碼進行編譯運行(FastDFS是由c語言寫的),使用yum命令安裝:
sudo yum -y install gcc
(2)安裝unzip工具(用於解壓安裝包)
sudo yum install -y unzip zip
(3)安裝libevent
sudo yum -y install libevent
(4)安裝Nginx所需依賴
sudo yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
(5)安裝libfastcommon-master(這個沒有yum包,只能通過編譯安裝)
unzip libfastcommon-master.zip
進入解壓完成的目錄:
cd libfastcommon-master
編譯並且安裝:
sudo ./make.sh
sudo ./make.sh install
由此結束,所有依賴都安裝完了,接來下是安裝FastDFS
2. 安裝FastDFS
(1)編譯安裝(解壓安裝包)
tar -xvf FastDFS_v5.08.tar.gz
(2)進入解壓目錄
cd FastDFS
(3)編譯安裝
sudo ./make.sh
sudo ./make.sh install
(4)校驗安裝結果
1)安裝完成,我們就可以在`/etc/init.d/`目錄,通過命令`ll /etc/init.d/ | grep fdfs`,如圖:
fdfs_trackerd 是tracker啓動腳本
fdfs_storaged 是storage啓動腳本
2) 配置文件在/etc/fdfs
tarcker.conf.sample 是tracker的配置文件模板
storage.conf.sample 是storage的配置文件模板
client.conf.sample 是客戶端的配置文件模板
3.啓動tracker
編輯tracker配置
(1)模板文件進行賦值和重命名:
cd /etc/fdfs
sudo cp tracker.conf.sample tracker.conf
(2)編輯配置文件
sudo vim tracker.conf
指定日誌輸出目錄:base_path=/home/fastdfs/tracker
(3) 創建目錄
sudo mkdir -p /home/fastdfs/tracker
(4)啓動tracker
可以使用 sh /etc/init.d/fdfs_trackerd 啓動,不過安裝過程中,fdfs已經被設置爲系統服務,我們可以採用熟悉的服務啓動方式
sudo service fdfs_trackerd start
# 啓動fdfs_trackerd服務,停止用stop
(5)設置開機自啓
sudo chkconfig fdfs_trackerd on
4.啓動storage
編輯storage配置
(1)模板文件進行賦值和重命名:
cd /etc/fdfs
sudo cp storage.conf.sample storage.conf
(2)編輯配置文件
sudo vim storage.conf
指定日誌輸出目錄:
base_path=/home/fastdfs/storage # storage的數據和日誌存放目錄
store_path0=/home/fastdfs/storage # storage的上傳文件存放路徑
tracker_server=192.168.56.101:22122 # tracker的地址
(3)創建目錄
sudo mkdir -p /home/fastdfs/storage
(4)啓動storage
sudo service fdfs_storaged start
(5)開機自啓
sudo chkconfig fdfs_storaged on
由此tracker和storage啓動完成,查看進程
ps -ef | grep fdfs
5.安裝Nginx及FastDFS模塊
(1)FastDFS的Nginx模塊
解壓:
tar -xvf fastdfs-nginx-module_v1.16.tar.gz
1)配置config文件
# 進入配置目錄
cd /home/fastdfs-nginx-module/src
# 修改配置
vim config
# 執行下面命令(將配置中的/usr/local改爲/usr):
:%s+/usr/local/+/usr/+g
2) 配置mod_fastdfs.conf
# 將src目錄下的mod_fastdfs.conf複製到 /etc/fdfs目錄:
sudo cp mod_fastdfs.conf /etc/fdfs/
# 編輯該文件
sudo vim /etc/fdfs/mod_fastdfs.conf
修改一下配置:
connect_timeout=10 # 客戶端訪問文件連接超時時長(單位:秒)
tracker_server=192.168.56.101:22122 # tracker服務IP和端口
url_have_group_name=true # 訪問鏈接前綴加上組名
store_path0=/home/fastdfs/storage # 文件存儲路徑
複製 FastDFS的部分配置文件到/etc/fdfs目錄
cd /home/FastDFS/conf/
cp http.conf mime.types /etc/fdfs/
6.安裝Nginx
(1)解壓
tar -xvf nginx-1.10.0.tar.gz
(2)配置
cd /home/nginx-1.10.0/
sudo ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/home/fastdfs-nginx-module/src
(3)編譯安裝
sudo make && sudo make install
(4)配置nginx整合fastdfs-module模塊
我們需要修改nginx配置文件,在/opt/nginx/config/nginx.conf文件中:
sudo vim /opt/nginx/conf/nginx.conf
在service下添加:
# 監聽域名中帶有group的,交給FastDFS模塊處理
location ~/group([0-9])/ {
ngx_fastdfs_module;
}
(5)啓動nginx
nginx # 啓動
nginx -s stop # 停止
nginx -s reload # 重新加載配置
綜上就是所有fastDFS所有的配置。
注:
1.所有 Storage 節點都啓動之後,可以在 Storage的任何 節點上使用如下命令查看集羣信息:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
2.集羣配置
說明:
192.168.31.51 group1 #需開啓storage和nginx,tracker服務不用啓動(配置成功後可通過http://192.168.31.51/group1/M00/00/XXXXX.jpg訪問)
192.168.31.52 group2 #需開啓storage和nginx,tracker服務不用啓動(配置成功後可通過http://192.168.31.52/group2/M00/00/XXXXX.jpg訪問)
192.168.31.46 tracker1 對應group1
192.168.31.47 tracker2 對應group2
(1)編輯每個storage服務器上的 mod_fastdfs.conf配置文件
vim /etc/fdfs/mod_fastdfs.conf
#修改內容
connect_timeout=10
#(51爲group1)、(52爲group2)--後期加入其他集羣直接複製該配置即可。只需修改分組,若是添加分組的話,需要修改其他storage服務器上的該配置文件。新增group和tracker。
group_name=group1 #當前storage的分組
tracker_server=192.168.31.46:22122
tracker_server=192.168.31.47:22122
url_have_group_name = true
store_path0=/home/fastdfs/storage
group_count=2 #設置分組數
#下面註釋打開並設置如下
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/fastdfs/storage
#store_path1=/home/yuqing/fastdfs1
# group settings for group #2
# since v1.14
# when support multi-group, uncomment following section as neccessary
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/home/fastdfs/storage
(2)配置跟蹤服務器的反向代理
1)安裝ngx_cache_purge模塊,ngx_cache_purge的作用:用於清除指定url的緩存(按需安裝,如果圖片會隨時更新則建議安裝,不經常更新則可以不用安裝)
下載地址:http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
2)安裝nginx,(編譯時不用添加fastdfs-nginx-module模塊,直接:sudo ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx即可)
3)配置nginx(部分配置如下),然後就可以訪問了192.168.31.46和192.168.31.47會自動代理到51,52storage存儲服務器上。記得打開端口!
#group1的服務設置
upstream fdfs_group1 {
server 192.168.31.51 weight=1 max_fails=2 fail_timeout=30s;
#server 192.168.156.8:8888 weight=1 max_fails=2 fail_timeout=30s;
}
#group2的服務設置
upstream fdfs_group2 {
server 192.168.31.52 weight=1 max_fails=2 fail_timeout=30s;
#server 192.168.156.10:8888 weight=1 max_fails=2 fail_timeout=30s;
}
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /group1/M00 {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#proxy_cache http-cache;
#proxy_cache_valid 200 304 12h;
#proxy_cache_key $uri$is_args$args;
#對應group1的服務設置
proxy_pass http://fdfs_group1;
expires 30d;
}
location /group2/M00 {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#proxy_cache http-cache;
#proxy_cache_valid 200 304 12h;
#proxy_cache_key $uri$is_args$args;
#對應group2的服務設置
proxy_pass http://fdfs_group2;
expires 30d;
}
location / {
root html;
index index.html index.htm;
}
}
4)VIP虛擬代理轉發到tracker。(目的是由一個請求地址,自動代理到其他tracker)
192.168.11.20用於轉發 nginx配置:
upstream fastdfs_tracker {
server 192.168.31.46 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.31.47 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location ~/group([0-9])/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://fastdfs_tracker;
}
}
3.若訪問日誌圖片報錯:
ERROR - file: /root/fastdfs/fastdfs-nginx-module/src/common.c, line: 877, stat file: /root/fastdfs/storage/data/00/00/wKgLGl4FZAeAbKLsAARRFe73PtQ404.png fail, errno: 13, error info: Permission denied
此問題是nginx權限造成的,在nginx配置文件頭部加上user root;即可,如圖:
4.java代碼上傳部分圖片報錯
java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components
引入依賴:
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-jpeg</artifactId>
<version>3.4.1</version>
</dependency>
未解決的疑問?
192.168.31.51(group1),192.168.31.51(group2) storage,這兩臺分別設置mod_fastdfs.conf爲group1和group2,並且關聯兩個tracker。那麼從192.168.31.46,192.168.31.47 兩個traker都可以訪問到group1和group2的資源,此種情況我認爲是正常。
但是我新建了一個192.168.11.26的文件服務器用於測試,tracker和storage,nginx都在同一臺服務器上,配置mod_fastdfs.conf與192.168.31.46,47,51,52這四臺服務器沒有任何相關的。此時上傳圖片正常也在此臺服務器上。但是此臺服務器竟然可以訪問192.168.31.51上group1的資源。從192.168.31.46,47,51,52這四臺上也能訪問192.168.11.26上的圖片資源。難道分組group相同,tracker不同也可以互相訪問嗎?難道可以直接通過group相同就互通?