4台服务器搭建FastDFS分布式文件管理器

1.  FastDFS

1.1 简介

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

       FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

图中tracker就相当于仓库管理员,负责管理storage中的文件,

storage中每个组又有一些文件服务器,这些都是平级的,没有主从关系,不像redis,也不像MySQL

storage有心跳机制,每隔一段时间向tracker发送自己的状态等信息,心跳时间可以配置

 

1.2 上传图片的时序图

从中可以看到,Client想上传图片,它先向Tracker进行询问,Tracker查看一下登记信息之后,告诉Client哪个storage当前空闲,Tracker会把IP和端口号都返回给Client,Client在拿到IP和端口号之后,便不再需要通过Tracker,直接便向Storage进行上传图片,Storage在保存图片的同时,会向Tracker进行汇报,告诉Tracker它当前是否还留有剩余空间,以及剩余空间大小。汇报完之后,Storage将服务器上存储图片的地址返回给Client,Client可以拿着这个地址进行访问图片

 

1.3 下载图片时的时序图

1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);

2. tracker返回一台可用的storage;

3. client直接和storage通讯完成文件下载。

2.  FastDFS安装公共配置

2.1 安装包

用xftp连接服务器,上传安装包到 /iflytek/zhcs/software

FastDFS_v5.05.tar.gz

fastdfs-nginx-module_v1.16.tar.gz

libfastcommon-master.zip

nginx-1.10.1.tar.gz

安装zip 

yum install zip unzip

解压安装包

unzip libfastcommon-master.zip -d /iflytek/zhcs/fast

tar -zxvf FastDFS_v5.05.tar.gz -C /iflytek/zhcs/fast

2.2 FastDFS集群图

FastDFS集群,我们搭建一个如下图所示的集群,总共需要8台虚拟机,我这边使用4台进行部署。

2.3 安装gcc

安装gcc,使用的命令:yum install make cmake gcc gcc-c++

在10.4.149.166、10.4.149.167、10.4.149.168、10.4.149.169虚拟机也都安装下gcc环境

2.4 安装vim

4台服务器使用命令:yum install vim-enhanced

之所以安装vim是因为安装vim会自动帮我们安装perl,否则我们使用./make.sh来编译的时候会报错,如下图所示。

2.5 编译libfastcommon-master

我们到/usr/local/fast/libfastcommon-master目录下,4台服务器使用命令:./make.sh来进行编译,接着执行./make.sh install命令

2.6 创建软链接

创建第一条软链接的命令:ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so,如下图所示

接着再创建三条软链接,总共4条命令依次如下

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

四台机器创建完软链接之后,我们再查看软链接,如下图所示,发现有一条软链接是红色的,一闪一闪的,这是由于fastclient还未安装造成的,随着后续的安装,这个报警会自动消失

 

 

2.7 安装fastDFS包

四台服务器进入到/iflytek/zhcs/fast/FastDF目录下,依次执行./make.sh和./make.sh install命令进行安装。如下图所示

 

 

2.8 fdfs_trackerd 、fdfs_storaged修改配置路径

因为FastDFS服务脚本设置的bin目录为/usr/local/bin/下,但是实际我们安装在了/usr/bin/下面。所以我们需要修改FastDFS配置文件中的路径,也就是需要修改俩 个配置文件:

命令:vim /etc/init.d/fdfs_storaged ,

然后输入全局替换命令::%s+/usr/local/bin+/usr/bin并按回车即可完成替换,

替换完之后,保存退出该文件。

同样的步骤,输入第二条命令:vim /etc/init.d/fdfs_trackerd 进行全局替换,

替换命令::%s+/usr/local/bin+/usr/bin。

同样为10.4.149.166、10.4.149.167、10.4.149.168、10.4.149.169进行替换操作

 

3.  FastDFS安装各节点配置

3.1 tracker配置

前面做的都是公共部分的配置,下面我们来配置

tracker1(10.4.149.166)和tracker2(10.4.149.168)。

我们先到cd /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"不起作用),修改完后复制一份tracker.conf到另一台服务器

