第2-1-2章 傳統方式安裝FastDFS-附FastDFS常用命令

2022-11-06 12:00:44

3 安裝設定

下面我們在單臺機器上安裝FastDFS,作業系統是64位元的CentOS7。

名稱 說明
centos 7.x
libfatscommon FastDFS分離出的一些公用函數包
FastDFS FastDFS本體
fastdfs-nginx-module FastDFS和nginx的關聯模組
nginx nginx1.15.4

3.1 安裝GCC

FastDFS是由C語言開發的,所以首先我們先安裝C/C++的一個編譯器:GCC。

[root@node5-vm10 ~]# yum -y install gcc-c++

#驗證GCC
[root@node5-vm10 ~]# whereis gcc
gcc: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /usr/share/man/man1/gcc.1.gz

3.2 安裝libevent

事件通知庫libevent也是需要提前安裝的,這個庫是由C語言開發的,具有輕量級、開源的、高效能的特點。

[root@node5-vm10 ~]# yum -y install libevent

3.3 安裝libfastcommon

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS執行所需要的一些基礎庫。

下載地址: https://github.com/happyfish100/libfastcommon/releases 選擇合適的版本進行安裝。

#下載
[root@node5-vm10 ~]# cd /usr/local/src
[root@node5-vm10 src]#  wget -O libfastcommon-1.0.43.tar.gz  https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.43

#解壓
[root@node5-vm10 src]# tar -zxvf libfastcommon-1.0.43.tar.gz 

#編譯安裝
[root@node5-vm10 src]# cd libfastcommon-1.0.43
[root@node5-vm10 libfastcommon-1.0.43]# ./make.sh 
[root@node5-vm10 libfastcommon-1.0.43]# ./make.sh install

3.4 安裝FastDFS

下載地址:https://github.com/happyfish100/fastdfs/releases 選擇合適的版本,當前最新release版本是6.06

#切換目錄
[root@node5-vm10 libfastcommon-1.0.43]# cd /usr/local/src/ 

#下載
[root@node5-vm10 src]# wget -O fastdfs-6.06.tar.gz https://codeload.github.com/happyfish100/fastdfs/tar.gz/V6.06

#解壓
[root@node5-vm10 src]# tar -zxvf fastdfs-6.06.tar.gz 

#安裝
[root@node5-vm10 src]# cd fastdfs-6.06
[root@node5-vm10 fastdfs-6.06]# ./make.sh
[root@node5-vm10 fastdfs-6.06]# ./make.sh install

預設安裝方式安裝後的相應檔案與目錄

A、服務指令碼:

/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_trackerd

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_regenerate_filename
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file

D、服務啟動命令在:/usr/local/src/fastdfs-6.06

restart.sh
setup.sh
stop.sh

3.5 安裝fastdfs-nginx-module

我們在使用FastDFS部署一個分散式檔案系統的時候,通過FastDFS的使用者端API來進行檔案的上傳、下載、刪除等操作。同時通過FastDFS的HTTP伺服器來提供HTTP服務。但是FastDFS的HTTP服務較為簡單,無法提供負載均衡等高效能的服務,所以FastDFS的開發者(淘寶的架構師餘慶)為我們提供了Nginx上使用的FastDFS模組(也可以叫FastDFS的Nginx模組)。

FastDFS 通過 Tracker 伺服器,將檔案放在 Storage 伺服器儲存, 但是叢集環境下同組儲存伺服器之間需要進行檔案複製, 有同步延遲的問題。假設 Tracker 伺服器將檔案上傳到了 storage-server-1,上傳成功後檔案 ID已經返回給使用者端。此時 FastDFS 儲存叢集機制會將這個檔案同步到同組儲存storage-server-2,在檔案還沒有複製完成的情況下,使用者端如果用這個檔案 ID 在 storage-server-2 上取檔案,就會出現檔案無法存取的錯誤。而 fastdfs-nginx-module 可以重定向檔案連結到源伺服器取檔案,避免使用者端由於複製延遲導致的檔案無法存取錯誤。

[root@node5-vm10 fdfs]# cd /usr/local/src
[root@node5-vm10 src]# git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1

[root@node5-vm10 src]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
[root@node5-vm10 src]# cp /usr/local/src/fastdfs-6.06/conf/http.conf /etc/fdfs/
[root@node5-vm10 src]# cp /usr/local/src/fastdfs-6.06/conf/mime.types /etc/fdfs/

3.5 安裝Nginx

