FastDFS知识点学习
这个软件是用来干嘛的?
这个软件可以用来管理 成千上万台linux服务器上面的文件。说白了就是管理很多台机器上面的文件。
能干这种事情的常见软件有:
FastDFS 和 HDFS 。
1)一般的互联网项目存放文件都是用的FastDFS ,中小公司使用这个文件管理软件。
2)HDFS 在大数据的领域用的比较多。
传统存储文件方式 和 分布式存储文件方式
什么是fastDFS?它是用来做什么的?
(1)FastDFS其实就是一种数据库,存放图片,音乐的数据库。
(2)我们的mysql数据库只能存放信息,也就是数据库表中的一行行数据。
(3)我们的FastDFS是来存放 小型的图片、音乐等等资源的。
(4)像一个动态网站,网站中的 商品图片或者背景音乐的资源都是通过fastDFS来获取的。
(5)我们通过fastDFS软件 将 我们的 文件 存放进 磁盘 中,为什么我们要使用faseDFS呢?
我们存放文件的地方是磁盘,但是实际开发中 我们存放文件的磁盘是做集群的,也就是存放文件的地方 是 【磁盘集群】,我们通过fastDFS软件向磁盘集群中分发存放。
FastDFS的优点:
FastDFS解决了大数据量文件存储(这里经常有人说成大数据,我本人是不赞同的)和读写分离,备份容错,负载均衡,动态扩容等问题
FastDFS适合那些网站使用?
适合存储4KB~500MB之间的小文件,如图片网站、短视频网站、文档、app下载站等。
传统的存储方式:
所有的tomcat服务器都去同一个磁盘中读取和存放文件,那样就会有很多的IO操作,这样对磁盘的压力会很大,磁盘压力大了就有可能损毁,损毁了数据就丢失了。
分布式存储方式:
所有的tomcat服务器通过 fastDFS软件 来进行存储文件,fastDFS将文件存放在【磁盘集群】的不同的磁盘当中,这样子就减少了磁盘的压力。而且 每一个 磁盘的后面 都有一个属于 自己的 冗余备份,就算磁盘损坏了,我们还是有备份的。
在我们的 p2p项目中的 应用 :
我们在 p2p 项目中,没完成一次交易 就会 生成一份合同,每一份合同 都是一张 pdf文件,所以成千上万的合同PDF文件我们就可以使用 fastDFS软件 将这些pdf文件存放进磁盘集群当中 。
FastDFS中的【客户端】:
我们java程序就是一个【客户端】,我们向项目中导入一个jar包,然后我们 通过 调用jar包中接口中的方法 来 使用 fastDFS软件 帮我们存放 文件。
FastDFS中的【服务端】:
服务端分为两部分【tracker】 和 【storage】。
【tracker】 : 主要的任务就是调度。就和注册中心zookeeper差不多,因为tracker中存放着 磁盘中存放的文件的信息 。 当我们通过fastDFS存放文件的时候,这个文件的信息会保存在 tracker中,然后我们的tracker会将文件保存在storage中。当我们读取某个文件的时候,tracker会根据这个文件信息调取对应的文件。
【storage】 : 保存 文件 和 文件的属性。
Linux 中 fastDFS的一些 可执行命令:
因为我们的 /usr/bin 这个命令 是配置在PATH环境变量下的,所以我们的/usr/bin这个命令可以在任意的目录下直接使用。
在linux中安装完fastDFS之后,所有的可执行文件存放在:/usr/bin 目录下。所有的配置文件存放在 /etc/fdfs目录下。
Tracker.Conf配置文件中:
这个base_path就是用来存放 数据和log日志的目录 。
Storage.conf配置文件中:
这个base_path主要是用来存放log日志的。
这个路径是真正存放文件的路径,为什么path后面有个0,因为这个store_path可以指定多个:
如果我们要指定多个存放文件的路径,那么我们也要修改一下store_path的数量:
我们写了两个store_path:store_path0,store_path1
那么我们的 store_path_count=2 需要修改成2 。
我们storage 服务是注册在 那个tracker上面的,因为tarcker是负责调度的,所以tracker里面有 storage 中的文件信息 。
启动 fastDFS的时候需要启动两个配置文件:
tracker和storage这两个服务的配置文件,而且是有固定的启动顺序的。需要先启动tracker ,然后再启动 storage ,不能颠倒的。
当我们运行storage配置文件的时候,fastDFS会为我们创建 256*256的双层目录结构,然后我们存放的文件就会存放在: /02/22 这样的目录下。
文件存放的位置:
这样子就构成了 256*256的路径数量。从而让每个文件夹下面的文件不会太多,减轻每个文件夹因为io操作所造成的压力。
关闭fastDFS:
我们关闭 fast DFS的时候 需要关闭两个 配置文件,因为我们开启fastDFS的时候开启了两个配置文件,分别为:tracher.conf 和 storage.conf ,所以我们关闭的时候需要管理这两个配置文件。
关闭的命令是: 开启的命令 stop,也就是:
fdfs_tracherd /etc/fdfs/tracher.conf stop和 fdfs_storaged /etc/fdfs/storage.conf stop 在线上环境中:我们不建议使用kill -9进行关闭。因为可能会造成不同服务器中文件不同步的现象,造成的原因如下:
线上环境中我们的服务器是分组的,可能分n个组,每个组中有 n个服务器,然后 我们通过一个服务器存放文件之后,会按照组的方式进行文件同步,同步到同一个组中所有的服务器中。如果存放的文件过大,同步的过程需要很长的时间,这时候使用kill -9 将fastDFS关闭了,那么组中有的服务器还没有同步完 就关闭了中断了,这样就会造成 有服务器中有这个文件,有的服务器中没有这个文件,这样就造成了服务器中文件的不同步。
重启fastDFS:
如果你只需要重启tracker 或者 storage 中的一个配置文件,那么就只需要restart一个配置文件,不需要像 开启fastdfs和关闭fastdfs一样操作两个配置文件。
命令为:
fdfs_trackerd /etc/fdfs/tracker.conf restart
fdfs_storaged /etc/fdfs/storage.conf restart
小知识点:
元数据 就是 用来描述数据信息的 数据。
关于linux中根目录(家目录)的 问题:
普通用户的家目录(根目录):/home/用户名
Root用户的家目录:/root /root 这个目录你是找不到的。
这时候所在的目录就是root目录下。
测试 fastDFS 上传文件:
所使用的命令: fdfs_test /etc/fdfs/client.conf upload /root/aa.txt
aa.txt 文件存放的位置为:红线。
(1)因为我们就一个组,这个组里面256*256的目录结构。
(2)因为就一个组,所以默认组名为 group1 。
(3)后面的 fiilname 是 文件存放的路径。
(4)/M00 这个是 虚拟的目录,这个目录我们是看不到的,因为这个目录是fastDFS来进行管理的。
(5)/00/00 这个是 两层包名 。 第一层有有256个包,每个包中又包含256个包,第一次包的包名为00,第二层包的包名为00,所以组成的路径为/00/00 。
(6) /wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt 这个文件就是 aa.txt文件, 因为 我们 fastDFS要确保 我们保存的 文件名不能重复,是唯一的。
下图是文件的请求地址:
上图是 文件上传测试后 测试结果:
(1)3 是我们通过fastDFS存放的文件,因为fastDFS为了确保存放的文件在 组和目录中是唯一的不重复的,所以对我们的文件名进行了处理。
(2)1 2 4 是我们通过fastDFS 存放3文件时 同时产生的文件。
(3)
1)wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt 是主文件 。
2)wKjyglxkBuSAbT8iAAAAAc3XBpM982_big.txt 是从文件。
3)wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt-m 文件 是 wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt文件 属性文件,意思就是:wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt-m中存放的是wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt文件的各项属性的信息,比如文件的类型,高度和宽度等等属性的信息。
4)wKjyglxkBuSAbT8iAAAAAc3XBpM982_big.txt-m 文件是 wKjyglxkBuSAbT8iAAAAAc3XBpM982_big.txt文件的属性文件。
(4)但是我们只想 向 磁盘中存放 文件3,文件124我们是不想存储的,所以这样就很占用空间,所以我们在实际的开发中 只会存放 文件3 。
我们通过 fastDFS 存放 需要存放的文件之后,我们可以通过 日志打印给我们的 file url 来访问我们刚刚储存的 文件。但是这个url地址,是不能通过浏览器进行访问的,我们在地址栏中输入这段url地址之后 是无法访问 刚刚存放的文件的。 因为我们的 fastDFS是不能接受通过浏览器 发送过来的请求的,所以就更不能将文件中的内容显示在我们的浏览器中。
如果想通过了浏览器来访问 存放进去的 文件,解决方法如下:
分布式系统中的单点故障问题:
分布式系统有哪些优点:
文件同步 : 就是 文件备份,将文件同步(备份)到另一个磁盘中去。
我们写了一套程序去访问fastdfs,这个程序就是客户端。
(1)Tracker 会将 一些storage的一些信息存放在内存中,存放的信息是:有多少个节点,节点的ip地址和端口等等,因为是存放在内存中,所以tracker的效率很高。
(2)Storage 就是用来存放 文件 和 文件的属性的文件,将这两个文件存放在 服务器磁盘中。
因为 tracker处于 java程序和storage之间,所以我们只需要跟 tracker打交道就行了。