目录:
(1)FastDFS学习目标
(2)结构介绍
(3)上传下载流程
(4)专用术语介绍
(5)同步机制介绍
(6)同类产品简单对比
(7)FastDFS安装
(8)Tracker配置
(9)Storage配置
(10)Client配置
(11)Nginx安装
(12)Nginx模块配置
(1)FastDFS学习目标
(2)结构介绍
它们都是集群,首先客户端去执行写操作,比如说上传文件到存储节点,这时候会拿到一个跟踪器,跟踪器会根据客户端的写操作去调度去看以下哪个存储节点有空余的位置,获这说是比较空闲的状态,如果客户端进行读的操作,它就不用跟踪器了,它可以直接到存储节点里直接进行读取,不管是直接在线观看,获取下载文件
(3)上传下载流程
上传的流程,客户端会找tracker跟踪器,tracker跟踪器会根据客户端需要上传的文件,然后去storage节点里,现在哪一个存储节点有空闲的而且它的剩余容量能够放的下这个文件,找到之后就会返回这个节点的端口和IP给客户端,客户端拿着这个IP和端口找到指定的存储节点,去进行上传的操作。
客户端可以直接去节点进行读取和下载,这个在线的读取和下载,首先是我们需要知道它的IP地址和端口号后面跟上/卷名/ 文件名,知道完整的路径,如果现在只知道卷名和文件名,并不知道IP和端口,这时候也可以去找跟踪器,我们拿着卷名和文件名去找跟踪器,跟踪器会找到卷名和文件名所对的文件在哪一个节点,会把IP地址和端口号返回给客户端,那客户端可以再根据IP地址/端口/卷名/文件名直接通过存储节点进行读取操作
当然直接去存储节点去读取文件效率会更高一点当然实在不知道IP和端口的情况下,通过跟踪器
但是在一般情况下,跟踪器上传的时候,会返回一个完整的路径,存放在数据库里面去,那我们需要进行文件预览或者下载的时候,我们通过数据库去拿到整个路径直接去存储节点,进行下载或预览
(4)专用术语介绍
(5)同步机制介绍
(6)同类产品简单对比
(7)FastDFS安装
把安装包传到Linux:
完成后:
首先FastDFS是C语言开发的,首先安装依赖make、 cmake...
安装的时候可能会出现这个问题:解决办法:
安装FastDFS色核心库libfastcommon-1.0.43.zip
它的后缀是.zip的先装以下zip
新建一个FastDFS的安装目录
进行解压:
自己安装的是.tar.gz结尾的这样安装
进入目录查看:解压的的文件
自己安装的:
进行编译:
进行安装:
这样核心库就安装完了
FastDFS主程序设置的lib目录在user/lock下面的,所以创建一些软连接,就相当于一个快捷方式,把它的快捷方式从原本的目录改成功我们想要的一个目录
解压FastDFS:
自己安装:
进入目录查看:
这边可以做一个可选的操作,把它的安装路径啊改成我们指定的一个路径,因为它默认的安装路径是在usr下面去我们可以把它改成usr/local下面去
vim make.sh:进行修改安装目录
修改安装目录后面加/local
如果不改的话:
进行编译:
编译好之后进行安转:
查看服务脚本的位置:
配置文件模板所在目录:
以上分被为客户端、存储器、跟踪器 的配置
那我们需要做一些配置的时候,比如说当做tracker服务器来用的话,把tracker.conf.sample拷贝过去进行修改把.sample删掉,就可以用了,如果当做storage来用的话,需要改storage.conf.sample
配置文件
如果电脑性能差的话可以配置在一台虚拟机里面,把这两个配置文件都配置一下,那么你这台服务器呢即是跟踪器,又是一个存储节点
查看内置命令所在目录
(8)Tracker配置
来配置Tracker来做跟踪个服务器:首先拷贝一份tracker.conf.sample,进行修改
bind_addr:绑定IP地址
port:端口号
connnect_timeout:连接超时
newwork_timout:网络超时
base_path:是Fdfs的Tracker启动之后,使用的根目录,它要去存储一些信息,它存的信息是卷里面storage 的存储节点 包括卷1,卷2,卷3 每个卷下面有哪些storage 每个storage的IP和对口,它都要存储一下,因为它作为中转掉读的操作,客户端发起写操作的时候,tracker就会调度找到哪一个节点给我们去写操作,然后返回IP和端口,所以它需要把卷下面的存储节点存储一下
可以更改一下:一会需要创建这个目录
max_connection:最大连接
accept_thread:接收的线程
work_thread:工作线程
min_buff_size:最小缓冲
max_buff_size:最大缓冲
store_server:负载均衡策略 0:轮询 1:通过IP地址查到的第一个服务器 2:通过其他方法查找也是第一个服务器
store_path:默认轮询
download_server:下载 轮询
创建目录:
进入启动命令目录:
第二个是启动tracker的服务器,之前安转的时候,修改过它的一个目录,所以启动的时候也要修改它的目录,安转的时候没有修改直接启动就行
加上local
启动tracker服务器:
查看是否启动成功:
还可以使用查看进程的方法:
停止命令:./fdfs_trackerd stop
重启命令: ./fdfs_trackerd restarrt
如果设置开机启动:
添加下面那一行内容
我们就不设置了:q!强制退出
(9)Storage配置
进入配置文件目录拷贝一份starage的配置文件
vim storage.conf
group_name:组名,默认组名是group1
bind_addr:绑定IP地址
client_bind:客户端绑定
port:端口号23000
connect_timeout:连接超时
base_path:也是一个基础目录,它是存放storage-server里面的一些基础数据的内容以及日志内容的目录,基础的数据比如:启动的进程号、一些同步的信息,包括日志
更改一下:一会需要创建这个目录:
store_path0:这个也是一个目录 它是存放文件的一个目录,我们不是会把文件上传到storage里面去吗,这个目录就是存放文件的一个目录
这个目录等storage启动的时候,它会自动生成256*256个目录
也进行更改一下,一会进行创建
tracker-servcer:把下面那个删掉
它为什么有两个,因为tracker也是可以搞集群的吗,这是配置storage追踪服务器的IP地址,相当于注册的功能,给追踪器注册以下,告诉它IP地址是多少
storage配置tracker跟踪器的IP地址:
修改一下: 注意这里修改的端口号是你虚拟机的IP地址,如果你使用的是两台虚拟机,这里的端口号需要写启动tracker虚拟机的IP地址,但是你如果在一台虚拟机启动的话写成这一个虚拟机的IP地址就行了
新建上面配置的目录:
因为安转的时候改过路径,也需要启动的路径去修改一下:
加一个local:
启动storage:这里的启动命令是fdfs_storaged start 下面因为是没有进到那个目录下所以加的,如果在那个目录下可以直接启动
查看启动状态:
查看创建的目录:
进入store 目录
里面存放256*256个目录:
storage也可以设置开启自启,但是不建议因为:
注意启动storage的前提是启动tracker,如果tracker不启动storage会报错
(10)Client配置
客户端的配置并不是必须的,因为客户端配完之后呢相当于命令行去测试以下FastDFS,所以我们不准备用命令行去测试,而是直接用代码去测试的话直接可以跳过
可以演示下配置:
进入配置文件目录:
base_path:基础目录也是放客户端运行时候产生的一些数据
改一下,一会在创建目录:
客户端也要配置tracker跟踪器的IP地址
tracker_server:经过客户端进行上传或下载的话,中间要经过tracker,上传的 时候了根据tracker找到storage的IP和端口,下载的haul也要经过tracker,找到IP和端口,然后进行下载
改成本机的:
创建目录:
进入命令目录:倒数第三个就是上传文件命令
./fdfs_upload_file /etc/fdfs/client.conf(客户端配置文件位置) ~/jdk-8u202-linux-x64.tar.gz(上传文件的位置)
上传成功返回:storage的卷名+文件名
group1是stotage配置的一个卷名的名称 ,配置中配置的是group1
M00:是一个虚拟目录
00/00:是放在00/00目录下
删除文件:
使用命令:
fdfs_delete_file /etc/fdfs/client.conf + 返回的完整的路径
因为没有IP和端口,所以要经过追踪器根据这一整串完整的文件名去获取storage的IP和端口,才会去进行删除,这就是client为什么要配置tracker服务器
在打印一下:已经没有了:
(11)Nginx安装
为什么要安转Nginx的组件呢,因为FastDFS是一个文件系统,它可以存放很多类型的文件:比如图片、或其他类型,图片的话是可以直接通过网页进行预览的,而不需要向现在的这样操作,通过客户端拿到完整的卷名+文件名然后通过追踪服务器拿到对应的IP地址和端口,然后再下载下来再去看,太麻烦了,可以通过Http协议直接在我们的url里面输入IP端口卷名和文件名直接在浏览器里面访问这张图片,预览这张图片,这时候FastDFS没有办法实现,我们需要安转以下Nginx以及Nginx的组件Nginx就是为了让Web应用可以使用http协议直接访问,storage服务器里面存储的文件,这时候需要安转Nginx组件
fastdfs-nginx-module-1.22.tar.gz:就是nginx组件
nginx-1.6.1.tar.gz:就是nginx安装包
解压:
自己安装的:
查看一下:
src是原码文件:
修改配置:
为什么要改配置,因为我们安装组件之后呢回去安装Nginx,需要把这个组件加进去,加进去的时候它会去寻找Fast安转的一个目录,如果目录不正确就安转失败了
vim config:
模块已经改好了,安装呢?在安装Nginx的时候把这个模块添加进去就好了
安装Nginx也有对应依赖:
yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-develzlib zlib-devel openssl openssl-devel
解压一下:
查看一下:
配置一下安装信息,改一下安装目录:
创建目录:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/locak/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs/fastdfs-nginx-module/src
安装信息已经配置好了,现在可以安装了:先make,预编译
编译完之后:make install
现在Nginx和nginx-model已经安转进来了
(12)Nginx模块配置
进入配置文件的目录:把配置文件拷贝到/etc/fdfs目录一份
拷贝过来之后进行响应的修改
更改:tracker_server跟踪服务器
url_have_group_name:改为true 让它需要包含,因为它上传之后的文件名里面包含组名
tore_path:改为上传文件的位置
还要拷贝两份http配置的文件,因为nginx在网页看图片的时候,用的http协议,所以需要去拷贝一下
再去创建一个启动Nginx的软连接:
因为Nginx启动的时候usr64目录下面去查找所需要的so文件,因为安装FastDFS的时候,已经修改了它的目录,一定要创建这个软连接
ln -s /usr/local/lib64/libfdfsclient.so /usr/lib64/libfdfsclient.so
创建网络访问存储服务的软连接:
这个软连接就是说追踪服务器上传完之后,返回的里面有一个M00,其实就是一个data,相当一Windows的快捷方式,需要把这个M00指定到data下面去
ln -s /fastdfs/storage/store/data/ /fastdfs/storage/store/data/M00
可以查看一下:
M00指定到data下面去,相当于一个软连接
再去修改nginx的配置文件:进入目录
vim nginx.conf
首先配置一个用户:
我们学习的原因直接配置root用户,正是工作中是根据实际情况决定的,因为user改为root用户nginx访问Linux的文件系统必须要有文件系统的权限,我们改为root呢表示Nginx访问文件系统的权限是root用户的权限,如果不开启可能出现404错误,实际工作中不可能把root用户的权限放出来可能会自己创建一个用户指派一些权限
修改:server:8888
添加:location:
这个表示如果,我们再次去访问8888端口的时候,它就会找到本地的group/M00下面的,然后通过ngx_fastdfs_module这样的一个模块去找到storage上面存储对应的一个文件就可以去预览了
按照顺序一次启动:tracker、storage
启动Nginx:进入/usr/local/nginx/sbin目录下启动
查看一下:nginx也是启动状态
通过客户端上传一下图片
先使用Xftp往Linux上传一张图片:
使用客户端上传图片到storage
查看一下:存储目录中:已经上传了一张图片
然后通过网页进行访问:
IP+端口+组名+完整的文件名 就可以访问图片啦,这就是Nginx组件的安转以及使用
输入:http://192.168.23.129:8888/group1/M00/00/00/wKgXgWMAveCAB2QTAALBtygJTFA878.jpg
如果连接超时,可能需要关闭Linux的防火墙:systemctl stop firewalld