安裝nginx的主要目的是做負載均衡及實現高可用。tracker叢集環境下,需要在每個Tracker上安裝Nginx, 如果只有一臺tracker伺服器,可以不設定Nginx

Storage伺服器安裝Nginx:

cd /usr/local/src

#下載nginx壓縮包
wget http://nginx.org/download/nginx-1.15.4.tar.gz 

#解壓
tar -zxvf nginx-1.15.4.tar.gz
cd nginx-1.15.4/

#新增fastdfs-nginx-module模組
./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/ 

#編譯安裝
make && make install 

設定Nginx:

vim /etc/fdfs/mod_fastdfs.conf
#需要修改的內容如下
tracker_server=172.17.0.115:22122  #tracker伺服器IP和埠
url_have_group_name=true
base_path=/home/fastdfs/storage
store_path0=/home/fastdfs/storage/base

#設定nginx.config
vim /usr/local/nginx/conf/nginx.conf
#新增如下設定
server {
    listen       8188;    ## 該埠為storage.conf中的http.server_port相同
    server_name  localhost;
    location ~/group[0-9]/ {
        ngx_fastdfs_module;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }
}

啟動Nginx:

/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

3.6 設定FastDFS Tracker

3.5.1 設定Tracker

複製建立tracker.conf

[root@node5-vm10 fastdfs-6.06]# cd /etc/fdfs
[root@node5-vm10 fdfs]# ll
total 32
-rw-r--r--. 1 root root  1909 Apr  3 11:11 client.conf.sample
-rw-r--r--. 1 root root 10246 Apr  3 11:11 storage.conf.sample
-rw-r--r--. 1 root root   620 Apr  3 11:11 storage_ids.conf.sample
-rw-r--r--. 1 root root  9138 Apr  3 11:11 tracker.conf.sample

[root@node5-vm10 fdfs]# cp tracker.conf.sample tracker.conf

修改組態檔:

[root@node5-vm10 fdfs]# vim tracker.conf
# HTTP port on this tracker server
# 修改埠
http.server_port = 8180   
# the base path to store data and log files
base_path =  /home/fastdfs/tracker

注意資料夾要手工建立好:

[root@node5-vm10 fdfs]# mkdir -p  /home/fastdfs/tracker

3.5.2 啟動與關閉

使用以下任一命令啟動Tracker服務:

[root@node5-vm10 fdfs]# /etc/init.d/fdfs_trackerd start
Reloading systemd:                                         [  OK  ]
Starting fdfs_trackerd (via systemctl):                    [  OK  ]
# 或
[root@node5-vm10 fdfs]# service fdfs_trackerd start
Starting fdfs_trackerd (via systemctl):                    [  OK  ]
# 或
[root@node5-vm10 fdfs]# systemctl start fdfs_trackerd

檢視 FastDFS Tracker 是否已成功啟動:

#初次成功啟動後會在 /fdfsdfs/tracker/ (設定的base_path)下建立 data、logs 兩個目錄。
[root@node5-vm10 fdfs]# cd /fastdfs/tracker/
[root@node5-vm10 tracker]# ll
total 0
drwxr-xr-x. 2 root root 58 Apr  3 11:28 data
drwxr-xr-x. 2 root root 25 Apr  3 11:28 logs

[root@node5-vm10 tracker]# systemctl status fdfs_trackerd
● fdfs_trackerd.service - LSB: FastDFS tracker server
   Loaded: loaded (/etc/rc.d/init.d/fdfs_trackerd; bad; vendor preset: disabled)
   Active: active (running) since Fri 2020-04-03 11:28:11 CST; 1min 8s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 26724 ExecStart=/etc/rc.d/init.d/fdfs_trackerd start (code=exited, status=0/SUCCESS)
   Memory: 4.4M
   CGroup: /system.slice/fdfs_trackerd.service
           └─26727 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

Apr 03 11:28:09 node5-vm10.xxzx systemd[1]: Starting LSB: FastDFS tracker server...
Apr 03 11:28:09 node5-vm10.xxzx fdfs_trackerd[26724]: Starting FastDFS tracker server:
Apr 03 11:28:11 node5-vm10.xxzx systemd[1]: Started LSB: FastDFS tracker server.

使用以下任一命令關閉Tracker服務

service fdfs_trackerd stop
或
systemctl stop fdfs_trackerd
或
/etc/init.d/fdfs_trackerd stop

設定開機啟動:

