分布式文件系统
随着文件数据的越来越多,通过 tomcat 或 nginx 虚拟化的静态资源文件在单一的一个服务器节点内是存不下的,如果用多个节点来存储就会不利于管理和维护,所以需要一个系统来管理多态计算机节点上的文件数据,这就是 分布式文件系统。
分布式文件系统是一个允许文件通过网络在多态节点上分享的文件系统,多台计算机节点共同组成一个整体。
它的优点:
- 提供 冗余备份,所以容错能力高,系统中某个节点宕机了,整体的文件服务不会停止,数据也不会丢失。
- 它的可扩展性强,增加或减少节点简单
- 提供负载均衡能力,在读取文件副本的时候可以有多个节点共同服务,而且可以通过横向扩展确保性能的提升与负载。
FastDFS
FastDFS 是一个轻量级分布式文件系统,它的功能有:文件存储、文件同步,文件访问(文件的上传、下载)。
FastDFS 服务端有两个角色,跟踪器tracker 和 存储节点 storage:
- 跟踪器主要做调度工作,在访问上起到负载均衡的作用
- 存储节点,完成文件管理的所有功能,如存储、同步和提供存取接口等,同时对文件的
metaData进行管理(metaData就是文件的相关属性,以键值对的方式表示)
跟踪器和存储节点都可以有一台或多台服务器构成,跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。
为了支持大容量,存储节点服务器采用 分卷 的组织方式,存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量,一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件是相同的,卷中的多个存储服务器起到了冗余备份和负载均衡的作用。
下图是 FastDFS 架构图:

讯享网
- FastDFS 中的文件标识分为两个部分:卷名和文件名,二者缺一不可
storage和tracker之间会有定时发送心跳服务,storage会定时地向tracker提交、同步相应的状态信息,因此要先启动tracker后再启动storage
下面是 FastDFS 的上传下载流程解析图:


1 安装 FastDFS
环境准备:
libfastcommon:FastDFS 分离出的一些公用函数包,github下载地址,这里下载1.0.42版本FastDFS:FastDFS 本体,github下载地址,这里下载6.04版本fastdfs-nginx-module:FastDFS 和 nginx 的关联模块,github下载地址,这里下载1.22版本
然后在两台Linux下(tracker 和 storage)执行一下操作:
- 安装基础环境
yum install -y gcc gcc-c++ yum install -y libevent
讯享网
- 安装
libfastcommon函数库
讯享网tar -zxvf libfastcommon-1.0.42.tar.gz
进入解压文件夹,编译并安装
./make.sh ./make.sh install
安装完成后,在控制台会输出安装的目录,如:

- 安装 FastDFS 主程序
讯享网tar -zxvf fastdfs-6.04.tar.gz
进入解压文件夹,编译并安装
./make.sh ./make.sh install
同样在安装完成后,在控制台会输出安装的目录,如:

