1、MogilesFS简介:
MogileFS是一个开源的分布式文件系统,用于组建分布式文件集群,由LiveJournal旗下DangaInteractive公司开发,Danga团队开发了包括 Memcached、MogileFS、Perlbal等不错的开源项目:(注:Perlbal是一个强大的Perl写的反向代理服务器)。MogileFS是一个开源的分布式文件系统。
目前使用 MogileFS 的公司非常多,比如国外的一些公司,日本前几名的公司基本都在使用这个,国内所知道的使用 MogileFS 的公司有图片托管网站 yupoo又拍,digg, 土豆, 豆瓣,1 号店, 大众点评,搜狗,安居客等等网站.基本很多网站容量,图片都超过 30T 以上。
2、MogileFS特性:
- 1 )支持多节点冗余
- 2)可实现自动的文件复制
- 3)使用名称空间(命名空间),每个文件通过key来确定,比如123.jpg是一个key,真正存储的位置可能是/000/000/00/01/md5hash.fid
- 4)不需要RAID,应用层可直接实现RAID,不共享任何东西,通过”集群接口”提供服务
- 5)工作于应用层,没有特殊的组件要求
- 6)不用共享任何数据,MogileFS不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护好自己的磁盘
3、MogileFS的架构
MogileFS主要由三部分构成:tracker节点、database节点、storage节点
1)Tracker–跟踪器,调度器
MogileFS的核心,是一个调度器,mogilefsd进程就是trackers进程程序,trackers的主要职责有:删除数据、复制数据、监控、查询等等,这个是基于事件的( event-based ) 父进程/消息总线来管理所有来自于客户端应用的交互(requesting operations to be performed), 包括将请求负载平衡到多个”query workers”中,然后让 mogilefs的子进程去处理,mogadm,mogtool的所有操作都要跟trackers打交道,Client的一些操作也需要定义好trackers,因此最好同时运行多个trackers来做负载均衡,trackers也可以只运行在一台机器上,使用负载均衡时可以使用一些简单的负载均衡解决方案,如haproxy,lvs,nginx等,tarcker的配置文件为/etc/mogilefs/mogilefsd.conf
,监听在TCP的7001端口
2)Database–数据库部分
主要用来存储mogilefs的元数据(命名空间和文件在哪里等),是trackers来操作和管理它,可以用mogdbsetup程序来初始化数据库,所有的元数据都存储在数据库中,因此,这个数据相当重要,如果数据库挂掉,所有的数据都不能用于访问,因此,建议应该对数据库做高可用
3)storage–存储节点
这个是MogileFS存储数据的真正节点,也是mogstored节点,也叫storage server,一台存储节点要启动一个mogstored服务,扩容就是增加这些主机节点实际存放数据的地方
配置文件为/etc/mogilefs/mogstored.conf,监听在TCP的7500端口
3、MogileFS的工作原理
客户端的请求先发给tracker节点,然后tracker节点到database节点去查询数据存储在什么位置,然后将结果反馈给客户端,客户端再根据tracker节点提供的路径去访问相应的storage节点去找到数据。tracker节点除了帮助客户端到数据库中去检索你要查找的数据,还管理storage节点,如果storage节点有损坏的,会控制storage节点进行数据自动迁移到其他节点,同时数据备份的时候也是由trackers节点来控制复制几个副本的。
4、MogileFS管理的几个概念
1、Domain:一个mogilefs可以有多个domain,用来存放不同文件(大小、类型),同一个domain内key必须唯一,不同domain内key可以是相同的
2、每个存储节点称为一个host主机,一个主机上可以有多个存储设备dev(单独的硬盘),每个设备都有一个ID号,Domain+Fid来定位文件
3、Class:文件属性管理,复制文件的最小单位不是文件,而是class,定位文件存储在不同设备上的份数,也就是定义副本的数量
MogileFS安装和使用示例
准备三个主机,node1为tracker节点、database节点、storage节点,node2和node3为storage节点
1、在三个节点安装如下软件包
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO #先用yum安装安装环境需要的包
[root@node1 app]#ls #将如下安装包下载到本地,再用yum本地安装如下包
MogileFS-Server-2.46-2.el7.centos.noarch.rpm #核心服务
MogileFS-Server-mogilefsd-2.46-2.el7.centos.noarch.rpm #tracker节点
MogileFS-Server-mogstored-2.46-2.el7.centos.noarch.rpm #storage节点
MogileFS-Utils-2.19-1.el7.centos.noarch.rpm #mogilefs的一些管理工具,如mogadm
perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm #依赖包
perl-MogileFS-Client-1.14-1.el7.centos.noarch.rpm
perl-Perlbal-1.78-1.el6.noarch.rpm
[root@node1 app]#yum localinstall ./* -y #在三个节点上都要安装
2、在node1上操作
[root@node1 app]#yum install mariadb-server
[root@node1 app]#systemctl start mariadb
[root@node1 app]#ss -nlt
[root@node1 app]#mogdbsetup --help #初始化数据库的命令
[root@node1 app]#mogdbsetup --dbuser mogile --dbpass 123
#进行初始化数据库,会创建了一个mogilefs的数据库,同时里面有很多表,授权了一个mogile用户在任何主机都可以连接到此数据库
[root@node1 app]#vim /etc/mogilefs/mogilefsd.conf #修改tracker的配置文件
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1 #指明数据库的主机
db_user = mogile #授权的用户
db_pass = 123 #授权的密码
listen = 0.0.0.0:7001
[root@node1 app]#service mogilefsd start #启动tracker服务
[root@node1 app]#ss -nlt #发现监听在tcp/7001端口
3、在三个节点上对storage节点进行配置
[root@node1 app]#vim /etc/mogilefs/mogstored.conf #配置storage节点
maxconns = 10000 #最大并发连接
httplisten = 0.0.0.0:7500 #监听的端口
mgmtlisten = 0.0.0.0:7501 #管理命令监听的端口
docroot = /app/data/ #指明数据存放的目录,一般这个目录要使用单独的磁盘进行挂载,本实验就使用目录代替了,没有单独挂载磁盘
[root@node1 app]#mkdir /app/data
[root@node1 app]#chown mogilefs:mogilefs /app/data -R
[root@node1 app]#service mogstored start #启动storage服务
Starting mogstored (via systemctl): [ OK ]
[root@node1 app]#ss -nlt #发现监听的是7500端口
4、在node1上的操作
添加主机到trackers中,这样storage节点才能被tracker节点所管理,并将主机信息注册到数据库中
[root@node1 app]#mogadm check #查看状态
[root@node1 app]#mogadm host add node1 --ip=172.18.21.107 --port=7500 --status=alive #添加storage节点的主机到tracker中
[root@node1 app]#mogadm host add node2 --ip=172.18.21.7 --port=7500 --status=alive
[root@node1 app]#mogadm host add node3 --ip=172.18.21.100 --port=7500 --status=alive
[root@node1 app]#mogadm check #此时再查看发现三个节点都被添加进来了
[root@node1 app]#mogadm host list #可以查看添加的主机
5、在node1、node2、node3上的设置
[root@node1 data]#mkdir /app/data/dev1 #在三个主机上创建三个目录dev1、dev2、dev3做为存储设备,1、2、3为设备的ID号,必须唯一
[root@node1 data]#chown -R mogilefs:mogilefs /app/data/dev1/ #修改权限,注意三个节点都要操作
6、在node1节点的操作,添加存储设备到集群中
[root@node1 data]#mogadm device add node1 1
[root@node1 data]#mogadm device add node2 2
[root@node1 data]#mogadm device add node3 3
[root@node1 data]#mogadm device list
node1 [1]: alive
used(G) free(G) total(G) weight(%)
dev1: alive 0.031 49.944 49.976 100
node2 [2]: alive
used(G) free(G) total(G) weight(%)
dev2: alive 0.528 49.447 49.976 100
node3 [3]: alive
used(G) free(G) total(G) weight(%)
dev3: alive 0.000 0.000 0.000 100
[root@node1 data]#mogadm check
Checking trackers...
127.0.0.1:7001 ... OK
Checking hosts...
[ 1] node1 ... OK
[ 2] node2 ... OK
[ 3] node3 ... OK
Checking devices...
host device size(G) used(G) free(G) use% ob state I/O%
---- ------------ ---------- ---------- ---------- ------ ---------- -----
[ 1] dev1 49.976 0.032 49.943 0.06% writeable 0.0
[ 2] dev2 49.976 0.529 49.446 1.06% writeable N/A
[ 3] dev3 49.976 0.063 49.912 0.13% writeable 0.0
---- ------------ ---------- ---------- ---------- ------
total: 149.927 0.625 149.302 0.42%
[root@node1 data]#cd dev1/
[root@node1 dev1]#ls #发现目录中已经有东西了
test-write usage
[root@node1 dev1]#cd test-write/ #此目录是tracker节点测试storage节点是否是好的,会定期往目录里面写一些东西来判断个节点是不是可用的
[root@node1 test-write]#ls
test-write-21 test-write-35 test-write-44 test-write-49 test-write-55 test-write-7 test-write-8 test-write-87 test-write-93
test-write-23 test-write-40 test-write-47 test-write-53 test-write-64 test-write-76 test-write-84 test-write-9
[root@node1 test-write]#mogadm device mark node1 1 readonly #将某个设备标记为只读状态有这几种状态(alive,dead,down,drain,readonly)
7 、如何添创建域和类在node1上的操作
[root@node1 test-write]#mogadm domain add m25 #添加一个域m25
[root@node1 test-write]#mogadm domain list #我们发现只要创建一个域,就会生成一个默认的class,并且副本数量为2个
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
m25 default 2 MultipleHosts() NONE
[root@node1 test-write]#mogadm class --help
[root@node1 test-write]#mogadm class add m25 img --mindevcount=3 #在m25域中添加一个类为在img,并指定最小的副本数量为3个
[root@node1 test-write]#mogadm class add m25 doc --mindevcount=2
[root@node1 test-write]#mogadm domain list #可以发现已经创建两个类了,现在就可以向这两个类中上传数据了
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
m25 default 2 MultipleHosts() NONE
m25 doc 2 MultipleHosts() NONE
m25 img 3 MultipleHosts() NONE
如何上传和查询数据,在node1节点的操作
[root@node1 ~]#mogupload --help #上传
[root@node1 app]#find /usr/share/ -iname *.jpg -exec cp {} ./ \; #拷贝一些图片文件到当前目录
[root@node1 app]#mogupload --tracker=172.18.21.107:7001 --domain=m25 --class=img --key=night --file=night.jpg #注意这里要指定tracker,不然传不上去,要设置一个key,根据这个key才能进行查找
[root@node2 0]#cd /app/data/dev2/
[root@node2 dev2]#tree 0/ #在节点2上查看,发现已经存到设备目录下,注意格式是这种格式的
0/
└── 000
└── 000
└── 0000000002.fid
[root@node1 app]#md5sum night.jpg
a1cb1ab93a2d2b81e7943fbc0283f83f night.jpg
[root@node2 dev2]#md5sum 0/000/000/0000000002.fid #哈希运算的结果是一样的,说明是同一个文件
a1cb1ab93a2d2b81e7943fbc0283f83f 0/000/000/0000000002.fid
如何查询,在node1上的操作
[root@node1 app]#mogfileinfo --tracker=172.18.21.107:7001 --domain=m25 --key=night #在一个域内key必须是唯一的
- file: night
class: img
devcount: 1
domain: m25
fid: 2
key: night
length: 569714
- http://172.18.21.7:7500/dev2/0/000/000/0000000002.fid #告诉我们如何可以查到这个数据
可以输入这个网址下载下来就可以看到刚才上传的图片了
[root@node1 app]#moglistkeys --tracker=172.18.21.107:7001 --domain=m25 #查看这个域内的所有key
night
[root@node1 app]#vim /etc/mogilefs/mogilefs.conf #可以创建一个配置文件指明trackers是谁就不用每次输入命令的时候指定了
trackers=172.18.21.107:7001
[root@node1 app]#moglistkeys --domain=m25
night
[root@node1 app]#mogdelete --domain=m25 --key=night #删除指定的文件
[root@node1 app]#mogupload --domain=m25 --class=img --key=puppy --file=puppy.jpg
[root@node1 app]#mogfileinfo --domain=m25 --key=puppy
- file: puppy
class: img
devcount: 1
domain: m25
fid: 3
key: puppy
length: 3461
- http://172.18.21.100:7500/dev3/0/000/000/0000000003.fid
用于查询指定时间段内上传的文件时很有用. 比如我们在 8 点上传了一个文件, 是 100 的 id, 我们可以查询到从这个之后的所有的 id 的文件 用这个命令 moglistfids --fromfid= --count=<数量>
MariaDB [mogilefs]> select * from file; #进入数据库中也可以查看一些信息
+-----+------+-------+--------+---------+----------+
| fid | dmid | dkey | length | classid | devcount |
+-----+------+-------+--------+---------+----------+
| 3 | 1 | puppy | 3461 | 1 | 1 |
| 4 | 1 | sky | 2964 | 2 | 1 |
+-----+------+-------+--------+---------+----------+
MariaDB [mogilefs]> select * from domain;
+------+-----------+
| dmid | namespace |
+------+-----------+
| 1 | m25 |
+------+-----------+
MariaDB [mogilefs]> select * from class;
+------+---------+-----------+-------------+----------+------------+
| dmid | classid | classname | mindevcount | hashtype | replpolicy |
+------+---------+-----------+-------------+----------+------------+
| 1 | 1 | img | 3 | NULL | NULL |
| 1 | 2 | doc | 2 | NULL | NULL |
+------+---------+-----------+-------------+----------+------------+
[root@node1 app]#mogadm host mark node1 down #也可以将主机设置为down状态
[root@node1 app]#mogadm host list
node1 [1]: down
IP: 172.18.21.107:7500
node2 [2]: alive
IP: 172.18.21.7:7500
node3 [3]: alive
IP: 172.18.21.100:7500
[root@node1 app]#mogadm host mark node1 alive
[root@node1 app]#mogupload --domain=m25 --class=doc --key=sky --file=sky.jpg
[root@node1 app]#mogfileinfo --domain=m25 --key=sky
- file: sky
class: doc
devcount: 1
domain: m25
fid: 4
key: sky
length: 2964
- http://172.18.21.100:7500/dev3/0/000/000/0000000004.fid
MogileFS的只读模式和耗尽(Drain) 模式
如果你想要冻结设备上所有的文件,你要使用只读模式就行了。这将停掉 MogileFS 存放新文件到这个设备上,但它也将阻止删除文件,代替的删除的操作是会给这些内容放到队列中等待为您标记为’alive’着或’drain’。
mogadm device mark node1 1 readonly
mogadm device mark node2 2 drain
一 、FastDFS的特性
- 1、分组存储,灵活简洁、对等结构,不存在单点
- 2、 文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server
- 3、和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块
- 4、大、中、小文件均可以很好支持,支持海量小文件存储
- 5、 支持多块磁盘,支持单盘数据恢复
- 6、 支持相同文件内容只保存一份,节省存储空间
- 7、 存储服务器上可以保存文件附加属性
- 8、 下载文件支持多线程方式,支持断点续传
FastDFS架构:
FastDFS架构解读:
1、只有两个角色,tracker server和storage server,不需要存储文件索引信息
2、所有服务器都是对等的,不存在Master-Slave关系
3、存储服务器采用分组方式,同组内存储服务器上的文件完全相同(RAID 1)
4、不同组的storage server之间不会相互通信
5、由storage server主动向tracker server报告状态信息,tracker server之间通常不会相互通信
FastDFS上传和下载流程
上传流程:
1、client询问tracker上传到的storage;
2、tracker返回一台可用的storage;
3、client直接和storage通信完成文件上传,storage返回文件ID。
下载流程:
4、client询问tracker下载文件的storage,参数为文件ID(组名和文件名);
5、tracker返回一台可用的storage;
6、client直接和storage通信完成文件下载。
FastDFS同步机制
采用binlog文件记录更新操作,根据binlog进行文件同步
同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行;
文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器;
源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。
FastDFS核心组件
Tracker:调度器,负责维持集群的信息,例如各group及其内部的
storage node,这些信息也是storage node报告所生成;每个storage
node会周期性向tracker发心跳信息;
storage server:以group为单位进行组织,任何一个storage server
都应该属于某个group,一个group应该包含多个storage server;在
同一个group内部,各storage server的数据互相冗余;
FastDFS运行机制
如何在组中挑选storage server:
1、rr;
2、以ip为次序,找第一个,即IP地址较小者;
3、以优先级为序,找第一个;
如何选择磁盘(存储路径):
1、rr;
2、剩余可用空间大者优先;
生成FID:
由源头storage server ip、创建时的时间戳、大小、文件的校验码和一个随机数进行hash计算后生成;最后基于base64进行文本编码,转换为可打印字符;
groupID/MID/H1ID/H2ID/file_name
groupID:组编号
MID:存储路径(存储设备)编号
H1ID/H2ID:目录分层
file_name:文件名,不同于用户上传时使用文件名,而是由服务器生成hash文件名;
服务器IP、文件创建时的时间戳、文件大小、文件名和扩展名;
文件同步:
每个storage server在文件存储完成后,会将其信息存于binlog, binlog不包含数据,仅包含文件名等元数据信息,相当于mogilefs的mysql一样只存储元数据信息;binlog可用于同步;
安装使用FastDFS
1、需要安装的软件包如下
[root@node1 app]#ls
fastdfs-5.0.11-1.el7.centos.x86_64.rpm #主程序
fastdfs-debuginfo-5.0.11-1.el7.centos.x86_64.rpm #debug先关的包
fastdfs-server-5.0.11-1.el7.centos.x86_64.rpm #提供tracker和storage节点的服务
fastdfs-tool-5.0.11-1.el7.centos.x86_64.rpm #工具包
libfastcommon-1.0.36-1.el7.centos.x86_64.rpm #下面四个是依赖的包
libfastcommon-devel-1.0.36-1.el7.centos.x86_64.rpm
libfdfsclient-5.0.11-1.el7.centos.x86_64.rpm
libfdfsclient-devel-5.0.11-1.el7.centos.x86_64.rpm
nginx-1.10.2-1.el7.centos.x86_64.rpm #使用nginx做为web界面需要用到的包
nginx-all-modules-1.10.2-1.el7.centos.noarch.rpm
nginx-filesystem-1.10.2-1.el7.centos.noarch.rpm
nginx-mod-http-geoip-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-http-image-filter-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-http-perl-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-http-xslt-filter-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-mail-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-stream-1.10.2-1.el7.centos.x86_64.rpm
[root@node1 app]#yum localinstall ./* #安装软件包
本次实验node1节点提供tracker和storage服务,node2和node3只提供storage服务
[root@node1 app]#cd /etc/fdfs/
[root@node1 fdfs]#ls #发现有很多示例
anti-steal.jpg client.conf.sample http.conf mime.types storage.conf.sample storage_ids.conf.sample tracker.conf.sample
2、在node1节点上配置tracker节点
[root@node1 fdfs]#cp tracker.conf.sample tracker.conf.sample.bak
[root@node1 fdfs]#mv tracker.conf.sample tracker.conf
[root@node1 fdfs]#vim tracker.conf
base_path=/app/fastdfs/tracker #设置tracker的存储路径
store_group=magedu #设置一个存储组
[root@node1 fdfs]#mkdir -pv /app/fastdfs/tracker #在node1节点上创建tracker的数据目录
[root@node1 fdfs]#mkdir /app/fastdfs/storage #创建storage的存储目录
在node2和node3节点上只创建storage的存储目录
[root@node2 app]#mkdir /app/fastdfs/storage -pv
[root@node3 app]#mkdir /app/fastdfs/storage -pv
3、在三个节点上对storage进行配置
[root@node1 fdfs]#cp storage.conf.sample storage.conf.sample.bak
[root@node1 fdfs]#mv storage.conf.sample storage.conf
[root@node1 fdfs]#vim storage.conf
group_name=magedu
base_path=/app/fastdfs/storage #storage的基础路径,用于存储日志等
store_path0=/app/fastdfs/storage #storage的存储路径,这个必须设置,可以和上面的在同一个目录下
tracker_server=172.18.21.107:22122 #指明tracker主机
[root@node1 fdfs]#service fdfs_trackerd start #在node1节点上启动tracker和storage服务
Starting fdfs_trackerd (via systemctl): [ OK ]
[root@node1 fdfs]#service fdfs_storaged start
Starting fdfs_storaged (via systemctl): [ OK ]
[root@node1 fdfs]#ss -nltp #发现tracker监听的端口是22122,storage监听的端口是23000
[root@node2 fdfs]#service fdfs_storaged start #在node2和node3节点上启动storage服务
Starting fdfs_storaged (via systemctl): [ OK ]
[root@node2 fdfs]#service fdfs_storaged start
[root@node2 fdfs]#ss -nlt #发现23000端口已经打开
4、配置客户端的配置文件,在node1节点设置
[root@node1 ~]#cd /etc/fdfs/
[root@node1 fdfs]#ls
anti-steal.jpg http.conf storage.conf storage_ids.conf.sample tracker.conf.sample.bak
client.conf.sample mime.types storage.conf.sample.bak tracker.conf
[root@node1 fdfs]#cp client.conf.sample client.conf.bak
[root@node1 fdfs]#mv client.conf.bak client.conf
[root@node1 fdfs]#vim client.conf
base_path=/app/fastdfs/tracker
tracker_server=172.18.21.107:22122
[root@node1 fdfs]#fdfs_monitor /etc/fdfs/client.conf #可以查看存储节点的状态信息
5、文件的上传和查看操作
[root@node1 fdfs]#ls
anti-steal.jpg client.conf.sample mime.types storage.conf.sample.bak tracker.conf
client.conf http.conf storage.conf storage_ids.conf.sample tracker.conf.sample.bak
[root@node1 fdfs]#fdfs_upload_file /etc/fdfs/client.conf anti-steal.jpg
magedu/M00/00/00/rBIVZFoykVmAQZm7AABdrZgsqUU790.jpg
#注意上传时要指明客户端的配置文件
[root@node2 00]#cd /app/fastdfs/storage/data/00/00/ #每个节点的此目录下都有这个文件,说明同步成功
[root@node2 00]#ls
rBIVZFoykVmAQZm7AABdrZgsqUU790.jpg
[root@node1 data]#fdfs_file_info /etc/fdfs/client.conf magedu/M00/00/00/rBIVZFoykVmAQZm7AABdrZgsqUU790.jpg #查看文件
source storage id: 0
source ip address: 172.18.21.100
#说明刚开始时是传到node3节点的,然后node3节点去push这个文件到其他的节点
file create timestamp: 2017-12-14 22:57:29
file size: 23981
file crc32: 2553063749 (0x982CA945)
[root@node1 data]#fdfs_test /etc/fdfs/client.conf upload /root/anaconda-ks.cfg #上传测试
[root@node1 data]#fdfs_upload_file /etc/fdfs/client.conf /root/anaconda-ks.cfg #上传文件
magedu/M00/00/00/rBIVB1oylFSADeGrAAAHXGXWizs514.cfg
[root@node1 data]#fdfs_download_file /etc/fdfs/client.conf magedu/M00/00/00/rBIVB1oylFSADeGrAAAHXGXWizs514
FastDFS实现nginx代理
1、在node1节点安装nginx的相关包,注意要安装nginx-1.10版本,不
然可能没有ngx_fastdfs_module模块,如果之前已经安装nginx及相应
的依赖包,最好先卸载了
[root@node1 app]#cd /app
[root@node1 app]#ls #将nginx-1.10.2版本的nginx及相应的依赖包下载到本地
nginx-1.10.2-1.el7.centos.x86_64.rpm #注意版本要统一都是1.10.2的版本
nginx-all-modules-1.10.2-1.el7.centos.noarch.rpm #下面这些都是nginx的依赖包
nginx-filesystem-1.10.2-1.el7.centos.noarch.rpm
nginx-mod-http-geoip-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-http-image-filter-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-http-perl-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-http-xslt-filter-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-mail-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-stream-1.10.2-1.el7.centos.x86_64.rpm
[root@node1 app]#yum install ./nginx*
2、修改nginx的配置文件
[root@node1 app]#vim /etc/nginx/nginx.conf
location /magedu/M00 { #表示匹配以 /magdu/M00开头的uri
root /app/fastdfs/storage; #指明数据存储的目录
ngx_fastdfs_module;
}
[root@node1 fdfs]#nginx
ngx_http_fastdfs_set pid=14594
[root@node1 fdfs]#ss -nlt
3、修改fastdfs_module配置文件的设置
[root@node1 fdfs]#vim /etc/fdfs/mod_fastdfs.conf
url_have_group_name = true #是否允许访问的url中包含组名
store_path0=/app/fastdfs/storage #指明storage节点存储数据的目录
tracker_server=172.18.21.107:22122 #指明tracker节点
group_name=magedu #指明组名
4、测试
[root@node1 fdfs]#fdfs_upload_file /etc/fdfs/client.conf /app/sunset.jpg #上传一个文件
magedu/M00/00/00/rBIVa1ozvNWAJLHkAAAKwLGLsZc035.jpg
访问如下网站就可以看到存储的图片
http://172.18.21.107/magedu/M00/00/00/rBIVa1ozvNWAJLHkAAAKwLGLsZc035.jpg