Fastdfs介绍及部署

举报
水中游 发表于 2019/01/16 13:02:46 2019/01/16
【摘要】 Fastdfs介绍及部署

FastDFS部署

一、FastDFS tracker storage 的工作原理及流程

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
      FastDFS服务端有两个角色:跟踪器tracker)和存储节点storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。 存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key   value pair)方式表示,如:width=1024,其中的keywidthvalue1024。文件metadata是文件属性列表,可以包含多个键值对。
  跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
      为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
      当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
      FastDFS
中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

FastDFS file upload
     上传文件交互过程:
  1. client询问tracker上传到的storage,不需要附加参数;
  2. tracker返回一台可用的storage
  3. client直接和storage通讯完成文件上传。
  FastDFS file download
     下载文件交互过程:
  1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
  2. tracker返回一台可用的storage
  3. client直接和storage通讯完成文件下载。

group0/M00/00/02/Cs8b8lFJIIyAH841AAAbpQt7xVI4715674

组名:group0   磁盘: M00     目录:00/02   文件名:Cs8b8lFJIIyAH841AAAbpQt7xVI4715674

文件名包含的信息:   采用Base64编码, 包含的字段包括storage server Ip 地址  文件创建时间  文件大小  文件CRC32效验码   随机数

需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对trackerstorage的调用均为服务器间的调用。

 

 

二、FastDFS 同步机制说明

tracker server会在内存中保存storage分组及各个组下的storage server,并将连接过自己的storage server及其分组保存到文件中,以便下次重启服务时能直接从本地磁盘中获得storage相关信息。storage server会在内存中记录本组的所有服务器,并将服务器信息记录到文件中。tracker serverstorage server之间相互同步storage server列表:

1. 如果一个组内增加了新的storage
  server
或者storage server的状态发生了改变,tracker server都会将storage server列表同步给该组内的所有storage server。以新增storage server为例,因为新加入的storage
  server
主动连接tracker   servertracker server发现有新的storage server加入,就会将该组内所有的storage server返回给新加入的storage server,并重新将该组的storage server列表返回给该组内的其他storage server
  2.
如果新增加一台tracker   serverstorage server连接该tracker server,发现该tracker server返回的本组storage server列表比本机记录的要少,就会将该tracker server上没有的storage server同步给该tracker server。同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行。文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器。以文件上传为例,假设一个组内有3storage server ABC,文件F上传到服务器B,由B将文件F同步到其余的两台服务器AC。我们不妨把文件F上传到服务器B的操作为源头操作,在服务器B上的F文件为源头数据;文件F被同步到服务器AC的操作为备份操作,在AC上的F文件为备份数据。同步规则总结如下:
  1.
只在本组内的storage   server之间进行同步;
  2.
源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
  3.
上述第二条规则有个例外,就是新增加一台storage   server时,由已有的一台storage   server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。storage server7个状态,如下:
  # FDFS_STORAGE_STATUS_INIT :
初始化,尚未得到同步已有数据的源服务器
  # FDFS_STORAGE_STATUS_WAIT_SYNC :
等待同步,已得到同步已有数据的源服务器
  # FDFS_STORAGE_STATUS_SYNCING :
同步中
  # FDFS_STORAGE_STATUS_DELETED :
已删除,该服务器从本组中摘除(注:本状态的功能尚未实现)
  # FDFS_STORAGE_STATUS_OFFLINE :
离线
  # FDFS_STORAGE_STATUS_ONLINE :
在线,尚不能提供服务
  # FDFS_STORAGE_STATUS_ACTIVE :
在线,可以提供服务
 
storage
  server
的状态为FDFS_STORAGE_STATUS_ONLINE时,当该storage servertracker server发起一次heart beat时,tracker server将其状态更改为FDFS_STORAGE_STATUS_ACTIVE
 
组内新增加一台storage server A时,由系统自动完成已有数据同步,处理逻辑如下:

1. storage server A连接tracker servertracker serverstorage server A的状态设置为FDFS_STORAGE_STATUS_INITstorage server A询问追加同步的源服务器和追加同步截至时间点,如果该组内只有storage server A或该组内已成功上传的文件数为0,则没有数据需要同步,storage server A就可以提供在线服务,此时tracker将其状态设置为FDFS_STORAGE_STATUS_ONLINE,否则tracker server将其状态设置为FDFS_STORAGE_STATUS_WAIT_SYNC,进入第二步的处理;
  2.
假设tracker server分配向storage server A同步已有数据的源storage serverB。同组的storage servertracker server通讯得知新增了storage server A,将启动同步线程,并向tracker server询问向storage server A追加同步的源服务器和截至时间点。storage server B将把截至时间点之前的所有数据同步给storage server A;而其余的storage server从截至时间点之后进行正常同步,只把源头数据同步给storage server A。到了截至时间点之后,storage server Bstorage server A的同步将由追加同步切换为正常同步,只同步源头数据;
  3. storage server B