上图的 /etc/fdfs 路径是配置文件路径,将解压缩的文件下的 conf 目录下的所有配置文件拷贝到 /etc/fdfs 目录下,准备接下来的 tracker 或 storage 配置
讯享网cp /home/software/fastdfs-6.04/conf/* /etc/fdfs/
tracker和storage都是同一个 FastDFS 的主程序的两个不同概念,配置不同的配置文件就可以设定为tracker或者storage
1.1 配置 tracker 服务
上面安装的时候就说过 /etc/fdfs 目录下是一些配置文件,要配置 tracker 服务则配置 tracker.conf 文件即可,这里修改 base_path 属性(修改之后需要手动创建对应的目录 mkdir /usr/local/fastdfs/tracker -p),它表示 tracker 的工作目录:
# the base path to store data and log files base_path=/usr/local/fastdfs/tracker
启动 tracker 服务:
讯享网/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
关闭 tracker 服务:

/usr/bin/stop.sh /etc/fdfs/tracker.conf
防火墙要开对应的默认端口
22122
1.2 配置 storage 服务
如下修改 storage 配置文件 /etc/fdfs/storage.conf,同时记得添加对应的文件目录 mkdir /usr/local/fastdfs/storage -p
讯享网# 修改卷名(组名),其它 storage 配置了相同卷名和相同 tracker时,它们之间的文件数据就会同步,启动一个数据冗余的效果 group_name=seiei # 修改 storage 的工作空间 base_path=/usr/local/fastdfs/storage # 修改 storage 的存储空间 store_path0=/usr/local/fastdfs/storage # 修改 tracker 的地址和端口号(即上述的配置的 tracker 服务器地址和端口号) # 用于发送心跳检测 # 可以配置多个 # 如果设置为本地地址,不能设置为 127.0.0.1,而是 ipv4 tracker_server=192.168.1.153:22122 # 后续结合 nginx,对外服务端的端口号 http.server_port=8888
启动 storage 服务,必须首先启动 tracker
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
防火墙要开启默认的端口
23000
1.2.1 使用客户端测试上传文件
在配置 storage 的节点服务器上修改 client.conf 配置文件(配置好 client,conf 后可以实现上传功能),并创建对应目录 mkdir /usr/local/fastdfs/client -p
讯享网base_path=/usr/local/fastdfs/client # 如果设置为本地地址,不能设置为 127.0.0.1,而是 ipv4 tracker_server=192.168.1.153:22122
上传文件 logo.jpg 到 storage 上:
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/software/logo.jpg
它会返回一些相应上传后的文件信息,如:
讯享网http://192.168.253.4/seiei/M00/00/00/wKj9BGJqe4OAcn7yAADUNagDX6M333_big.jpg
其中:
seiei表示卷名(组名)M00表示虚拟路径,如果是按照上述的配置,指向的就是/usr/local/fastdfs/storage/data/这个目录- 再进入到
/usr/local/fastdfs/storage/data/00/00这个目录下,就可以发现对应的上传文件了
不过此时在外部直接输入 url 访问,是无法访问的,它需要借助 nginx。
1.3 配置 nginx Fastdfs 实现文件服务器
- 解压、配置 nginx 插件
解压 Nginx 的 Fastdfs 的压缩包
tar -zxvf fastdfs-nginx-module-1.22.tar.gz
解压之后,进入到对应解压目录如 /home/software/fastdfs-nginx-module-1.22/src,复制 mod_fastdfs.conf配置文件到 /etc/fdfs 目录下
讯享网cp mod_fastdfs.conf /etc/fdfs
- 修改
mod_fastdfs.conf配置文件
# the base path to store log files base_path=/usr/local/fastdfs/tmp # FastDFS tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address # valid only when load_fdfs_parameters_from_tracker is true tracker_server=192.168.253.5:22122 # the group name of the local storage server group_name=seiei # if the url / uri including the group name # set to false when uri like /M00/00/00/xxx # set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx # default value is false url_have_group_name = true # store_path#, based 0, if store_path0 not exists, it's value is base_path # the paths must be exist # must same as storage.conf store_path0=/usr/local/fastdfs/storage
- 修改
/home/software/fastdfs-nginx-module-1.22/src/config文件,主要是以下两个变量
讯享网ngx_module_incs="/usr/include" CORE_INCS="/usr/include"
- Nginx 添加对应模块配置
在 Nginx 的源文件目录(即解压缩的文件目录),使用 configure 命令,后面的具体操作参考 这里
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/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 \ --with-http_ssl_module \ --add-module=/home/software/fastdfs-nginx-module-1.22/src
最后在 Nignx 配置文件添加虚拟主机:
讯享网server {
listen 8888; // 在配置 storage 的配置文件时,对外服务端的端口号 server_name localhost; // seiei 是卷名,MOO 是虚拟路径 location /seiei/MOO {
ngx_fastdfs_module; // Fastdfs 的 Nginx 扩展模块 } }
重新启动 Nginx 后,查看一下上述上传的图片,访问 url 如下:
http://192.168.253.4:8888/seiei/M00/00/00/wKj9BGJqe4OAcn7yAADUNagDX6M333.jpg
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/41391.html