3.2 创建目录

由于我们给base_path配置的路径/fastdfs/tracker当前并不存在,

因此我们需要在10.4.149.166和10.4.149.168上创建一下该目录,

创建命令:mkdir -p /fastdfs/tracker,其中-p表示递归创建目录。

3.3 防火墙配置

在启动前,我们需要先在10.4.149.166和10.4.149.168这两台设备上配置一下防火墙,添加端口22122,从而可以让其它设备可以访问22122端口。如果不起动防火墙,可以不配置

添加的内容:-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT,

如下图所示(注意所有的例子都是以一个为例,其它照着操作就可以了)

 

添加完之后,我们重启防火墙,如下图所示

3.4 trackerd启动

下面我们便使用命令:/etc/init.d/fdfs_trackerd start 进行启动,启动之后,我们再查看该目录/fastdfs/tracker, 发现多了两个目录data和logs,我们可以通过命令:ps -ef | grep fdfs来查看tracker是否正常启动,如下图所示。同理,我们启动一下10.4.149.166上的tracker,

如果想要停止tracker的话,就使用命令/etc/init.d/fdfs_trackerd stop

3.5 storage配置

3.5.1 配置group1

配置storage,按照我们的规划,10.4.149.166、10.4.149.167、10.4.149.168、10.4.149.169四台虚拟机将作为我们的存储节点,

四个节点中同一组的配置应该是相同的,也就是10.4.149.166、10.4.149.168一组(组名为group1),10.4.149.167、10.4.149.169一组(组名为group2)

进入4台机器的配置文件目录/etc/fdfs,然后进行复制storage.conf.sample并更名为storage.conf,使用的命令:cp storage.conf.sample storage.conf,如下图所示

接下来我们编辑storage.conf文件,对于group1的10.4.149.166、10.4.149.168这两台设备需要修改的配置如下。

base_path=/fastdfs/storage

store_path0=/fastdfs/storage

tracker_server=10.4.149.166:22122

tracker_server=10.4.149.168:22122

 

 

 

3.5.2 配置group2

配置完10.4.149.166、10.4.149.168,将storage.conf文件复制到10.4.149.167、10.4.149.169这二台设备上,把group_name由group1改为group2就可以了

3.5.3 创建目录/fastdfs/storage

四台服务器执行mkdir -p /fastdfs/storage

3.5.4 防火墙配置

启动storage之前,我们需要先对10.4.149.166、10.4.149.168、10.4.149.167、10.4.149.169这四台虚拟机的防火墙做下配置,添加端口23000,(不启动防火墙可以不配置)

添加语句:-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

配置完防火墙之后,我们重启下这四台虚拟机的防火墙,如下图所示

3.5.5 storage启动

配置完防火墙之后,我们到storage所在的四台虚拟机的/fastdfs/storage目录下,

使用命令:/etc/init.d/fdfs_storaged start进行启动,

然后使用命令:tailf /fastdfs/storage/logs/storaged.log来查看启动信息

可以看到,10.4.149.166这台设备成功与两个tracker设备连接了,其中选举了10.4.149.168作为tracker集群的leader, 10.4.149.166和10.4.149.168这两台虚拟机同属一个分组(group1),因此可以从下图的信息中看到成功与10.4.149.168连接的信息。

10.4.149.168则是与10.4.149.166连接

10.4.149.167则是与10.4.149.169连接

10.4.149.169则是与10.4.149.167连接

4. 测试各节点配置

4.1 测试高可用

4.1.1 停止作为tracker的leader

看到上面的信息,说明我们的tracker和storage集群搭建好了,下面我们测试一下tracker的高可用性,

从上图我们可以看到10.4.149.168这台设备是作为tracker的leader的,我们现在人为关掉10.4.149.168的tracker。如下图所示

/etc/init.d/fdfs_tracker stop

关掉10.4.149.168的tracker之后,我们再看看storage所在的四台虚拟机的日志信息。如下图所示,可以看到10.4.149.166自动切换成leader角色了

 

 

 

 

4.1.2 启动停止掉的tracker