chkconfig fdfs_trackerd on
或
systemctl enable fdfs_trackerd.service
或者:
vim /etc/rc.d/rc.local
/etc/init.d/fdfs_trackerd start 	#加入設定

Tracker服務啟動成功後,會在base_path下建立data、logs兩個目錄。目錄結構如下:

${base_path}
|__data
| |__storage_groups.dat:儲存分組資訊
| |__storage_servers.dat:儲存伺服器列表
|__logs
| |__trackerd.log: tracker server 紀錄檔檔案

3.6 設定FastDFS Storage

3.6.1 設定Storage

進入 /etc/fdfs 目錄,複製 FastDFS 記憶體樣例組態檔 storage.conf.sample,並重新命名為 storage.conf

[root@node5-vm10 ~]# cd /etc/fdfs/
[root@node5-vm10 fdfs]# cp storage.conf.sample storage.conf
[root@node5-vm10 fdfs]# vim storage.conf

修改以下設定資訊,其他預設即可:

# Storage 資料和紀錄檔目錄地址(根目錄必須存在,子目錄會自動生成)  
# 這裡不是上傳的檔案存放的地址
base_path =  /home/fastdfs/storage

# 逐一設定 store_path_count 個路徑,索引號基於 0。
# 如果不設定 store_path0,那它就和 base_path 對應的路徑一樣。
store_path0 =  /home/fastdfs/storage/base

# FastDFS 儲存檔案時,採用了兩級目錄。這裡設定存放檔案的目錄個數。 
# 如果本引數只為 N(如: 256),那麼 storage server 在初次執行時,會在 store_path 下自動建立 N * N 個存放檔案的子目錄。
subdir_count_per_path=256

# tracker_server 的列表 ,會主動連線 tracker_server
# 有多個 tracker server 時,每個 tracker server 寫一行
tracker_server = 172.17.0.115:22122

#存取埠 預設8888
http.server_port = 8188

建立Storage基礎資料目錄,對應base_path目錄

# 對應base_path
[root@node5-vm10 fdfs]# mkdir -p  /home/fastdfs/storage
     
# 這是設定的store_path0路徑,有多個要建立多個
mkdir -p  /home/fastdfs/storage/base

3.6.2 啟動與關閉

啟動Storage前確保Tracker是啟動的,可以用以下任一方式啟動Storage:

/etc/init.d/fdfs_storaged start
或
service fdfs_storaged start
或
systemctl start fdfs_storaged

檢視 Storage 是否成功啟動:

[root@node5-vm10 ~]# netstat -unltp|grep 23000
tcp        0      0 0.0.0.0:23000           0.0.0.0:*      LISTEN   28737/fdfs_storaged 

[root@node5-vm10 ~]# systemctl status fdfs_storaged
● fdfs_storaged.service - LSB: FastDFS storage server
   Loaded: loaded (/etc/rc.d/init.d/fdfs_storaged; bad; vendor preset: disabled)
   Active: active (running) since Fri 2020-04-03 11:59:31 CST; 39min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 28716 ExecStop=/etc/rc.d/init.d/fdfs_storaged stop (code=exited, status=2)
  Process: 28734 ExecStart=/etc/rc.d/init.d/fdfs_storaged start (code=exited, status=0/SUCCESS)
   Memory: 66.9M
   CGroup: /system.slice/fdfs_storaged.service
           └─28737 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

Apr 03 11:59:31 node5-vm10.xxzx systemd[1]: Starting LSB: FastDFS storage server...
Apr 03 11:59:31 node5-vm10.xxzx systemd[1]: Started LSB: FastDFS storage server.
Apr 03 11:59:31 node5-vm10.xxzx fdfs_storaged[28734]: Starting FastDFS storage server:

使用以下任一命令關閉Storage:

  • service fdfs_storaged stop
  • systemctl stop fdfs_storaged
  • /etc/init.d/ fdfs_storaged stop

檢視Storage和Tracker是否在通訊:

[root@node5-vm10 ~]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
[2020-04-03 12:41:17] DEBUG - base_path=/fastdfs/storage, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=1, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

server_count=1, server_index=0

tracker server is 172.17.0.115:22122

group count: 1

Group 1:
group name = group1
disk total space = 196,011 MB
disk free space = 29,774 MB
...

使用以下任一命令設定 Storage 開機啟動:

  • chkconfig fdfs_storaged on

  • systemctl enable fdfs_storaged.service

  • vim /etc/rc.d/rc.local
    加入設定:
    /etc/init.d/fdfs_storaged  start 
    