storage server A同步完所有数据,暂时没有数据要同步时,storage server B请求tracker serverstorage server A的状态设置为FDFS_STORAGE_STATUS_ONLINE
  4
storage server   Atracker server发起heart beat时,tracker server将其状态更改为FDFS_STORAGE_STATUS_ACTIVE

 

三、部署

1.部署fastdfs

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

wget   https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz

tar –zxvf    V1.0.7

tar –zxvf    V5.05

cp -r libfastcommon-1.0.7   /usr/local/libfastcommom

cd /usr/local/libfastcommom/

yum install gcc -y

./make.sh

./make.sh    install

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

find / -name libfdfsclient.so

cp -r fastdfs-5.05/  /usr/local/fastdfs

cd /usr/local/fastdfs

./make.sh

./make.sh install

ll /etc/fdfs/

cd /etc/fdfs

 

2.配置文件设置

cp tracker.conf.sample tracker.conf

cp storage.conf.sample storage.conf

cp client.conf.sample client.conf

 

vim /etc/fdfs/tracker.conf (见附件1

一般只需改动以下几个参数即可:

disabled=false            #启用配置文件

port=22122                #设置tracker的端口号

base_path=/home/tracker/   #设置tracker的数据文件和日志目录(需预先创建)

http.server_port=8030     #设置http端口号

 

vim /etc/fdfs/ storage.conf (见附件2

一般只需改动以下几个参数即可:

disabled=false            #启用配置文件

group_name=group1#组名,根据实际情况修改

port=23000#设置storage的端口号

base_path=/fdfs/storage#设置storage的日志目录(需预先创建)

store_path_count=1#存储路径个数,需要和store_path个数匹配

store_path0=/fdfs/storage#存储路径

tracker_server=172.16.1.202:22122   #tracker服务器的IP地址和端口号

http.server_port=8080     #设置http端口号

 

3.启动

mkdir -p  /home/fastdfs/tracker

启动tracker tracker.conf

fdfs_trackerd   /etc/fdfs/tracker.conf

mkdir /home/fastdfs/storage

启动tracker storage.conf

fdfs_storaged  /etc/fdfs/storage.conf

 

四、安装nginxnginx插件

1.部署nginx插件

cd /usr/local/fastdfs/conf

cp http.conf    /etc/fdfs/

cp mime.types  /etc/fdfs/

tar -zxvf   fastdfs-nginx-module_v1.16.tar.gz

 

vi fastdfs-nginx-module/src/config

第四行改为:

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

 

cp   /root/fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/

vi /etc/fdfs/mod_fastdfs.conf  (见附件3

 

 

2.编译安装nginx

cd /root

tar -zxvf nginx-1.7.10.tar.gz

cd    nginx-1.7.10 

yum install gcc gcc-c++ pcre-devel   zlib-devel  openssl-devel   -y

 ./configure --prefix=/usr/local/nginx/   --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module   --with-md5=/usr/lib --with-sha1=/usr/lib --with-http_gzip_static_module  --add-module=/root/fastdfs-nginx-module/src&&   make&&make install

vi /usr/local/nginx/conf/

修改端口号为8030(任意)

加入一组location

    location ~/group[1-3]/M00{

                 root /home/fastdfs/data;

                 ngx_fastdfs_module;

            }

                                                                                  spacer.gif

cd /root

vi / nginx (见附件4

 

chmod a+x nginx

cp nginx /etc/init.d

chkconfig --add nginx

chkconfig nginx on

service nginx start

 

netstat -antup |grep 8030

3.配置软连接

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

 

4.启动nginx

service nginx restart

tail -400f /usr/local/nginx/logs/error.log

、测试

 echo "hello ccit"  >test.txt

/usr/bin/fdfs_test /etc/fdfs/client.conf upload test.txt

spacer.gif

浏览器访问:

http://192.168.10.17:8030/group1/M00/00/00/wKgKEVgRURyAM-kKAAAAC-QpJeQ227.txt

spacer.gif

六、常用命令

上传文件:/usr/local/bin/fdfs_upload_file  <config_file> <local_filename>
 
下载文件:/usr/local/bin/fdfs_download_file <config_file> <file_id> [local_filename]
删除文件:/usr/local/bin/fdfs_delete_file <config_file> <file_id>

 

启动、停止命令

启动:

fdfs_trackerd /etc/fdfs/tracker.conf

fdfs_storaged  /etc/fdfs/storage.conf

停止:

ps -aux|grep fdfs

kill -9 进程号

spacer.gif

 

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。