第2-1-2章 傳統方式安裝FastDFS-附FastDFS常用命令
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運行所需要的一些基礎庫。
下載地址: //github.com/happyfish100/libfastcommon/releases 選擇合適的版本進行安裝。
#下載
[root@node5-vm10 ~]# cd /usr/local/src
[root@node5-vm10 src]# wget -O libfastcommon-1.0.43.tar.gz //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
下載地址://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 //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 //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 //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服務配置後,我們可以通過以下路徑下載文件:
//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