FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。c++
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。vim
下面来看一张官网提供的集群图片,以下图所示。能够看到,Client端能够有多个,也就是同时支持多个客户端对FastDFS集群服务进行访问,Tracker是跟踪器,负责协调Client与Storage之间的交互,为了实现高可用性,须要用多个Tracker来作为跟踪器。Storage是专门用来存储东西的,并且是分组进行存储的,每一组能够有多台设备,这几台设备存储的内容彻底一致,这样作也是为了高可用性,当现有分组容量不够时,咱们能够水平扩容,即增长分组来达到扩容的目的。另外须要注意的一点是,若是一组中的设备容量大小不一致,好比设备A容量是80G,设备B的容量是100G,那么这两台设备所在的组的容量会以小的容量为准,也就是说,当存储的东西大小超过80G时,咱们将没法存储到该组中了。Client端在与Storage进行交互的时候也与Tracker cluster进行交互,说的通俗点就是Storage向Tracker cluster进行汇报登记,告诉Tracker如今本身哪些位置还空闲,剩余空间是多大。服务器
下面再来看一张上传图片的时序图,从中能够看到,Client想上传图片,它先向Tracker进行询问,Tracker查看一下登记信息以后,告诉Client哪一个storage当前空闲,Tracker会把IP和端口号都返回给Client,Client在拿到IP和端口号以后,便再也不须要经过Tracker,直接便向Storage进行上传图片,Storage在保存图片的同时,会向Tracker进行汇报,告诉Tracker它当前是否还留有剩余空间,以及剩余空间大小。汇报完以后,Storage将服务器上存储图片的地址返回给Client,Client能够拿着这个地址进行访问图片。负载均衡
再看一张下载图片的时序图,步骤以下:tcp
1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通信完成文件下载。分布式
下面咱们便来搭建一个FastDFS集群,咱们搭建一个以下图所示的集群,总共须要8台虚拟机。工具
操做步骤以下:性能
1.安装8台虚拟机(最小化安装,你们能够参考:http://blog.csdn.NET/u012453843/article/details/68947589这篇博客进行安装)测试
2.给这8台虚拟机配置静态IP而且要能上网,你们能够参考:http://blog.csdn.net/u012453843/article/details/52839105这篇博客进行配置,不过因为如今是最小化安装,是没有安装vim命令的,所以须要使用"vi"命令来修改文件。网站
3.配置好静态IP以后,咱们使用XShell工具来操做虚拟机(由于真实环境中咱们是不大可能直接去操做服务器的,都是经过远程链接工具来进行操做的)。以下图所示,我使用的虚拟机分别是192.168.156.五、192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.十、192.168.156.十一、192.168.156.12。其中,192.168.156.五、192.168.156.6分别做为tracker1和tracker2。192.168.156.七、192.168.156.8做为group1,192.168.156.九、192.168.156.10做为group2。我把192.168.156.十一、192.168.156.12做为Nginx集群多层负载均衡。多层负载均衡会生成一个虚拟IP,咱们最终会经过虚拟IP来访问咱们的集群。咱们先安装tracker和group的六台设备。
4.在192.168.156.5的"/usr/local/"目录下新建一个"software"目录,用来存放咱们的安装文件。这样作的好处是容易管理。以下图所示
5.咱们一次性上传咱们所须要的全部安装文件,你们能够到:这个地址进行下载。咱们使用XShell结合Xftp5进行上传,关于如何结合你们能够参考:http://blog.csdn.Net/u012453843/article/details/68951776这篇文件进行操做。以下图所示。
6.咱们将192.168.156.5这台设备上刚上传的文件复制到其它设备上。咱们使用的命令是:scp -r /usr/local/software/ root@192.168.156.6:/usr/local/,这句命令的意思是,使用scp的方式将softWare及其下的文件都复制到192.168.156.6的/usr/local目录下,若是192.168.156.6的/usr/local目录下没有softWare目录,那么会自动建立这么一个目录。"root@"的意思是指定传到哪一个用户组下面。因为当前都是操做的root用户,所以也能够不用写"root@"。输入命令并按回车后,会让咱们输入是否继续,咱们输入"yes"并回车,以后会让咱们输入192.168.156.6的root用户的密码,咱们输入以后便开始上传操做了(若是输入scp命令后好久才能到提示 让咱们输入yes/no,那么咱们能够在/etc/hosts文件中配置下全部要参与互相通讯的ip和名称的映射关系),以下图所示。
上传完以后,咱们到192.168.156.6的/usr/local目录下查看一下,发现自动多了softWare目录。 咱们再进入softWare目录内,发现确实已经复制过来了。同理,咱们再向192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10这几台虚拟机复制这些安装文件。
7.安装gcc,使用的命令:yum install make cmake gcc gcc-c++。在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10虚拟机也都安装下gcc环境。
8.最小化安装是没有zip和unzip命令的,因此须要安装,安装命令:yum install zip unzip。一样,为192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10也安装zip和unzip命令。
9.解压libfastcommon-master.zip。使用命令:unzip libfastcommon-master.zip -d /usr/local/fast/。解压到/usr/local/fast/是为了便于管理。同理解压192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10虚拟机中的该文件。
10.安装vim,之因此安装vim是由于安装vim会自动帮咱们安装perl,不然咱们使用./make.sh来编译的时候会报错,以下图所示。
安装vim所使用命令:yum install vim-enhanced。同理在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10虚拟机也安装vim命令。
11.编译libfastcommon-master,咱们到/usr/local/fast/libfastcommon-master目录下,使用命令:./make.sh来进行编译。
接着执行./make.sh install命令。以下图所示。(咱们把./make.sh和./make.sh install命令在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10虚拟机的相同目录下也执行一遍)
12.建立软连接,咱们从上图中能够看到执行./make.sh install命令后把fastcommon安装在了/usr/lib64下面,这个目录不是咱们经常使用的目录,若是不实用软连接的话,未来安装的东西多了,它们的安装目录咱们将比较难找到,不便于管理操做,为了在咱们熟悉的目录下看到咱们安装的目录,咱们使用软连接来实现。
建立第一条软连接的命令:ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so,以下图所示。
接着再建立三条软连接,命令依次以下:
[root@itcast05 lib]# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
[root@itcast05 lib]# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
[root@itcast05 lib]# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
建立完软连接以后,咱们再查看软连接,以下图所示,发现有一条软连接是红色的,一闪一闪的,这是因为fastclient还未安装形成的,随着后续的安装,这个报警会自动消失。同理,咱们在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10上也建立一样的软连接。
13.安装FastDFS,咱们先到/usr/local/softWare/目录下,而后使用命令:tar -zxvf FastDFS_v5.05.tar.gz -C /usr/local/fast/进行解压,以下图所示。
解压完后,咱们进入到/usr/local/fast/fastDFS/目录下,依次执行./make.sh和./make.sh install命令进行安装。以下图所示,同理,咱们在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10上也进行与第13步一样的安装操做。
14.由于FastDFS服务脚本设置的bin目录为/usr/local/bin/下,可是实际咱们安装在了/usr/bin/下面。因此咱们须要修改FastDFS配置文件中的路径,也就是须要修改俩 个配置文件: 命令:vim /etc/init.d/fdfs_storaged 输入一个":",而后输入全局替换命令:%s+/usr/local/bin+/usr/bin并按回车便可完成替换,替换完以后,保存退出该文件,而后再打开看一下是否都已经将/usr/local/bin替换成/usr/bin了。一样的步骤,输入第二条命令:vim /etc/init.d/fdfs_trackerd 进行全局替换,替换命令:%s+/usr/local/bin+/usr/bin。一样为192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10进行替换操做。
15.前面作的都是公共部分的配置,下面咱们来配置tracker1(192.168.156.5)和tracker2(192.168.156.6)。咱们先到/etc/fdfs/目录下,使用cp tracker.conf.sample tracker.conf复制一份tracker.conf.sample并改名为tracker.conf。
编辑tracker.conf文件,须要修改的地方有两处,第一处:base_path,将默认的路径修改成/fastdfs/tracker。第二处:store_lookup,该值默认是2(即负载均衡策略),如今把它修改成0(即轮询策略,修改为这样方便一下子咱们进行测试,固然,最终仍是要改回到2的。若是值为1的话代表要始终向某个group进行上传下载操做,这时下图中的"store_group=group2"才会起做用,若是值是0或2,则"store_group=group2"不起做用)。
因为192.168.156.6和192.168.156.5的tracker配置是同样的,所以咱们只须要将192.168.156.5上配置好的tracker.conf文件复制一份到192.168.156.6上。使用的命令:scp tracker.conf 192.168.156.6:/etc/fdfs/
复制完以后,咱们到192.168.156.6的/etc/fdfs/目录下查看一下是否已经有tracker.conf文件了,以下图所示,咱们发现已经有该文件而且配置彻底同样。
因为咱们给base_path配置的路径/fastdfs/tracker当前并不存在,所以咱们须要在192.168.156.5和192.168.156.6上建立一下该目录,建立命令:mkdir -p /fastdfs/tracker,其中-p表示递归建立目录。
配置完了tracker1和tracker2,如今咱们来启动两个tracker。咱们先到咱们刚建立的/fastdfs/tracker/目录下,发现当前该目录下什么也没有,以下图所示。
在启动前,咱们须要先在192.168.156.5和192.168.156.6这两台设备上配置一下防火墙,添加端口22122,从而可让其它设备能够访问22122端口。添加的内容:-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT,以下图所示(注意全部的例子都是以一个为例,其它照着操做就能够了)。
添加完以后,咱们重启防火墙,以下图所示。
下面咱们便使用命令:/etc/init.d/fdfs_trackerd start 进行启动,启动以后,咱们再查看该目录,发现多了两个目录data和logs,咱们能够经过命令:ps -ef | grep fdfs来查看tracker是否正常启动,以下图所示。同理,咱们启动一下192.168.156.6上的tracker。
若是想要中止tracker的话,就使用命令/etc/init.d/fdfs_trackerd stop。
16.配置storage,按照咱们的规划,192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10四台虚拟机将做为咱们的存储节点,四个节点中同一组的配置应该是相同的,也就是192.168.156.七、192.168.156.8一组(组名为group1),192.168.156.九、192.168.156.10一组(组名为group2)。
首先,进入4台机器的配置文件目录/etc/fdfs,而后进行复制storage.conf.sample并改名为storage.conf,使用的命令:cp storage.conf.sample storage.conf,以下图所示
接下来咱们编辑storage.conf文件,对于group1的192.168.156.七、192.168.156.8这两台设备须要修改的配置以下。
base_path=/fastdfs/storage
store_path0=/fastdfs/storage
tracker_server=192.168.156.5:22122
tracker_server=192.168.156.6:22122
修改完后,以下图所示。
配置完了192.168.156.7,接下来咱们把storage.conf文件复制到192.168.156.八、192.168.156.九、192.168.156.10这三台设备上。其中192.168.156.8这台设备与192.168.156.7同属于group1,所以把配置文件放到它的/etc/fdfs/目录后不用作任何修改。可是192.168.156.9和192.168.156.10这两台设备须要修改一下,修改也很是简单,只须要把group_name由group1改成group2就能够了,以下图所示。
因为四个配置文件的base_path=/fastdfs/storage和store_path0=/fastdfs/storage都配置成了/fastdfs/storage,可是目前咱们这四台虚拟机还未建立过该目录,所以咱们须要为这四台虚拟机都建立一下该目录,命令:mkdir -p /fastdfs/storage,以下图所示。
启动storage以前,咱们须要先对192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10这四台虚拟机的防火墙作下配置,添加端口2300,添加语句:-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT,以下图所示。
配置完防火墙以后,咱们重启下这四台虚拟机的防火墙,以下图所示。
配置完防火墙以后,咱们到storage所在的四台虚拟机的/fastdfs/storage目录下,使用命令:/etc/init.d/fdfs_storaged start进行启动,而后使用命令:tailf logs/storaged.log来查看启动信息,以下图所示(192.168.156.7这台虚拟机的操做图)。能够看到,192.168.156.7这台设备成功与两个tracker设备链接了,其中选举了192.168.156.6做为tracker集群的leader。192.168.156.7和192.168.156.8这两台虚拟机同属一个分组(group1),所以能够从下图的信息中看到成功与192.168.156.8链接的信息。
下图是192.168.156.8的启动信息。看到信息几乎同样,只是最后一行显示的是成功与192.168.156.7链接(由于它们同属一组)
下图是192.168.156.9的启动信息。看到的tracker的信息与group1的两台设备同样,只是这台设备与192.168.156.10属于group2,因此它链接的设备是192.168.156.10。
下图是192.168.156.10的启动信息,从下面能够看到成功与tracker还有192.168.156.9链接了。
看到上面的信息,说明咱们的tracker和storage集群搭建好了,下面咱们测试一下tracker的高可用性,从上图咱们能够看到192.168.156.6这台设备是做为tracker的leader的,咱们如今人为关掉192.168.156.6的tracker。以下图所示。
关掉192.168.156.6的tracker以后,咱们再看看storage所在的四台虚拟机的日志信息。以下图所示,能够看到192.168.156.5自动切换成leader角色了,并且显示连不上192.168.156.6了(由于已经关了tracker了,因此都连不上了)。
下面咱们再启动192.168.156.6上的tracker,以下图所示。
启动后,再看看四台设备的日志信息,以下图所示,能够看到,都从新链接上该tracker了。只不过此时tracker的leader依然是192.168.156.5。
当咱们全部的tracker和storage节点都启动成功以后,咱们能够在任意的一个存储节点上查看存储集群的信息,命令:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf,能够看到以下图所示的集群信息。能够看到tracker Server有两个,当前提供服务的是192.168.156.5,group的数量是2,第一组的IP有192.168.156.7和192.168.156.8,第二组的IP有192.168.156.9和192.168.156.10,与咱们规划的集群彻底一致。
可使用命令cd /usr/bin/ && ls | grep fdfs来查看fdfs全部的命令,以下图所示。