代码:https://gitee.com/wcjr/spring-all-study
1.
基础
1.1说明
●FastDFS是一 个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
●FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务 器集群提供文件上传、下载等服务。
●FastDFS服务端有两个角色:跟踪器(tracker) 和存储节点(storage) 。跟踪器主要做调度工作,在访问上起负载均衡的作用。
●存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value)方式表示,如: width=1024,
其中的key为width, value为1024。 文件metadata是文件属性列表,可以包含多个键值对。
●跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线.上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
●为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
●在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线.上提供服务。
●当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
●FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
1.2fastDFS架构
先启动tracker、然后在启动storage(就是途中GroupA…..),
1.3fastDFS 下载
下载地址:https://github.com/happyfish100
2
安装步骤
2.1基础文件安装
- gcc安装:yum install -y gcc-c++
- libevent安装: yum -y install libevent
-
先安装libfastcommon
- 解压: tar -zxvf libfastcommon-1.0.51.tar.gz
- 进入文件夹下: cd libfastcommon-1.0.51
- 进行编译: ./make.sh
- 然后安装: ./make.sh install
-
安装 fastdfs
- 解压: tar -zxvf fastdfs-6.07.tar.gz
- 进入目录: cd fastdfs-6.07/
- 进行编译: ./make.sh
- 然后安装 ./make.sh install
- 进入到fastdfs/conf文件夹下,将其所有内容拷贝到/etc/fdfs/ :cp * /etc/fdfs/
必须先启动tracker然后在启动storage,不然storage心跳发不过去
2.2配置tracker服务
1.首先进入etc/fdfs文件夹下:cd /etc/fdfs
-
1修改 tracker.conf 文件:vim tracker.conf
- 修改(数据文件/日志文件)存储地址: /home/local/fastdfs/tracker
- 记得先创建文件夹: mkdir /home/local/fastdfs/tracker -p
- 2启动:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf (/usr/bin/fdfs_trackerd 地址/tracker.conf)
2.3配置storage服务
1.首先进入etc/fdfs文件夹下:cd /etc/fdf
2.编辑storage.conf:vim storage.conf
2.1修改组名为(自己指定一个):qystorage
2.2修改(数据文件/日志文件)存储地址: /home/local/fastdfs/storage以及 store_path0
2.3配置刚刚tracker服务启动的服务器ip【tracker_server】
2.4注意 web server port (配合nginx需要用到)=》http.server_port=8888
2.5创建刚刚指定的目录:mkdir /home/local/fastdfs/storage -p
3.启动:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf (/usr/bin/fdfs_storaged 地址/tracker.conf)
2.4测试运行
1.进入etc/fdfs 文件夹下: cd /etc/fdfs
2.配置 clinet.conf文件:vim client.conf
2.1修改base_path路径:/home/local/fastdfs/client
2.2创建:mkdir /home/local/fastdfs/client
2.3然后修改:tracker_server
3.进入到/usr/bin 文件夹下 找到fdfs_test\
4.进行文件上传测试
4.1准备一个文件
4.2进行上传测试:/usr/bin/fdfs_test /etc/fdfs/client.conf upload /opt/files/ts1.jpg
4.3/usr/bin/fdfs_test /etc/fdfs/client.conf upload 文件
4.4fdfs_test命令 加载 client.conf配置 upload 上传文件
4.5上传之后虽然发现有地址,但是访问却不成功,因为需要nginx
4.6文件保存路径就是之前设置的 /home/local/fastdfs/storage/data下
2.5配置nginx fastDFS
Nginx一定要和storage安装在同一个节点上(上面storage安装在/usr下。所以nginx也需要安装在/usr下。默认地址就是)
2.5.1安装fastdfs-nginx-module
1.解压fastdfs-nginx-module文件:tar -zxvf fastdfs-nginx-module-1.22.tar.gz
2.配置config:
2.1先进入src目录cd fastdfs-nginx-module-1.22/src
2.2配置config文件:vim config
2.3修改ngx_module_incs以及CORE_INCS。修改为/usr/include
2.4 由于include是在usr下,所以修改为这个地址
3.将mod_fastdfs.conf 拷贝放在/etc/fdfs下,和其他配置文件一起【mod_fastdfs是和nginx相互联调使用到的】
3.1 cp mod_fastdfs.conf /etc/fdfs
2.6
安装nginx
1.安装pcre : yum install -y pcre pcre-devel
2.安装 zlib:yum install -y zlib zlib-devel
3.安装openssl: yum install -y openssl openssl-devel
4.创建一个临时目录给nginx使用:mkdir /var/temp/nginx -p
5.获取/fastdfs-nginx-module/src的路径(先进入 fastdfs-nginx-module(注意版本号)/src)
6.进入之前fastFDS相关文件夹下,解压文件:tar -zxvf nginx-1.21.0.tar.gz
7.进入nginx(解压后的安装包)文件夹下 然后添加模块
7.1 先执行:./configure \
7.2 然后添加:–add-module=/opt/fastDFS/fastdfs-nginx-module-1.22/src
7.3 –add-module=fastdfs-nginx-module地址
8. 指定nginx安装目录:./configure –prefix=/usr/local/nginx (这一步可不要)
9. 回车之后输入make 回车;然后在输入 make install 回车
9.1 注意nginx安装完毕之后会显示安装在哪了
10. 进入/etc/fdfs下:cd /etc/fdfs/
11. 修改mod_fastdfs.conf: vim mod_fastdfs.conf
11.1 修改base_path:/home/local/fastdfs/tmp
11.2 修改trcker_server=172.16.0.11:22122
11.3 修改group_name:qystorage (和storage中一样)
11.4 修改:url_have_group_name=true (url中可见组名)
12. 修改:store_path0=/home/local/fastdfs/storage
13. 然后保存。最后别忘记创建文件夹:mkdir /home/local/fastdfs/tmp -p
14. 进入安装nginx的文件夹下(不是解压包的位置,make install之后会显示地址)
14.1 进入nginx的conf文件夹下,修改一下配置文件。修改port修改为storage.conf中http.server_port相同
以及添加这个
location /qystorage/M00{ ##M00是虚拟路径
ngx_fastdfs_module;
}
15. 启动nginx (nginx /conf文件夹下启动 ../sbin/nginx -t =>-t代表测试启动)
16. 获取进入nginx 目录 ./sbin/nginx启动
17. 注意,如果服务器版本高。则nginx需要最新版本,以免因为版本而出现的问题。同时注意nginx的安装位置一定要和fastFDS在同一个位置
2.7 查看分布式上传的文件
http://111.230.182.125:8888/qystorage/M00/00/00/rBAAC2DPQO2AII4xAD7d_ki1eeE595.jpg
Ip+端口+分组名+M00+分配的文件夹+文件名称
3
运行中遇到得问题
上传文件过程中出现得错误
1. Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processingfailed; nested exception is com.github.tobato.fastdfs.exception.FdfsConnectException: 无法获取服务端连接资源:can’t create connection to/*:23000] with root cause
答:java.net.SocketTimeoutException: connect timed out
遇到这个错误。本次解决:是因为当初设置 tracker.conf 、mod_fastdfs.conf、vim client.conf(服务器上面自测会使用到) 设置得ip全是内网ip而不是公网ip。设置为公网ip就行了
2. 客户端连接服务端出现了io异常:socket io exception occured while receive conte
答:是因为关于fastFDS得配置没有配置好 如下配置就行
# 分布式文件系统fastdfs配置
fdfs:
# socket连接超时时长
so-timeout: 1500
# 连接tracker服务器超时时长
connect-timeout: 600
pool:
#从池中借出的对象的最大数目(配置为-1表示不限制)
max-total: -1
#获取连接时的最大等待毫秒数(默认配置为5秒)
max-wait-millis: 500
#每个key最大连接数
max-total-per-key: 50
#每个key对应的连接池最大空闲连接数
max-idle-per-key: 10
#每个key对应的连接池最小空闲连接数
min_idle_per_key: 5
# 缩略图生成参数,可选
thumb-image:
width: 150
height: 150
# 跟踪服务器tracker_server请求地址,支持多个,这里只有一个,如果有多个在下方加- x.x.x.x:port
tracker-list: 111.230.182.125:22122