使用docker搭建fastdfs
1.拉取鏡像
docker pull morunchang/fastdfs
2.查看鏡像
docker images
3.運行tracker
docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
4.運行storage
docker run -d --name storage --net=host -e TRACKER_IP=192.168.99.100:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
5.docker ps
6.進入storage容器內容,修改nginx.conf
docker exec -it storage /bin/bash
在server裏面添加location
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;
proxy_pass http://fdfs_group1;
expires 30d;
}
7.退出
8.重啓storage服務
docker restart storage
#tip
至此以docker形式安裝fastdfs完成
後續加入通過安裝包搭建fastdfs
1.新建目錄,用來存放壓縮包
2.下載安裝libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
此時目錄結構:
解壓
tar -zxvf V1.0.7.tar.gz
此時目錄結構:
進入libfastcommon-1.0.7目錄:
cd libfastcommon-1.0.7
編譯、安裝:
./make.sh
./make.sh install
創建軟鏈接:
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
先切換到安裝目錄:
下載fastdfs:
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
此時的目錄結構:
解壓:
tar -zxvf V5.05.tar.gz
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4Uc8TTZn-1570697645225)(https://www.showdoc.cc/server/api/common/visitfile/sign/02513ed84f915505927107fd487130b7?showdoc=.jpg)]
此時的目錄結構:
進入fastdfs-5.05目錄:
cd fastdfs-5.05
編譯、安裝:
./make.sh
./make.sh install
默認的安裝方式安裝後的文件與目錄:
A、服務腳本:
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracker
B、配置文件
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
C、命令工具在/usr/bin/目錄下
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
stop.sh
restart.sh
創建軟連接:
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/fdfs_storaged /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
4.配置fastdfs跟蹤器(tracker)
進入 /etc/fdfs,複製 FastDFS 跟蹤器樣例配置文件 tracker.conf.sample,並重命名爲 tracker.conf:
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
vim tracker.conf
//開始插入圖片1
編輯tracker.conf:
base_path=/fdfs/fastdfs/tracker
http.server_port=80
//開始插入圖片2345
創建tracker基礎數據目錄,即base_path對應的目錄:
mkdir -p /fdfs/fastdfs/tracker
//開始插入圖片6
防火牆中打開跟蹤端口(默認的22122):
vim /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
//開始插入圖片7
重啓防火牆:
service iptables restart
如果報錯:
Failed to restart iptables.service: Unit iptables.service failed to load: No such file or directory.
//開始插入圖片8
直接關閉防火牆:
systemctl stop firewalld
//開始插入圖片9
啓動tracker:
初次成功啓動,會在 /fdfs/fdfsdfs/tracker/ (配置的base_path)下創建 data、logs 兩個目錄:
service fdfs_trackerd start
//開始插入圖片10
查看 FastDFS Tracker 是否已成功啓動 ,22122端口正在被監聽,則算是Tracker服務安裝成功:
netstat -unltp|grep fdfs
//開始插入圖片11
關閉Tracker命令:
service fdfs_trackerd stop
設置Tracker開機啓動:
chkconfig fdfs_trackerd on
//開始插入圖片12
tracker server 目錄及文件結構:
Tracker服務啓動成功後,會在base_path下創建data、logs兩個目錄。目錄結構如下:
${base_path}
|__data
| |__storage_groups.dat:存儲分組信息
| |__storage_servers.dat:存儲服務器列表
|__logs
| |__trackerd.log: tracker server 日誌文件
5.配置fastdfs存儲(storage)
進入 /etc/fdfs 目錄,複製 FastDFS 存儲器樣例配置文件 storage.conf.sample,並重命名爲 storage.conf:
cd /etc/fdfs
//開始插入圖片13
cp storage.conf.sample storage.conf
//開始插入圖片14
vim storage.conf
修改:
base_path=/fdfs/fastdfs/storage
store_path0=/fdfs/fastdfs/file
tracker_server=192.168.247.132:22122
http.server_port=80
IP替換成自己ip。
創建Storage基礎數據目錄,對應base_path目錄:
mkdir -p /fdfs/fastdfs/storage
這是配置的store_path0路徑:
mkdir -p /fdfs/fastdfs/file
//開始插入圖片15
防火牆中打開存儲器端口(默認的 23000):
vim /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
//插入圖片16
重啓防火牆:
啓動storage:
啓動Storage前確保Tracker是啓動的。初次啓動成功,會在 /fdfs/fastdfs/storage 目錄下創建 data、 logs 兩個目錄
service fdfs_storaged start
//開始插入圖片17
查看 Storage 是否成功啓動,23000 端口正在被監聽,就算 Storage 啓動成功:
netstat -unltp|grep fdfs
//開始插入圖片18
關閉Storage命令:
service fdfs_storaged stop
查看Storage和Tracker是否在通信:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
//開始插入圖片19,20
設置 Storage 開機啓動:
chkconfig fdfs_storaged on
//開始插入圖片21
Storage 目錄:
同 Tracker,Storage 啓動成功後,在base_path 下創建了data、logs目錄,記錄着 Storage Server 的信息。
在 store_path0 目錄下,創建了N*N個子目錄:
//開始插入圖片22
6.文件上傳測試
修改tracker服務器中的客戶端配置文件:
cd /etc/fdfs
cp client.conf.sample client.conf
//開始插入圖片23
vim client.conf
修改:
base_path=/fdfs/fastdfs/client
tracker_server=192.168.247.132:22122
新建client目錄:
mkdir -p /fdfs/fastdfs/client
上傳測試:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.txt
//開始插入圖片24
7.安裝nginx
安裝nginx所需環境:
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
進入安裝安裝包目錄:
下載nginx:
wget -c https://nginx.org/download/nginx-1.12.1.tar.gz
//開始插入圖片25,26
解壓:
tar -zxvf nginx-1.12.1.tar.gz
//開始插入圖片27
進入nginx-1.12.1目錄
cd nginx-1.12.1
//開始插入圖片28
使用默認配置:
./configure
//開始插入圖片29
編譯、安裝:
make
make install
啓動nginx:
cd /usr/local/nginx/sbin/
./nginx
其他命令:
# ./nginx -s stop
# ./nginx -s quit
# ./nginx -s reload
設置開機啓動:
vim /etc/rc.local
添加一行:
/usr/local/nginx/sbin/nginx
//開始插入圖片30
設置執行權限:
chmod 755 rc.local
//開始插入圖片31
查看nginx的版本及模塊:
/usr/local/nginx/sbin/nginx -V
//開始插入圖片32
防火牆中打開Nginx端口(默認的 80):
vim /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
//開始插入圖片33
重啓防火牆:
訪問文件:
修改nginx.conf:
vim /usr/local/nginx/conf/nginx.conf
添加如下內容:
location /group1/M00 {
alias /fdfs/fastdfs/file/data;
}
//開始插入圖片34
重啓nginx:
/usr/local/nginx/sbin/nginx -s reload
//開始插入圖片35
在瀏覽器訪問:
http://192.168.247.132/group1/M00/00/00/wKj3hFv6oFSADsdTAAAAAAAAAAA042.txt
成功!!!!!!
8.fastdfs配置nginx模塊
進入安裝壓縮包目錄:
下載 fastdfs-nginx-module、解壓:
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module-master
//開始插入圖片36,37,38,39
配置nginx:
在nginx中添加模塊:
先停掉nginx服務:
/usr/local/nginx/sbin/nginx -s stop
//開始插入圖片40
進入壓縮包目錄:
cd nginx-1.12.1/
//開始插入圖片41
添加模塊:
./configure --add-module=../fastdfs-nginx-module-master/src
重新編譯、安裝:
make && make install
查看nginx模塊:
/usr/local/nginx/sbin/nginx -V
//插入圖片42
複製 fastdfs-nginx-module 源碼中的配置文件到/etc/fdfs 目錄, 並修改:
cd /fdfs/fastdfs-nginx-module-master/src/
cp mod_fastdfs.conf /etc/fdfs/
//插入圖片43
切換到/etc/fdfs/,修改mod_fastdfs.conf:
修改內容:
connect_timeout=10
tracker_server=192.168.247.132:22122
url_have_group_name=true
store_path0=/fdfs/fastdfs/file
複製 FastDFS 的部分配置文件到/etc/fdfs 目錄:
cd /fdfs/fastdfs-5.05/conf
//插入圖片44
cp anti-steal.jpg http.conf mime.types /etc/fdfs/
//插入圖片45
配置nginx,修改nginx.conf:
vim /usr/local/nginx/conf/nginx.conf
在80端口下添加fastdfs-nginx模塊,同時註釋掉原來的模塊:
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
//插入圖片46
添加軟連接:
ln -s /fdfs/fastdfs/file/data/ /fdfs/fastdfs/file/data/M00
//插入圖片47
啓動nginx
/usr/local/nginx/sbin/nginx
//插入圖片48
更改文件名後綴:
if ($arg_attname ~* \.(doc|docx|txt|pdf|zip|rar|txt|xls|xlsx|jpg|png)$){
add_header Content-Disposition "attachment;filename=$arg_attname";
}
注:if後面需要添加空格
============================================
默認環境排查步驟
當我們拿到一個陌生的安裝了fdfs的服務器時,如何去逐步解析分析。
首先我們登陸172.21.0.51,查看項目pod:
kubectl get po -l app=*
之後查看po的配置:
kubectl get po <pod-name> -o yaml
在裏面我們可以看到fdfs的tracker server的服務器地址是172.21.0.13
在經過一頓詢問後,我們獲取了tracker server的密碼,登錄。。。
首先查看nginx的版本信息
find / -name nginx
得到裏面含有sbin的路徑,這個路徑下是存放了nginx的一些主要配置文件和啓動文件
/usr/local/openresty/nginx/sbin/nginx -v
[root@fast1 ~]# /usr/local/openresty/nginx/sbin/nginx -V
nginx version: openresty/1.7.10.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt='-I/home/azureuser/ngx_openresty-1.7.10.1/build/luajit-root/usr/local/openresty/luajit/include/luajit-2.1 -O2' --add-module=../ngx_devel_kit-0.2.19 --add-module=../echo-nginx-module-0.57 --add-module=../xss-nginx-module-0.04 --add-module=../ngx_coolkit-0.2rc2 --add-module=../set-misc-nginx-module-0.28 --add-module=../form-input-nginx-module-0.10 --add-module=../encrypted-session-nginx-module-0.03 --add-module=../srcache-nginx-module-0.29 --add-module=../ngx_lua-0.9.15 --add-module=../ngx_lua_upstream-0.02 --add-module=../headers-more-nginx-module-0.25 --add-module=../array-var-nginx-module-0.03 --add-module=../memc-nginx-module-0.15 --add-module=../redis2-nginx-module-0.11 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.13 --add-module=../rds-csv-nginx-module-0.05 --with-ld-opt='-Wl,-rpath,/usr/local/openresty/luajit/lib -L/home/azureuser/ngx_openresty-1.7.10.1/build/luajit-root/usr/local/openresty/luajit/lib' --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=/home/azureuser/ngx_openresty-1.7.10.1/../fastdfs-nginx-module-master/src
可以得知該nginx版本號是1.7.10.1,與一些模塊依賴
首先判斷這與我們的頁面請求使用的nginx版本不是一致,這時候就要考慮是否是多臺機器集羣搭建的fdfs,其次我們可以看到nginx和fdfs的依賴模塊的src,進而得到路徑,這個路徑通常是安裝目錄。
路徑是:
/home/azureuser/ngx_openresty-1.7.10.1/../fastdfs-nginx-module-master/src
我們切換到/home/azureuer目錄下發現確實是安裝包路徑
進行到這一步我們需要找到tracker.conf路徑,進而查看某些配置
find / -name tracker.conf
查看配置我們可以得到一些重要信息,比如base_path和http.server-port
接下來我們獲取nginx的配置文件nginx.conf
find / -name nginx.conf
[root@fast1 ~]# find / -name nginx.conf
/usr/local/openresty/nginx/conf/nginx.conf
/home/azureuser/ngx_openresty-1.7.10.1/bundle/nginx-1.7.10/conf/nginx.conf
/home/azureuser/ngx_openresty-1.7.10.1/build/nginx-1.7.10/conf/nginx.conf
我們選擇/usr目錄下的,因爲一般來說nginx安裝編譯後會在/usr目錄下
查看nginx.conf
從其中我們可以得知,本fdfs一共配置了兩個group,分別分佈在不同的服務器上
登錄進其中一個服務器,查看,想着幾臺機子之間應該互通,所以直接ssh 機器名就ok
查看nginx版本,發現與頁面請求還是不一致,得知直接與頁面-》fdfs關聯的nginx並不在該服務器上