1. 安装
版本 | 依赖包 |
---|---|
FastDFS < 5.05 | libevent gcc-c++ perl…未完待续 |
FastDFS 5.05 | gcc gcc-c++ openssl openssl-devel pcre pcre-devel zlib zlib-devel libfastcommon |
1.1 安装rpm依赖
事先下载好各rpm包,离线安装gcc、gcc-c++、openssl、openssl-devel、pcre、pcre-devel、zlib、zlib-devel。
查询:rpm -q name;
安装:rpm -ivh name.rpm --force --nodeps
具体脚本如下:
#!/bin/bash
keyword='not installed'
#gcc
output=`rpm -q gcc`
if [[ $output != *$keyword* ]];then
echo $output
else
rpm -ivh gcc-4.4.7-23.el6.x86_64.rpm --force --nodeps
fi
#gcc-c++
output=`rpm -q gcc-c++`
if [[ $output != *$keyword* ]];then
echo $output
else
rpm -ivh gcc-c++-4.4.7-23.el6.x86_64.rpm --force --nodeps
fi
#pcre
output=`rpm -q pcre`
if [[ $output != *$keyword* ]];then
echo $output
else
rpm -ivh pcre-7.8-7.el6.x86_64.rpm --force --nodeps
fi
#pcre-devel
output=`rpm -q pcre-devel`
if [[ $output != *$keyword* ]];then
echo $output
else
rpm -ivh pcre-devel-7.8-7.el6.x86_64.rpm --force --nodeps
fi
#openssl
output=`rpm -q openssl`
if [[ $output != *$keyword* ]];then
echo $output
else
rpm -ivh openssl-1.0.1e-57.el6.x86_64.rpm --force --nodeps
fi
#openssl-devel
output=`rpm -q openssl-devel`
if [[ $output != *$keyword* ]];then
echo $output
else
rpm -ivh openssl-devel-1.0.1e-57.el6.x86_64.rpm --force --nodeps
fi
#zlib
output=`rpm -q zlib`
if [[ $output != *$keyword* ]];then
echo $output
else
rpm -ivh zlib-1.2.3-29.el6.x86_64.rpm --force --nodeps
fi
#zlib-devel
output=`rpm -q zlib-devel`
if [[ $output != *$keyword* ]];then
echo $output
else
rpm -ivh zlib-devel-1.2.3-29.el6.x86_64.rpm --force --nodeps
fi
1.2 安装fastcommon
安装步骤是:解压——编译——安装
echo "start install libfastcommon"
tar -zxvf libfastcommonV1.0.7.tar.gz -C . > /dev/null
cd libfastcommon-1.0.7/
./make.sh > libfastcommon.log
./make.sh install > libfastcommoninstall.log
# copy dependencies to /usr/lib
cp /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
1.3 安装fastDfs
fastdfs是源码安装,需要c的编译环境,安装步骤是:解压——编译——安装
[root@fastdfs fast]# cd /usr/local/software/
[root@fastdfs software]# ll
-rw-r--r--. 1 root root 345400 4月 11 03:28 FastDFS_v5.05.tar.gz
-rw-r--r--. 1 root root 102378 4月 11 03:28 libfastcommon-master.zip
[root@fastdfs software]# tar -zxvf FastDFS_v5.05.tar.gz -C /usr/local/fast/
[root@fastdfs software]# cd /usr/local/fast/FastDFS/
[root@fastdfs FastDFS]# ./make.sh
[root@fastdfs FastDFS]# ./make.sh install
-----待确认-----
安装完成后,服务一系列的脚本在/usr/bin/;配置文件默认在/etc/fdfs/,若安装时更改位置,则在自定义的安装路径下,这里我们安装到/opt/infosec/FileServer;
在/etc/init.d/下有fdfs_storaged和fdfs_trackerd,内部bin目录为/usr/local/bin/,但是实际我们安装在了/usr/bin/下面。所以我们需要修改这两个配置文件。
-----待确认-----
2. 使用
DFS相关文件及作用:
启停追踪服务:/usr/bin/fdfs_trackerd /opt/infosec/FileServer/conf/tracker.conf start/stop/restart
启停存储服务:/usr/bin/fdfs_storaged /opt/infosec/FileServer/conf/storage.conf start/stop/restart
DFS相关文件 | 作用 | 示例 |
---|---|---|
/etc/rc3.d/FileServer.sh | 启停DFS的追踪、存储服务,是对dfs命令的封装 | /etc/rc3.d/FileServer.sh s restart /etc/rc3.d/FileServer.sh t restart |
/etc/rc3.d/FileServerConf.sh | 增减配置 | /etc/rc3.d/FileServerConf.sh add xxx /etc/rc3.d/FileServerConf.sh remove |
/opt/infosec/FileServer/conf/storage.conf | 配置存储服务器端口,base_path配置真实的存储路径 配置追踪服务器地址,多个地址用逗号隔开 | port=23000 base_path=/opt/infosec/FileServer/storage tracker_server=10.20.87.66:22122,10.20.86.243:22122 |
/opt/infosec/FileServer/conf/tracker.conf | 配置追踪服务器端口,base_path配置追踪日志等数据存储路径 | port=22122 base_path=/opt/infosec/FileServer/tracker |
/opt/infosec/FileServer/conf/client.conf | 配置追踪服务器地址,base_path与追踪服务器的base_path保持一致 | base_path=/opt/infosec/FileServer/tracker tracker_server=10.20.87.66:22122 |
client.conf:当在linux上使用命令行测试dfs的功能时,需要在client.conf里面配置追踪服务器地址
由ps -elf|grep dfs查询dfs的运行状态:结果包含storage.conf代表存储服务启动,结果包含tracker.conf代表追踪服务启动。
测试
文件上传,成功后返回存储路径
[root@fastdfs bin]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/software/3.jpg
group1/M00/00/00/wKicDVjr_ayAE4VVAAHk-VzqZ6w020.jpg
[root@fastdfs bin]#
3. 常见问题
3.1 stroarge无法启动
- 检查stroarge.conf中配置的23000端口启动情况,执行lsof -i:23000发现没有进程信息,说明未启动成功
[root@VM-8-4-centos rc3.d]# lsof -i:23000
[root@VM-8-4-centos rc3.d]#
- 检查stroarge.log日志信息,使用tail -f xxx
[root@VM-8-4-centos ~]# tail -f /opt/infosec/FileServer/storage/logs/storaged.log
[2021-05-19 14:43:55] ERROR - file: storage_func.c, line: 896, mkdir "/home/fast_dfs/storage/store/data" fail, errno: 2, error info: No such file or directory
[2021-05-19 14:43:55] CRIT - file: storage_func.c, line: 1873, storage_check_and_make_data_dirs fail, program exit!
[2021-05-19 14:43:55] CRIT - exit abnormally!
发现是stroarge.conf配置的store_path0=/home/fast_dfs/storage/store,结果mkdir "/home/fast_dfs/storage/store/data"失败,是因为上层目录不存在,导致报错。手动创建路径后,成功!
应该使用mkdir -p “/home/fast_dfs/storage/store/data”,上层目录不存在时,一并创建。
配置的store_path0路径一定要真实存在
3.2 在上传时报错 getStoreStorage fail, errno code: 28
[root@VM-8-4-centos ~]# cd /opt/infosec/NetSeal/log/web/
[root@VM-8-4-centos web]# ls
debug.log error.2021-05-18.log error.log info.2021-05-18.log info.log
[root@VM-8-4-centos web]# tail -f error.log
Caused by: org.csource.common.MyException: getStoreStorage fail, errno code: 28
at org.csource.fastdfs.StorageClient.newWritableStorageConnection(StorageClient.java:1622)
at org.csource.fastdfs.StorageClient.do_upload_file(StorageClient.java:729)
at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:175)
at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:193)
at org.csource.fastdfs.StorageClient1.upload_file1(StorageClient1.java:115)
at cn.com.infosec.netseal.common.util.FastDFSUtil.upload(FastDFSUtil.java:99)
at cn.com.infosec.netseal.common.util.FileUtil.saveFile(FileUtil.java:396)
at cn.com.infosec.netseal.webserver.service.impl.CertServiceImpl.certToDb(CertServiceImpl.java:236)
... 161 common frames omitted
在寻求度娘的帮助后,发现有可能是因为存储空间不足导致的上传失败。
- 查看tracker.conf配置中reserved_storage_space的值,经查询reserved_storage_space=50%
- 查看系统剩余存储空间,命令df -h
发现20G空间,使用56%,余44%,44%<50%,不满足reserved_storage_space配置
可以将reserved_storage_space数值改小一点,即可解决
[root@VM-8-4-centos rc3.d]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 536K 495M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 20G 11G 8.4G 56% /
tmpfs 100M 0 100M 0% /run/user/0
[root@VM-8-4-centos rc3.d]#
3.3 无法安装
3.3.1 gcc: error trying to exec ‘cc1’: execvp: 没有那个文件或目录
排查:(3和4不知道是否有用)
1. ping www.baidu.com 看网通不通,yum update 看yum源是否可用
2. yum源地址不可用时:上传自己的神器yum.repos.d.tgz,解压替换至/etc/yum.repos.d
3. 执行 yum install gcc-objc,还不行再往下看
4. 执行 yum install make libpng libpng-devel libtiff libtiff-devel libobjc libxml2 libxml2-devel libX11-devel libXt-devel libjpeg libjpeg-devel
5. 检查glibc-devel、cpp、binutils、mpfr、jemalloc是否安装:
rpm -qa glibc-devel; yum install -y glibc-devel;
rpm -qa cpp; yum install -y cpp;
rpm -qa binutils; yum install -y binutils;
rpm -qa mpfr; yum install -y mpfr;
rpm -qa jemalloc; yum install -y jemalloc;
3.3.2 ./make.sh: line 99: perl: command not found
排查:
1.检查perl是否安装:
rpm -qa perl; yum install -y perl perl-devel;
集群
参考CSDN一位大牛的博客,fastdfs专栏,包括单机和集群的讲解
安装完dfs后,默认有三个配置文件
此处为了用命令行测试,所以复制一份client.conf,改一下配置,作为命令行操作时使用
client.conf改成正确的地址,base_path与tracker.conf中的base_path保持一致,tracker_server配置为要连接的tracker服务器地址
简洁化上传,只上传一份。
也可以用/usr/bin/fdfs_test 的upload操作,这种有详细信息,上传一个文件,实际会上传两次,并且每一次都有主从两个文件,也就是最终会有4个文件,比较占内存,删除时需要删两次,所以不建议用这种。
下载文件,自动保存至当前路径。
删除文件