第2-1-2章 传统方式安装FastDFS-附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
[storage_ip:port][store_path_index] 作用: 用于上传文件,用法为 fdfs_upload_file + 配置文件 + 文件
-
fdfs_download_file
Usage: fdfs_download_file
[local_filename][ ] 用于下载文件,用法为 fdfs_download_file + 配置文件 + 文件
-
fdfs_file_info
Usage: fdfs_file_info
用于查看文件信息,用法为 fdfs_file_info + 配置文件 + 文件
-
fdfs_delete_file
Usage: fdfs_delete_file
用于删除文件,用法为 fdfs_delete_file + 配置文件 + 文件
-
fdfs_monitor
Usage: fdfs_monitor
[-h ][list|delete|set_trunk_server [storage_id]] 用于查看集群信息,用法为 fdfs_monitor + 配置文件
[root@node5-vm10 ~]# fdfs_monitor /etc/fdfs/storage.conf