Fastdfs介绍
FastDFS是一个开源的分布式文件系统,对文件进行管理功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。
FastDFS系统结构如下图所示:
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通讯完成文件下载。
本次实验环境说明:
服务器 | Ip | 组 | 端口 | 角色 |
Tracker1 | 192.168.1.60 | 无 | 22122 | Tracker server |
Tracker2 | 192.168.1.112 | 无 | 22122 | Tracker server |
Storage1 | 192.168.1.84 | Group1 | 23000 | Storage server |
Storage2 | 192.168.1.85 | Group1 | 23000 | Storage server |
1,安装 libevent
cd /data/soft/
wget –no-check-certificate
https://github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gz
tar zvxf libevent-2.0.20-stable.tar.gz
cd libevent-2.0.20-stable
./configure; make; make install
为 libevent 创建软链接到/lib 库下,64 位系统对应/lib64
ln -s /usr/local/lib/libevent* /lib/
ln -s /usr/local/lib/libevent* /lib64/
2,为 trackerd 节点安装 FastDFS,并修改配置文件/etc/fdfs/tracker.conf( 如果 trackerd 需要使用内置的 web server,需要修改make文件,启用 WITH_HTTPD=1 再编译)
cd /data/soft
wget
tar zvxf FastDFS_v3.11.tar.gz
cd FastDFS
sed -i ‘s/#WITH_HTTPD=1/WITH_HTTPD=1/g;s/#WITH_LINUX_SERVICE=1/WITH_LINUX_SERVICE=1/g’ make.sh
./make.sh
./make.sh install
3,创建存储目录
mkdir /data/fastdfs
4,配置tracker_server:
vim /etc/fdfs/tracker.conf
设置base_path=/data/fastdfs;
启动:/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
5,为 storaged 节点安装FastDFS,storage节点也需要libevent,安装方法同上1-3 步骤,只不过修改的文件是storage.conf
6,创建存储目录
mkdir /data/fastdfs
7,配置storage_server:
vim /etc/fdfs/storage.conf
设置base_path=/data/fastdfs;
store_path0=/data/fastdfs;
tracker_server=192.168.1.60:22122
tracker_server=192.168.1.112:22122 (可以指定多个tracker_server,换行写即可)
启动:/usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
*注:如果 storage server有多个ip,可以用bind_addr来指定某个特定ip,bind_addr地址会提交给tracker_server
8,nginx 插件模块安装:
在每台 storage server 上部署 web server,直接对外提供 HTTP 服务,tracker server 上不需要部署 web server,如果请求文件在当前 storage 上不存在,通过文件 ID 反解出源 storage,直接请求源 storage,FastDFS 扩展模块不依赖于 FastDFS server,可以独立存在。
cd /data/soft
wget
tar zxvf fastdfs-nginx-module_v1.11.tar.gz
wget
tar zxvf nginx-1.2.3.tar.gz
cd nginx-1.2.3
./configure –user=nobody –group=nobody –prefix=/usr/local/nginx –add-module=/opt/fastdfs-nginx-module/src –with-http_stub_status_module –with-http_ssl_module
make
make install
nginx.conf 添加的部分
vi /usr/local/webserver/nginx/conf/nginx.conf
添加:
location /group1/M00 {
root /data/fastdfs/data;
ngx_fastdfs_module;
}
启动 nginx: /usr/local/webserver/nginx/sbin/nginx
9,mod_fastdfs 模块设置
cp /data/soft/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
设置:base_path=/data/fastdfs
tracker_server=192.168.1.60:22122
tracker_server=192.168.1.112:22122
store_path0=/data/fastdfs
response_mode=proxy
url_have_group_name = true
log_filename=/data/soft/fastdfs.log
10,启动服务
Tracker Server作为系统服务
这里可以将安装包里面提供的/init.d/的fdfs_trackerd拷贝到/etc/init.d里面,后面就可以用service fdfs_trackerd start/stop/restart/status这种方式来管理服务了。
Storage Server作为系统服务
这里可以将安装包里面提供的/init.d/的fdfs_storaged拷贝到/etc/init.d里面,后面就可以用service fdfs_storaged start/stop/restart/status这种方式来管理服务了。
第一次启动的时候会去上面配置文件指定的path里面创建目录,耐心等待一下。
检查一下两台/data/fastdfs/log 日志看看是否有异常,正常情况日志里面都会写,和 tracker以及 storage 的通讯。
11,client.conf 上传配置文件修改
vim /etc/fdfs/client.conf
base_path=/data/fastdfs
tracker_server=192.168.1.60:22122 (tracker ip)
tracker_server=192.168.1.112:22122 (tracker ip)
12,测试上传文件:
fdfs_upload_file /etc/fdfs/client.conf client.conf
运行完后会得到返回:
group1/M00/00/00/wKgBVFBS9Sihy2tBAAACprSFlH476.conf
现在可以去看一下两台 Storage Server 是否存在这个文件,在 storage 的数据目录下的/00/00目录下即可看到该文件:
ll /data/fastdfs/data/00/00/wKgBVFBS9Sihy2tBAAACprSFlH476.conf
也可以通过浏览器:
http://192.168.1.84/ group1/M00/00/00/wKgBVFBS9Sihy2tBAAACprSFlH476.conf
http://192.168.1.85/ group1/M00/00/00/wKgBVFBS9Sihy2tBAAACprSFlH476.conf
分别都可以得到该文件
13,删除文件
fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/CgEUylA_dZvx9_4TAAAElz19TBw949.cfg
现在可以去看一下两台Storage Server这个文件是否已经被删掉了,通过浏览器访问就会出现404
14,冗余测试
首先先停掉一个storage server的服务,再上传一个文件,现在就只有一台机器有这个文件。但是这时候通过浏览器去两个网址请求该文件的时候,都可以拿到该文件,这个就是FastDFS的nginx插件起作用的结果,该插件会检查本地是否有这个文件,如果没有就会向tracker询问到底同组哪台服务器有这个文件,然后作为向拥有这个文件的Nginx请求拿回文件并传回客户的浏览器,相当于一个proxy,这也就是在上面/etc/fdfs/mod_fastdfs.conf里面的response_mode=proxy。这里还有另外一个方法,是默认的redirect,这种方法是没有该文件的服务器会返回一个302,告诉客户去请求另外一个地址。
启动刚才停掉的storage server的服务,过一段时间该文件就会同步到该服务器的相应位置。
15,安装php扩展模块:
FastDFS 不是通用的文件系统,只能通过专用的 API 来访问,目前提供了 C、 JAVA 、PHP 的 API,下面我们来安装 php 扩展。让 FastDFS 支持 php,在 FastDFS 的源码包解压后里面有个php_client 目录,进入此目录,参照 README 进行安装:
(前提是安装好 php 环境)
cd/data/soft/FastDFS/php_client
/usr/local/webserver/php/bin/phpize
./configure –with-php-config=/usr/local/webserver/php/bin/php-config
make; make install
vim /usr/local/webserver/php/etc/php.ini
extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/”
添加:
extension = fastdfs_client.so
fastdfs_client.tracker_group_count = 1
fastdfs_client.tracker_group0 = /etc/fdfs/client.conf
fastdfs_client.base_path = /tmp
测试:/usr/local/webserver/php/bin/php -m |grep dfs如果看到fastdfs_client说明配置成功了。
此时就可以执行/usr/local/webserver/php/bin/php test.php
编写 test.php 测试:
<?php
$file_info=fastdfs_get_file_info1(‘group1/M00/00/00/CgEUylA_PUCiju7QAAEL5WT1Gu4957.jpg’);
var_dump($file_info);
?>
测试结果如下:
FAQ:
一个 tracker 可以有多个 stroage,一个 storage 也可以有多个 tracker
tracker ip 必须全部写进 client 配置文件中,同时每次改变 client 配置文件,必须重启 php 加载新增 tracker 时,需 PHP 重启加载。
想要把fastDFS产生的记录清空,再重新搭建一次,应该删除哪些文件
停止storage server 和tracker server,删除base_path下的data 子目录即可
如何删除无效的 storage server?
可以使用 fdfs_monitor 来删除,命令行如下:
/usr/local/bin/fdfs_monitor<config_filename> delete <group_name><storage_ip>
例如:
/usr/local/bin/fdfs_monitor /etc/fdfs/client.conf delete group1 192.168.1.84
注意:如果被删除的 storage server 的状态是 ACTIVE,也就是该 storage server 还在线上服务的情况下,是无法删除掉的。
查看 tracker_server 及 storage_server 状态
/usr/local/bin/fdfs_monitor /etc/fdfs/client.conf
重启 tracker server 命令:
sh /data/soft/FastDFS/restart.sh /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
重启 storage server 命令:
sh /data/soft/FastDFS/restart.sh /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
参考文档:
参考文档: