FastDFS分佈式架構,詳細安裝步驟,測試;Nginx中配置FastDFS,並提供優化,下載方法,樓主已測

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%
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章