先谈谈这几天部署fdfs的感受吧,部署完成感觉也不是特别复杂,但每走一步都是坑坑重重,每次部署也都会遇到很多新的坑,最近在虚拟机上搭了三台服务器,fdfs完美运行,可以leader让部署到阿里云服务器上,部署起来却又遇到了很多问题,比如调试选择内外网ip的问题,部署完成其中一台storage上传文件不成功的问题,其中一台storage不能同步到另一台storage的问题,看了很多网上的教程,也是各自不甚完整,说法也各不相同,接下来,可以直接看重点……
先给一张部署架构
我的部署就是按照此图的架构来的,一台tracker(以下简称t),两台storage(以下简称s1,s2),s1与s2为一组,相互备份。
先放一个fdfs的配置安装步骤,以及一些坑,已都在文中说明,后面部署会在篇二中说明
一、FastDFS 的安装(所有跟踪服务器和存储服务器均执行如下操作)
1、编译和安装所需的依赖包:
# yum install make cmake gcc gcc-c++
2、安装 libfastcommon
:
(1)上传或下载 libfastcommon-master.zip
到/usr/local/src
目录
(2)解压
# cd /usr/local/src/
# unzip libfastcommon-master.zip
# cd libfastcommon-master
- 注意:unzip不能使用,安装
yum install -y zip unzip
(3) 编译、安装
# ./make.sh
# ./make.sh install
libfastcommon 默认安装到了
/usr/lib64/libfastcommon.so
/usr/lib64/libfdfsclient.so
(4)因为 FastDFS
主程序设置的 lib 目录是/usr/local/lib
,所以需要创建软链接
# 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
(1)上传或下载 FastDFS
源码包(FastDFS_v5.05.tar.gz
)到 /usr/local/src
目录
(2)解压
# cd /usr/local/src/
# tar -zxvf FastDFS_v5.05.tar.gz
# cd FastDFS
(3)编译、安装(编译前要确保已经成功安装了 libfastcommon
)
# ./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
(4)因为FastDFS
服务脚本设置的bin
目录是/usr/local/bin
,但实际命令安装在/usr/bin
,可以进入
/user/bin
目录使用以下命令查看fdfs
的相关命令:
# cd /usr/bin/
# ls | grep fdfs
- 因此需要修改
FastDFS
服务脚本中相应的命令路径,也就是把/etc/init.d/fdfs_storaged
和/etc/init.d/fdfs_trackerd
两个脚本中的/usr/local/bin
修改成/usr/bin
:
# cd /etc/init.d
# vi fdfs_trackerd
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
# vi fdfs_storaged :
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
二、配置 FastDFS 跟踪器 Tracker (192.168.119.130)
1、 复制 FastDFS 跟踪器样例配置文件,并重命名:
# cd /etc/fdfs/
# cp tracker.conf.sample tracker.conf
2、 编辑跟踪器配置文件:
# vi /etc/fdfs/tracker.conf
修改的内容如下:
disabled=false
port=22122
base_path=/fastdfs/tracker
(其它参数保留默认配置 )
3、 创建基础数据目录(参考基础目录 base_path 配置):
# mkdir -p /fastdfs/tracker
4、 防火墙中打开跟踪器端口(默认为 22122):
# vi /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
重启防火墙:
# firewall-cmd --reload
关闭防火墙
# systemctl stop firewalld
查看状态
# firewall-cmd --state //running 表示运行
5、 启动 Tracker
# /etc/init.d/fdfs_trackerd start
(初次成功启动,会在/fastdfs/tracker 目录下创建 data、logs 两个目录)可以通过以下两个方法查看 tracker 是否启动成功:
(1)查看 22122 端口监听情况:netstat -unltp|grep fdfs
(2)通过以下命令查看 tracker 的启动日志,看是否有错误
tail -100f /fastdfs/tracker/logs/trackerd.log
# /etc/init.d/fdfs_trackerd restart 重启
6、 关闭 Tracker:
# /etc/init.d/fdfs_trackerd stop
7、 设置 FastDFS
跟踪器开机启动:
# vi /etc/rc.d/rc.local
添加以下内容:
## FastDFS Tracker
/etc/init.d/fdfs_trackerd start
三、配置 FastDFS
存储服务器 (192.168.119.131,192.168.119.131)
1、 复制 FastDFS
存储器样例配置文件,并重命名:
# cd /etc/fdfs/
# cp storage.conf.sample storage.conf
2、 编辑存储器样例配置文件:
# vi /etc/fdfs/storage.conf
- 修改的内容如下:
disabled=false #启用配置文件
group_name=group1 #组名(第一组为 group1,第二组为 group2)
port=23000 #storage 的端口号,同一个组的 storage 端口号必须相同
base_path=/fastdfs/storage #设置 storage 的日志目录
store_path0=/fastdfs/storage #存储路径
store_path_count=1 #存储路径个数,需要和 store_path 个数匹配
tracker_server=192.168.119.130:22122 #tracker 服务器的 IP 地址和端口
http.server_port=8888 #设置 http 端口号
(其它参数保留默认配置,具体配置解释请参考官方文档说明:
http://bbs.chinaunix.net/thread-1941456-1-1.html )
注意:
报错:[2019-03-27 12:01:48] ERROR - file: tracker_proto.c, line: 48, server: 172.19.247.156:22122, response status 2 != 0
tracker_query_storage fail, error no: 2, error info: No such file or directory
**解决:**查看storage.conf的存储路径设置,是找不到存储路径
(设置文件存储路径,一定要注意路径前面是否取消注释,路径是否写完整,如前面的“/”)
报错:
[2019-03-27 12:01:11] INFO - file: tracker_relationship.c, line: 383, selecting leader…
解决:
systemctl stop firewalld
/etc/init.d/fdfs_trackerd restart # 重启服务
服务器部署:
测试环境:tracker.conf, storage.conf均为公网ip
3、 创建基础数据目录(参考基础目录 base_path 配置):
# mkdir -p /fastdfs/storage
4、 防火墙中打开存储器端口(默认为 23000):
# vi /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
重启防火墙:
# firewall-cmd --reload
关闭防火墙
# systemctl stop firewalld.service
5、 启动 Storage:
# /etc/init.d/fdfs_storaged start
(初次成功启动,会在/fastdfs/storage 目录下创建数据目录 data 和日志目录 logs)
各节点启动动,使用 tail -f /fastdfs/storage/logs/storaged.log 命令监听存储节点日志,可以看到存储节点链接到跟踪器,并提示哪一个为 leader 跟器。同时也会看到同一组中的其他节点加入进来的日志信息。
查看 23000 端口监听情况:netstat -unltp|grep fdfs
所有 Storage 节点都启动之后,可以在任一 Storage 节点上使用如下命令查看集群信息:
# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
6、 关闭 Storage:
# /etc/init.d/fdfs_storaged stop
7、 设置 FastDFS
存储器开机启动:
# vi /etc/rc.d/rc.local
添加:
## FastDFS Storage
/etc/init.d/fdfs_storaged start
四、文件上传测试
1、修改 Tracker 服务器中的客户端配置文件
# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
# vi /etc/fdfs/client.conf
base_path=/fastdfs/tracker
tracker_server=192.168.119.131:22122
# tracker_server=多组的话再加ip:port
2、执行如下文件上传命令:
# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/FastDFS_v5.05.tar.gz
返回 ID 号:
group1/M00/00/00/wKh3g1yQZtKAGvwfAAVFOL7FJU4.tar.gz
(能返回以上文件 ID,说明文件上传成功)
# 记得关闭各个ip的防火墙
systemctl stop firewalld.service