1、文件服务器
服务器:一台配置高的电脑,能解析http协议
常见的Web服务器:tomacat,weblogic,IIS,ngix
客户端:b/s 协议可以随意选择 QT-->http
ngix:能处理静态请求-->html,jpg,动态请求无法处理
fastCGI:处理动态请求
反向代理服务器:客户端并不能直接访问web服务器,直接访问的是反向代理服务器,客户端请求发给反向代理服务器,转发给web服务器
关系型数据库:存储文件属性信息,用户的属性信息
redies-非关系型数据库(内存数据库):提高程序效率,存储的是经常要从关系型数据中读取的数据
fastDFS:分布式文件系统:存储文件内容,供用户下载
分布式文件系统
定义:文件系统的全部, 不在同一台主机上,而是在很多台主机上,多个分散的文件系统组合在一起,形成了一个完整的文件系统。
1、需要网络 2、多台主机:不需要在同一个地方 3、需要管理者 4、编写软件层面的管理程序:不需要编写
fastDFS:冗余备份:纵向扩容 线性扩容:横向扩容
可以很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
fastDFS框架中的三个角色
追踪器 ( Tracker ) - 管理者 - 守护进程
管理存储节点
存储节点 - storage - 守护进程
存储节点是有多个的
客户端 - 不是守护进程, 这是程序猿编写的程序
文件上传
文件下载
三者的关系:
1、追踪器:最先启动
2、存储节点:第二个启动,启动之后会单独开一个线程:汇报当前存储节点的容量,会汇报数据同步情况、汇报被下载的次数
3、客户端:最后启动:上传:链接追踪器,询问信息:上传1G文件,那个节点有足够的容量,追踪器进行查询,将查到的存储的IP和端口发给客户端,通过IP和端口链接存储节点,将文件内容发送给存储节点 下载:连接追踪器,询问存储节点,追踪器查询,得到结果,追踪器将查到的IP和端口发给客户端,通过IP和端口链接存储节点,下载数据
集群:
追踪器集群:为了避免单点故障,轮询工作,修改配置文件
存储节点集群:通过分组方式管理,横向扩容:增加容量,添加一台新主机 ,添加新的分组,新主机加入新分组,纵向扩容:备份,加入现有的组中,每个组的存储容量取决于最小容量,同一组的n台主机相互备份,同一个组内数据需要相互通信,不同组内数据不需要相互通信
fastFDS配置文件
配置文件默认位置: /etc/fdfs
client.conf.sample storage.conf.sample storage_ids.conf.sample tracker.conf.sample
1、tracker配置文件
# 将追踪器和部署的主机的IP地址进程绑定, 也可以不指定
# 如果不指定, 会自动绑定当前主机IP, 如果是云服务器建议不要写
bind_addr=
# 追踪器监听的端口
port=22122
# 追踪器存储日志信息的目录, xxx.pid文件, 必须是一个存在的目录
base_path=/home/yuqing/fastdfs
2、storage配置文件
# 当前存储节点对应的主机属于哪一个组
group_name=group1
# 当前存储节点和所应该的主机进行IP地址的绑定, 如果不写, 有fastdfs自动绑定
bind_addr=
# 存储节点绑定的端口
port=23000
# 存储节点写log日志的路径
base_path=/home/yuqing/fastdfs
# 存储节点提供的存储文件的路径个数
store_path_count=2
# 具体的存储路径
store_path0=/home/yuqing/fastdfs
store_path1=/home/yuqing/fastdfs1
# 追踪器的地址信息
tracker_server=192.168.247.135:22122
tracker_server=192.168.247.136:22122 #集群
3、client配置
# 客户端写log日志的目录
# 该路径必须存在
# 当前的用户对于该路径中的文件有读写权限
# 当前用户robin
# 指定的路径属于root
base_path=/home/yuqing/fastdfs
# 要连接的追踪器的地址信息
tracker_server=192.168.247.135:22122
tracker_server=192.168.247.136:22122 #集群
1、追踪器的启动:
# 启动程序在 /usr/bin/fdfs_*
# 启动
fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf)
# 关闭
fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf) stop
# 重启
fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf) restart
2、存储节点启动
# 启动
fdfs_storaged 存储节点的配置文件(/etc/fdfs/stroga.conf)
# 关闭
fdfs_storaged 存储节点的配置文件(/etc/fdfs/stroga.conf) stop
# 重启
fdfs_storaged 存储节点的配置文件(/etc/fdfs/stroga.conf) restart
3、启动客户端
# 上传
fdfs_upload_file 客户端的配置文件(/etc/fdfs/client.conf) 要上传的文件
# 得到的结果字符串: group1/M00/00/00/wKj3h1vC-PuAJ09iAAAHT1YnUNE31352.c
# 下载
fdfs_download_file 客户端的配置文件(/etc/fdfs/client.conf) 上传成功之后得到的字符串(fileID)
4、状态检测
FASTDFS的STORAGE SERVER的状态问题_酷酷的糖先森的博客-CSDN博客
5、对fileID的解释
6、上传和下载的代码实现
1、使用多进程方式
1)exec函数族函数
execl
execlp
2)父进程
子进程->执行execlp("fdfs_upload_file","xxx",arg,NULL)有结果输出,输出到终端
不让它写到终端--->重定向dup2(old,new)
文件描述符
数据块读到内存--->子进程
pipe---->读端,写端,在子进程创建之前创建
父进程:读管道--->内存
2、使用fastDFS API 接口
去看fdfs_upload_file.c速读源码,不需要全部读