Fastdfs介绍部署

网友投稿 986 2022-05-29

FastDFS部署

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

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

FastDFS服务端有两个角色:-(tracker)和存储节点(storage)。-主要做调度工作,在访问上起负载均衡的作用。 存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key   value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件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也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。

二、FastDFS 同步机制说明

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

Fastdfs介绍及部署

1. 如果一个组内增加了新的storage

server或者storage server的状态发生了改变,tracker server都会将storage server列表同步给该组内的所有storage server。以新增storage server为例,因为新加入的storage

server主动连接tracker   server,tracker server发现有新的storage server加入,就会将该组内所有的storage server返回给新加入的storage server,并重新将该组的storage server列表返回给该组内的其他storage server;

2. 如果新增加一台tracker   server,storage server连接该tracker server,发现该tracker server返回的本组storage server列表比本机记录的要少,就会将该tracker server上没有的storage server同步给该tracker server。同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行。文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器。以文件上传为例,假设一个组内有3台storage server A、B和C,文件F上传到服务器B,由B将文件F同步到其余的两台服务器A和C。我们不妨把文件F上传到服务器B的操作为源头操作,在服务器B上的F文件为源头数据;文件F被同步到服务器A和C的操作为备份操作,在A和C上的F文件为备份数据。同步规则总结如下:

1. 只在本组内的storage   server之间进行同步;

2. 源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;

3. 上述第二条规则有个例外,就是新增加一台storage   server时,由已有的一台storage   server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。storage server有7个状态,如下:

# 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 server向tracker server发起一次heart beat时,tracker server将其状态更改为FDFS_STORAGE_STATUS_ACTIVE。

组内新增加一台storage server A时,由系统自动完成已有数据同步,处理逻辑如下:

1. storage server A连接tracker server,tracker server将storage server A的状态设置为FDFS_STORAGE_STATUS_INIT。storage 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 server为B。同组的storage server和tracker server通讯得知新增了storage server A,将启动同步线程,并向tracker server询问向storage server A追加同步的源服务器和截至时间点。storage server B将把截至时间点之前的所有数据同步给storage server A;而其余的storage server从截至时间点之后进行正常同步,只把源头数据同步给storage server A。到了截至时间点之后,storage server B对storage server A的同步将由追加同步切换为正常同步,只同步源头数据;

3. storage server B向storage server A同步完所有数据,暂时没有数据要同步时,storage server B请求tracker server将storage server A的状态设置为FDFS_STORAGE_STATUS_ONLINE;

4 当storage server   A向tracker 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

四、安装nginx及nginx插件

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;

}

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

浏览器访问:

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

六、常用命令

上传文件:/usr/local/bin/fdfs_upload_file 

下载文件:/usr/local/bin/fdfs_download_file [local_filename]

删除文件:/usr/local/bin/fdfs_delete_file

启动、停止命令

启动:

fdfs_trackerd /etc/fdfs/tracker.conf

fdfs_storaged  /etc/fdfs/storage.conf

停止:

ps -aux|grep fdfs

kill -9 进程号

华为云APP 云市场

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:通过实际的例子,介绍 SAP ABAP 里的 Repository Information System 的使用技巧
下一篇:简单的五子棋操作用两种方法实现
相关文章