Storage 目錄:

Storage 啟動成功後,在base_path 下建立了data、logs目錄,記錄著 Storage Server 的資訊。

在 store_path0/data 目錄下,建立了N*N個子目錄:

[root@node5-vm10 ~]# ls /fastdfs/storage/data/
00  07  0E  15  1C  23  2A  31  38  3F  46  4D  54  5B  62  69  70  77  7E  85  8C  93  9A  A1  A8  AF  B6  BD  C4  CB  D2  D9  E0  E7  EE  F5  FC
01  08  0F  16  1D  24  2B  32  39  40  47  4E  55  5C  63  6A  71  78  7F  86  8D  94  9B  A2  A9  B0  B7  BE  C5  CC  D3  DA  E1  E8  EF  F6  FD
02  09  10  17  1E  25  2C  33  3A  41  48  4F  56  5D  64  6B  72  79  80  87  8E  95  9C  A3  AA  B1  B8  BF  C6  CD  D4  DB  E2  E9  F0  F7  FE
03  0A  11  18  1F  26  2D  34  3B  42  49  50  57  5E  65  6C  73  7A  81  88  8F  96  9D  A4  AB  B2  B9  C0  C7  CE  D5  DC  E3  EA  F1  F8  FF
04  0B  12  19  20  27  2E  35  3C  43  4A  51  58  5F  66  6D  74  7B  82  89  90  97  9E  A5  AC  B3  BA  C1  C8  CF  D6  DD  E4  EB  F2  F9
05  0C  13  1A  21  28  2F  36  3D  44  4B  52  59  60  67  6E  75  7C  83  8A  91  98  9F  A6  AD  B4  BB  C2  C9  D0  D7  DE  E5  EC  F3  FA
06  0D  14  1B  22  29  30  37  3E  45  4C  53  5A  61  68  6F  76  7D  84  8B  92  99  A0  A7  AE  B5  BC  C3  CA  D1  D8  DF  E6  ED  F4  FB

3.7 檔案測試

修改使用者端設定:

[root@node5-vm10 ~]# cd /etc/fdfs
[root@node5-vm10 fdfs]# cp client.conf.sample client.conf

[root@node5-vm10 fdfs]# mkdir -p /home/fastdfs/client

[root@node5-vm10 fdfs]# vim client.conf
base_path = /home/fastdfs/client
tracker_server = 172.17.0.115:22122
http.tracker_server_port = 8180 

上傳測試:

[root@node5-vm10 fdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /mnt/test.txt
group1/M00/00/00/rBEAc16Hf5iAPXaNAAAAGWIeu9w946.txt

返回的檔案ID由group、儲存目錄、二級子目錄、fileid、檔案字尾名(由使用者端指定,主要用於區分檔案型別)拼接而成。上邊範例中:

  • 組名:group1
  • 磁碟:M00
  • 儲存目錄:00
  • 二級子目錄:00
  • fileid: rBEAc16Hf5iAPXaNAAAAGWIeu9w946
  • 檔案字尾: .txt

下載測試:

經過Nginx服務設定後,我們可以通過以下路徑下載檔案:

http://172.17.0.115:8188/group1/M00/00/00/rBEAc16Hf5iAPXaNAAAAGWIeu9w946.txt

3.8 FastDFS命令

  • fdfs_upload_file:

    Usage: fdfs_upload_file <config_file> <local_filename> [storage_ip:port][store_path_index]

    作用: 用於上傳檔案,用法為 fdfs_upload_file + 組態檔 + 檔案

  • fdfs_download_file

    Usage: fdfs_download_file <config_file> <file_id> [local_filename][ ]

    用於下載檔案,用法為 fdfs_download_file + 組態檔 + 檔案

  • fdfs_file_info

    Usage: fdfs_file_info <config_file> <file_id>

    用於檢視檔案資訊,用法為 fdfs_file_info + 組態檔 + 檔案

  • fdfs_delete_file

    Usage: fdfs_delete_file <config_file> <file_id>

    用於刪除檔案,用法為 fdfs_delete_file + 組態檔 + 檔案

  • fdfs_monitor

    Usage: fdfs_monitor <config_file> [-h <tracker_server>][list|delete|set_trunk_server [storage_id]]

    用於檢視叢集資訊,用法為 fdfs_monitor + 組態檔

    [root@node5-vm10 ~]# fdfs_monitor /etc/fdfs/storage.conf