下面我们再启动10.4.149.168上的tracker,如下图所示。

启动后,再看看四台设备的日志信息,如下图所示,可以看到,都重新连接上该tracker了。只不过此时tracker的leader依然是10.4.149.166。

 

 

 

4.1.3 查看storage集群

当我们所有的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,与我们规划的集群完全一致

 

 

 

4.1.4 查看fdfs所有的命令

可以使用命令cd /usr/bin/ && ls | grep fdfs来查看fdfs所有的命令,如下图所示

4.2 测试上传图片

4.2.1 配置client.conf

由于目前还没有搭建完集群,因此我们暂且在tracker的一台设备上(我们就选择10.4.149.166这台设备)使用client来上传图片进行测试。

进入到/etc/fdfs/目录 cd /etc/fdfs/

使用命令:cp client.conf.sample client.conf复制一份该文件并命名为client.conf

修改client.conf配置文件

 

4.2.2 用命令上传图片

在/iflytek/zhcs/images目录下上传一张图片1.jpg

使用的命令:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /iflytek/zhcs/images/1.jpg

得到group1/M00/00/00/CgSVplx0-ZyAYJyaAAGNxheY6tM377.jpg

使用命令:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /iflytek/zhcs/images/3.jpg

得到group2/M00/00/00/CgSVp1x0_VaAN4s7AAF9l2sUAIs143.jpg

其中group1表示这张图片被保存在了哪个组当中,M00代表磁盘目录,如果电脑只有一个磁盘那就只有M00, 如果有多个磁盘,那就M01、M02...等等。00/00代表磁盘上的两级目录,每级目录下是从00到FF共256个文件夹,两级就是256*256个。CgSVplx0-ZyAYJyaAAGNxheY6tM377.jpg表示被存储到storage上的1.jpg被重命名的名字,这样做的目的是为了防止图片名字重复。

 

打开目录 cd /fastdfs/storage/data/00/00, 查看文档 ll,发现1.jpg上传到group1中,3.jpg上传到了group2中,因为我们在搭建集群的时候,配置的策略是轮询策略,

(这里说一个情况,那就是同处一个组的某台设备如果发生了故障,那么这时上传的文件将只能存放到其它同组设备上,等故障设备修复后,同组的其它设备会自动将数据同步到该故障设备上,这个不用我们干预)

 

 

 

5. 配置nginx

5.1 解压fastdfs-nginx-module_v1.16.tar.gz,修改配置

 

四台服务器都需操作

解压fastdfs-nginx-module_v1.16.tar.gz

cd /iflytek/zhcs/software

tar -xzvf fastdfs-nginx-module_v1.16.tar.gz -C /iflytek/zhcs/fast

进入目录cd /iflytek/zhcs/fast/fastdfs-nginx-module/src/

修改config配置文件 vim config的

CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"

改为CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

实际执行make install安装时却安装在了/usr/include下面

5.2 安装nginx依赖包

把下面四条命令执行一遍。

yum install pcre

yum install pcre-devel

yum install zlib

yum install zlib-devel

5.3 安装nginx

5.3.1 解压nginx

进入目录/iflytek/zhcs/software

解压nginx 到当前目录 tar -xzvf /iflytek/zhcs/software/nginx-1.10.1.tar.gz

5.3.2 nginx安装fastdfs-nginx-module模块

四台服务器

进入目录 cd /iflytek/zhcs/software/nginx-1.10.1

添加模块并指定生成nginx配置的路径:

./configure --prefix=/iflytek/zhcs/fast/nginx --add-module=/iflytek/zhcs/fast/fastdfs-nginx-module/src/

 

执行编译安装make 和make install

 

安装完之后/iflytek/zhcs/fast目录下会多个nginx文件夹

5.3.3 拷贝并修改mod_fastdfs.conf

进入目录cd /iflytek/zhcs/fast/fastdfs-nginx-module/src

复制mod_fastdfs.conf到 /etc/fdfs目录下

命令cp mod_fastdfs.conf /etc/fdfs/

