FastDFS安裝手冊
系統: centOS 7.3
說明: 本文爲在黑馬上了課程之後 根據老師指導後安裝的
1、準備工作
1.1. 下載軟件:
http://sourceforge.net/projects/fastdfs/files/
1.2. 安裝gcc。命令:
yum install make cmake gcc gcc-c++
2、安裝libfastcommon
2.1 上傳libfastcommon-master.zip到/usr/local/software下
2.2 進行解壓libfastcommon-master.zip:
命令:
cd /usr/local/software
mkdir -p /usr/local/fast/
yum install -y unzip zip
unzip libfastcommon-master.zip -d /usr/local/fast/
2.3 進入目錄:
cd /usr/local/fast/libfastcommon-master/
2.4 進行編譯和安裝:
# 編譯
./make.sh
# 安裝
./make.sh install
安裝信息如下:
注意安裝的路徑:
也就是說,我們的libfastcommon默認安裝到了/usr/lib64/這個位置(如下: )。
[root@jsyfdev001 libfastcommon-master]# ./make.sh install
mkdir -p /usr/lib64
install -m 755 libfastcommon.so /usr/lib64
mkdir -p /usr/include/fastcommon
install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_bits.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h /usr/include/fastcommon
2.5 進行軟件創建。FastDFS主程序設置的目錄爲/usr/local/lib/,所以我們需要創建/ usr/lib64/下的一些核心執行程序的軟連接文件。
mkdir /usr/local/lib/
# 建立軟鏈
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
3、安裝FastDFS
3.1 進入到software下
cd /usr/local/software
解壓FastDFS_v5.05.tar.gz文件
命令如下:
cd /usr/local/software
tar -zxvf FastDFS_v5.05.tar.gz -C /usr/local/fast/
3.2 安裝編譯
命令如下:
cd /usr/local/fast/FastDFS/
# 編譯命令:
./make.sh
# 安裝命令:
./make.sh install
執行./make.sh install 安裝情況如下:
root@jsyfdev001 FastDFS]# ./make.sh install
mkdir -p /usr/bin
mkdir -p /etc/fdfs
cp -f fdfs_trackerd /usr/bin
if [ ! -f /etc/fdfs/tracker.conf.sample ]; then cp -f ../conf/tracker.conf /etc/fdfs/tracker.conf.sample; fi
mkdir -p /usr/bin
mkdir -p /etc/fdfs
cp -f fdfs_storaged /usr/bin
if [ ! -f /etc/fdfs/storage.conf.sample ]; then cp -f ../conf/storage.conf /etc/fdfs/storage.conf.sample; fi
mkdir -p /usr/bin
mkdir -p /etc/fdfs
mkdir -p /usr/lib64
cp -f fdfs_monitor fdfs_test fdfs_test1 fdfs_crc32 fdfs_upload_file fdfs_download_file fdfs_delete_file fdfs_file_info fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_upload_appender /usr/bin
if [ 0 -eq 1 ]; then cp -f libfdfsclient.a /usr/lib64; fi
if [ 1 -eq 1 ]; then cp -f libfdfsclient.so /usr/lib64; fi
mkdir -p /usr/include/fastdfs
cp -f ../common/fdfs_define.h ../common/fdfs_global.h ../common/mime_file_parser.h ../common/fdfs_http_shared.h ../tracker/tracker_types.h ../tracker/tracker_proto.h ../tracker/fdfs_shared_func.h ../storage/trunk_mgr/trunk_shared.h tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs
if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/client.conf /etc/fdfs/client.conf.sample; fi
3.3 採用默認安裝方式腳本文件說明: 、
3.3.1、服務腳本在:
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_trackerd
3.3.2、配置文件在:
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
3.3.3、命令行工具在/usr/bin/目錄下
查詢Fdfs_*的一些列執行腳本的命令如下
cd /usr/bin/ && ls | grep fdfs
可以在控制檯看到有以下輸出內容
[root@jsyfdev001 FastDFS]# cd /usr/bin/ && ls | grep fdfs
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
3.3.4 因爲FastDFS服務腳本設置的bin目錄爲/usr/local/bin/下,但是實際我們安裝在了/usr/bin/下面。
所以我們需要修改FastDFS配置文件中的路徑,也就是需要這個配置文件:
編輯storaged命令:
vim /etc/init.d/fdfs_storaged
進行全局替換命令(注意: 替換結束時,會提示有7處修改)
:%s+/usr/local/bin+/usr/bin
編輯trackerd命令:
vim /etc/init.d/fdfs_trackerd
進行全局替換命令
:%s+/usr/local/bin+/usr/bin
4、配置跟蹤器
4.1進入fdfs目錄
cd /etc/fdfs/
目錄配置跟蹤器文件,把tracker.conf.samp le文件進行cope一份:去修改tracker.conf文件
cp -a tracker.conf.sample tracker.conf
查詢copy文件是否成功
ls -l
ls -l之後控制如輸出接口如下:
[root@jsyfdev001 fdfs]# ls -l
total 28
-rw-r--r-- 1 root root 1461 Oct 22 20:54 client.conf.sample
-rw-r--r-- 1 root root 7829 Oct 22 20:54 storage.conf.sample
-rw-r--r-- 1 root root 7102 Oct 22 20:54 tracker.conf
-rw-r--r-- 1 root root 7102 Oct 22 20:54 tracker.conf.sample
4.2 修改tracker.conf文件
命令:
vim /etc/fdfs/tracker.conf
把base_path替換成我們自己的文件存放目錄
base_path=/fastdfs/tracker
注意:
對於tracker.conf配置文件參數解釋可以找官方文檔
地址爲: http://bbs.chinaunix.net/thread-1941456-1-1.html
4.3 最後我們一定要創建之前定義好的目錄, 也就是base_path = /fastdfs/tracker的目錄
命令:
mkdir -p /fastdfs/tracker
4.4 添加防火牆規則:
vim /etc/sysconfig/iptables
# 添加入站規則 注意: -A INPUT -j REJECT --reject-with icmp-host-prohibited行之止添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j
**注意:**這裏使用80和8080端口爲例。
一般添加到“-A INPUT -p tcp -m state --state NEW -m tcp–dport 22 -j ACCEPT”行的上面或者下面
切記不要添加到最後一行,否則防火牆重啓後不生效。
[root@jsyfdev001 fdfs]# vim /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
# FastDFS開放接口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
#重啓防火牆使配置生效
#systemctl restart iptables.service
#設置防火牆開機啓動
#systemctl enable iptables.service
# - --------------------以下爲拒絕接口-------------------
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
添加防火牆之後, 重啓防火牆
service iptables restart
# 或者以下命令(根據不同防火牆重啓)
systemctl restart iptables.service
4.5 啓動跟蹤器
查詢tracker 注意: 在此處是沒有任何文件的
cd /fastdfs/tracker/ && ls -l
啓動tracker命令: 初次啓動成功後會在/fastdbf/tracker/ 目錄下創建 data、logs倆個目錄
/etc/init.d/fdfs_trackerd start
查詢tracker 注意: 在此處會出現data,logs兩個目錄
cd /fastdfs/tracker/ && ls -l
注意: 樓主在此處運行fdfs_trackerd start沒有啓動, 如下(沒有遇到請忽略)
[root@jsyfdev001 tracker]# /etc/init.d/fdfs_trackerd start
Starting fdfs_trackerd (via systemctl): Warning: fdfs_trackerd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[ OK ]
如果遇到以下錯誤,請執行下面命令(沒有遇到請忽略)
systemctl daemon-reload
查看進程命令:
ps -ef | grep fdfs
停止tracker命令:
/etc/init.d/fdfs_trackerd stop
4.6 可以設置開機啓動跟蹤器:
命令如下:
vim /etc/rc.d/rc.local
加入配置:/etc/init.d/fdfs_trackerd start
5、配置FastDFS存儲
5.1
# 進入fdfs文件目錄:
cd /etc/fdfs/
# copy storage文件一份
cp storage.conf.sample storage.conf
5.2 修改storage.conf文件
命令:
vim /etc/fdfs/storage.conf
修改內容:
base_path=/fastdfs/storage
store_path0=/fastdfs/storage
tracker_server=ip:22122 #注意填寫ip
http.server_port=8888
5.3 創建存儲目錄:
mkdir -p /fastdfs/storage
5.4 打開防火牆:
注意: 此處和步驟4.4除了開放端口不同,基本相同,詳情請參考4.4
vim /etc/sysconfig/iptables
# 添加防火牆規則
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
service iptables restart
# 或者以下命令(根據不同防火牆重啓)
systemctl restart iptables.service
5.5 啓動存儲(storage)
命令:
# 啓動 初次啓動成功後會在/fastdfs/storage/ 目錄下創建 data、logs倆個目錄
ls -l /fastdfs/storage/
**注意:** 初次啓動時, data目錄創建較慢,請耐心等待
/etc/init.d/fdfs_storaged start
#關閉
/etc/init.d/fdfs_storaged stop
5.6 查看FastDFS storage 是否啓動成功
#命令
ps -ef | grep fdfs
並且我們進入到/fastdfs/storage/data/文件夾下會看到一些目錄文件(256*256)
cd /fastdfs/storage/data/ && ls
到此爲止我們的FastDFS環境已經搭建完成!
6、測試環境
6.1 我們先使用命令上傳一個文件。注意:是在tracker(跟蹤器)中上傳。
首先我們在跟蹤器裏copy一份client.conf文件。
cd /etc/fdfs/
cp client.conf.sample client.conf
6.2 編輯client.conf文件
vim /etc/fdfs/client.conf
修改內容:
base_path=/fastdfs/tracker
tracker_server=ip:22122 # 注意這裏填寫ip
6.3 我們找到命令的腳本位置,並且使用命令,進行文件的上傳:
[root@jsyfdev001 fdfs]# cd /usr/bin/
[root@jsyfdev001 bin]# ls | grep fdfs
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
6.4 使用命令fdfs_upload_file進行上傳操作:
首先,我們先看一下存儲器,進入到data下,在進入00文件夾 下,發現00文件夾下還有一堆文件夾,然後繼續進入00文件夾下,最終我們所 進入的文件夾爲:
[root@jsyfdev001 00]# ls -l /fastdfs/storage/data/00/00
total 0
然後,我們進行上傳操作,比如把之前的/usr/local/software/文件夾下的某一個 文件上傳到FastDFS系統中去,在跟蹤器中上傳文件
命令如下:
[root@jsyfdev001 local]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/software/FastDFS_v5.05.tar.gz
group1/M00/00/00/L12w41nulh-AUqfMAAVFOL7FJU4.tar.gz
最後我們發現,命令執行完畢後,返回一個group1/M00/00/00/…的ID,其實就 是返回當前所上傳的文件在存儲器中的哪一個組、哪一個目 錄位置,所以我們查看存儲器中的/fastdfs/storage/data/00/00文件夾位置,發現 已經存在了剛纔上傳的文件,到此爲止,我們的測試上傳文件已經OK了。如下 :
[root@jsyfdev001 00]# ls -l /fastdfs/storage/data/00/00
total 1132
-rw-r--r-- 1 root root 345400 Oct 22 23:38 L12w41nsu2-AHA7xAAVFOL7FJU4.tar.gz
7、FastDFS與Nginx整合
7.1 首先機器裏必須先安裝nginx
安裝步驟, 請查看我的另一個Nginx安裝教程
http://blog.csdn.net/hanwuqia0370/article/details/78151934
7.2 然後我們在存儲節點上安裝fastdfs-nginx- module_v1.16.tar.gz包進行整合。
# 目錄命令:
[root@jsyfdev001 ~]# cd /usr/local/software/
# 解壓命令:
[root@jsyfdev001 ~]# tar -zxvf /usr/local/software/fastdfs-nginx-module_v1.16.tar.gz -C /usr/local/fast/
7.3 進入目錄:
[root@jsyfdev001 ~]# cd /usr/local/fast/fastdfs-nginx-module/src
7.4 編輯配置文件config
命令:
修改前: 把config文件中第4行的最後一個local文件層次去掉 把
/usr/include/fastdfs 修改爲 /usr/local/include/fastdfs
/usr/local/include/fastcommon/ 修改爲 /usr/include/fastcommon/
[root@jsyfdev001 ~]# vim /usr/local/fast/fastdfs-nginx-module/src/config
ngx_addon_name=ngx_http_fastdfs_module
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/local/lib -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
修改後:
[root@jsyfdev001 ~]# vim /usr/local/fast/fastdfs-nginx-module/src/config
ngx_addon_name=ngx_http_fastdfs_module
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/local/lib -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
7.5 FastDFS與nginx進行集成
首先把7.1步驟之前的nginx進行刪除
目錄命令:
[root@jsyfdev001 nginx-1.6.2]# cd /usr/local/
刪除命令:
[root@jsyfdev001 local]# rm -rf nginx
進入到nginx目錄命令:
[root@jsyfdev001 local]# cd /usr/local/nginx-1.6.2
[root@jsyfdev001 nginx-1.6.2]# ./configure --add-module=/usr/local/fast/fastdfs-nginx-module/src/
重新安裝編輯
[root@jsyfdev001 nginx-1.6.2]# make && make install
7.6 複製fastdfs-ngin-module中的配置文件,到/etc/fdfs目錄中,如圖所示:
copy命令:
[root@jsyfdev001 src]# cp /usr/local/fast/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
7.7 進行修改 /etc/fdfs/ 目錄下,我們剛剛copy過來的mod_fastdfs.conf 文件。
[root@jsyfdev001 src]# vim /etc/fdfs/mod_fastdfs.conf
# 修改內容:比如連接超時時間、跟蹤器路徑配置、url的group配置
connect_timeout=10
tracker_server=ip:22122 # 注意這裏填寫本機的ip地址
url_have_group_name = true
store_path0=/fastdfs/storage
7.8 複製FastDFS裏的2個文件,到/etc/fdfs目錄中,如圖所示
目錄命令:
[root@jsyfdev001 src]# cd /usr/local/fast/FastDFS/conf/
Copy命令:
[root@jsyfdev001 conf]# cp http.conf mime.types /etc/fdfs/
7.9 創建一個軟連接,在/fastdfs/storage文件存儲目錄下創建軟連接,將其鏈接到實際存放數據 的目錄。
命令:
[root@jsyfdev001 conf]# ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00
7.10 修改Nginx配置文件
命令:
[root@jsyfdev001 local]# sudo vim /usr/local/nginx/conf/nginx.conf
修改配置內容如下圖所示:
修改內容爲:
listen 8888;
server_name localhost;
location ~/group([0-9])/M00 {
#alias /fastdfs/storage/data;
ngx_fastdfs_module;
}
注意:
nginx裏的端口要和第五步配置FastDFS存儲中的storage.conf文件配置一致, 也就是(http.server_port=8888)
最後檢查防火牆,然後我們啓動nginx服務
啓動命令:
[root@jsyfdev001 00]# sudo ps -ef | grep nginx
找到我們6.4步驟中上傳的附件
[root@jsyfdev001 00]# ls -l /fastdfs/storage/data/00/00
total 1132
-rw-r--r-- 1 root root 345400 Oct 22 23:38 L12w41nsu2-AHA7xAAVFOL7FJU4.tar.gz
現在我們使用這個ID用瀏覽器訪問地址:
http://ip:8888/group1/M00/00/00/L12w41nsu2-AHA7xAAVFOL7FJU4.tar.gz
我們就可以下載這個文件啦!
注意: 我們在使用FastDFS的時候,需要正常關機,不要使用kill -9 強殺FastDFS進程,不然會在文件上傳時出現丟數據的情況。 到此,我們的FastDFS與Nginx整合完畢!!
8:啓動停止服務步驟如下:
啓動命令:
# 啓動tracker命令:
/etc/init.d/fdfs_trackerd start
# 查看進程命令:
ps -el | grep fdfs
# 啓動storage命令:
/etc/init.d/fdfs_storaged start
# 查看進程命令:
ps -el | grep fdfs
# 啓動nginx命令:
/usr/local/nginx/sbin/nginx
停止命令:
# 停止tracker命令:
/etc/init.d/fdfs_trackerd stop
# 關閉storage命令:
/etc/init.d/fdfs_storaged stop
# 關閉nginx命令:
/usr/local/nginx/sbin/nginx -s stop
FastDFS問題記錄:
問題一:
原因如下:
樓主把阿里雲服務器從固定6M寬帶升級爲按流量收費20M後出現不能上傳文件的錯誤
錯誤信息如下:
tracker中log日誌顯示錯誤信息如下:
file: tracker_relationship.c, line: 383, selecting leader...
storage中log日誌顯示錯誤信息如下:
INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server xxx:22122, as a tracker client, my ip is 192.168.xx.xx
ERROR - file: tracker_proto.c, line: 48, server: xxx:22122, response status 2 != 0
解決方法如下:
首先, 用netstat命令檢查服務的 LISTEN 是否爲: ESTABLISHED, 如果不爲ESTABLISHED說明服務不能用
命令如下:
netstat -an | grep 22122
參考狀態爲:
CLOSED:無連接是活動的或正在進行
LISTEN:服務器在等待進入呼叫
SYN_RECV:一個連接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個連接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
其次,查看集羣同步情況
fdfs_monitor /etc/fdfs/client.conf
查看集羣中的所有節點:
查看集羣中的狀態是否爲ACTIVE 如果不是並且不是你想要的便可以刪除了
刪除命令如下:
fdfs_monitor /etc/fdfs/client.conf delete group1 10.2.x.x
詳細也可參考: 快速查看鏈接
重啓後(見上 8),再執行上傳操作
[root@jsyfdev001 local]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/software/FastDFS_v5.05.tar.gz
# 如果出現下方提示, 便說明已經成功
group1/M00/00/00/L12w41nulh-AUqfMAAVFOL7FJU4.tar.gz
二: 上傳文件不成功, 提示response status 28 != 0
Bug如下:
DEBUG - file: tracker_proto.c, line: 48, server: xxxx:22122, response status 28 != 0
# 或者
fastdfs getStoreStorage fail, errno code: 28
出現原因:
空間不足
tracker.conf的配置項reserved_storage_space的值默認爲4GB,而當前環境下剩餘空間已不足4GB。(Fastdfs5.0之上, 顯示的爲百分比 默認爲10%)
解決方法如下:
可先在tracker.conf中修改reserved_storage_space的大小, 後升級服務器硬盤
# reserved storage space for system or other applications.
# if the free(available) space of any stoarge server in
# a group <= reserved_storage_space,
# no file can be uploaded to this group.
# bytes unit can be one of follows:
### G or g for gigabyte(GB)
### M or m for megabyte(MB)
### K or k for kilobyte(KB)
### no unit for byte(B)
### XX.XX% as ratio such as reserved_storage_space = 10%
reserved_storage_space = 10%