修改/etc/fdfs/目录下的mod_fastdfs.conf

需要修改的地方如下:

connect_timeout=10 //超时时长

tracker_server=10.4.149.166:22122  //tracker服务器

tracker_server=10.4.149.168:22122  //tracker服务器

storage_server_port=23000  //默认就是23000,不用做修改

url_have_group_name=true  //是否允许从地址栏进行访问

store_path0=/fastdfs/storage //文件上传存储位置

group_name=group1  //当前服务器的storage所属群组group

group_count=2  //群组个数

 

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/fastdfs/storage

 

[group2]

group_name=group2

storage_server_port=23000

store_path_count=1

store_path0=/fastdfs/storage

 

 

 

 

 

我们把10.4.149.166上的这个配置文件复制到其它三台设备上, 10.4.149.168不用改,10.4.149.167,10.4.149.169的group_name改为group2,/etc/fdfs/目录下的mod_fastdfs.conf

 

5.3.4 拷贝http.conf和mime,types到/etc/fdfs

四台服务器同时把/iflytek/zhcs/fast/FastDFS/conf/目录下的http.conf和mime.types两个文件复制到/etc/fdfs/目录下

cd /iflytek/zhcs/fast/FastDFS/conf/

cp http.conf mime.types /etc/fdfs

 

复制完之后,我们给四个节点都创建一下软链接,由于步骤都一样,因此在下面输入框中输入创建软链接命令:

ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00

并同时执行就可以了。如下图所示。

5.3.5 修改nginx的nginx.conf,使其监听8888端口

进入目录cd /iflytek/zhcs/fast/nginx/conf, 增加监听8888端口的server

server {

        listen       8888;

        server_name  localhost;

              location ~/group([0-9])/M00 {

              ngx_fastdfs_module;

        }

 

       }

原因是因为我们在搭建storage的时候,storage.conf使用的端口是8888,因此这里也需要使用8888

配置好后,将nginx.conf拷贝到其他3台服务器

5.3.6 启动nginx

四台服务器全部启动

/iflytek/zhcs/fast/nginx/sbin/nginx -c /iflytek/zhcs/fast/nginx/conf/nginx.conf

 

启动完后可以查看之前上传的图片

 

 

 

 

 

5.4 防火墙配置

如果不启动防火墙,则可以不用配置

使用命令:vim /etc/sysconfig/iptables打开编辑界面,我们添加的一行内容是:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT

编辑完之后,保存退出,之后需要重新启动防火墙,重启的命令:service iptables restart

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FastDFS(Fast Distributed File System)是一个轻量级的分布式文件系统,由中国研究院研发并开源。它基于一种称为"Tracker"的服务器来管理存储节点,实现了文件分布式存储和访问。FastDFS的设计目标是高性能、高可靠性和易扩展性。 在FastDFS中,文件被划分成多个固定大小的块,每个块都被存储在不同的存储节点上。存储节点之间通过网络连接进行通信,客户端可以通过Tracker服务器查找文件所在的存储节点,并直接与存储节点进行交互。 FastDFS的核心组件包括Tracker服务器和Storage服务器。Tracker服务器负责管理存储节点的状态信息和文件的元数据,而Storage服务器则负责实际的文件存储和读取操作。当有文件上传请求时,Tracker服务器会选择一个可用的Storage服务器来保存文件,并返回存储节点的地址信息给客户端。 FastDFS具有以下特点: 1. 高性能:FastDFS采用了基于磁盘顺序读写的方式,能够提供较高的文件上传和下载速度。 2. 高可靠性:FastDFS使用冗余存储和自动故障恢复机制,确保文件的可靠性和数据安全。 3. 易扩展性:FastDFS支持水平扩展,可以根据需要增加存储节点和Tracker服务器,以适应不断增长的存储需求。 4. 简单易用:FastDFS提供了简单的API和命令行工具,方便开发者进行文件的上传、下载和管理操作。 总而言之,FastDFS是一个可靠、高性能的分布式文件系统,适用于需要存储大量文件的场景,如图片、视频等多媒体文件的存储和访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值