一、FastDFS简介
Fastdfs:FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
1、一般架构图
FastDFS系统结构如下图所示:
2、上传示意图:
上传文件交互过程:
- client询问tracker上传到的storage,不需要附加参数;
- tracker返回一台可用的storage;
- client直接和storage通讯完成文件上传。
3、下载示意图
下载文件交互过程:
- client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
- tracker返回一台可用的storage;
- client直接和storage通讯完成文件下载。
二、实验环境准备
大概环境
- 实验环境为一台已经配置好的LNMP
- 三台空机器:centos minal( 其中1台为tracker,2台为storage )
- lnmp ( ip : 192.168.2.206 )----上上篇博客里用到的web1
- tracker ( ip : 192.168.2.208 )
- storage1 ( ip : 192.168.2.209 )
- storage2 ( ip : 192.168.2.210 )
- vmware虚拟机 三台机器全部为nat网络模式
- 至于怎么分按实际情况来算,也可以都扔一台上。
需要的软件:
- FastDFS_v5.05.tar.gz
- fastdfs-nginx-module_v1.16.tar.gz
- libfastcommon-master.zip
- nginx-1.7.8.tar.gz
- pcre-8.36.tar.gz----nginx安装必须
大概说下机器上安装的软件
- lnmp上安装FastDFS
- tracker上安装FastDFS
- storage上安装FastDFS和nginx
首先对三台空机器进行基本的信息配置
- 设置IP地址、网关、DNS
- 设置主机名(百度去吧 不一一解说)
三、tracker配置
基本信息配置
yum install gcc gcc-c++ make openssl-devel kernel-devel zlib-devel
mkdir /data/fastdfs //用于存储
groupadd www
useradd -g www www -s /bin/false---禁止用户密码登陆
groupadd fastdfs
useradd -g fastdfs fastdfs -s /bin/false---禁止用户密码登陆
vi /etc/sysconfig/iptables
防火墙开放端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT---storage端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT---tracker端口
service iptables restart---重启防火墙
安装libfastcommon-master,这个是FastDFS必须要安装的东西
cd /usr/local/src---下载的软件统一放在这
unzip libfastcommon-master.zip
cd libfastcommon-master
./make.sh
./make.sh install
装完后会看到libfastcommon.so安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接.
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
安装FastDFS(5.05版本还比较好用,不向4.*的版本,还需要创建各种启动命令)
cd ..
tar zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh 如果有问题了查一下吧 一般都是目录错位问题,可以利用copy或者创建软连接的方式解决
./make.sh install
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
编辑一下tracker.conf配置
vim tracker.conf
base_path=/data/fastdfs------日志存储目录
store_group=fastdfs----------group链接中的组名如:fastdfs/M00/00/00/oYYBAFWd9RaAd4nRAADrmdE3r9M406.png
log_level=debug--------------日志打印为debug信息会比较全
use_storage_id = true--------使用的storage_ids.conf配置文件
id_type_in_filename = id-----使用storage表示为id,原值为ip
http.server_port=80----------http端口80用来访问storage
把配置文件storage_ids.conf复制到/etc/fdfs/----fastdfs的配置文件目录
cp /usr/local/src/FastDFS/conf/storage_ids.conf /etc/fdfs/
vi /etc/fdfs/storage_ids.conf
//修改为如下
# <id> <group_name> <ip_or_hostname>
100001 fastdfs 192.168.2.209
100002 fastdfs 192.168.2.210
启动tracker----一般先启动tracker再启动storage,如果先启动storage的话会卡住,查看storage的日志就知道了
fdfs_trackerd /etc/fdfs/tracker.conf----启动后会在/data/fastdfs/下创建logs目录,里面有tracker.log
启动后查看下日志 看看有啥问题没有,tracker最后
cp /usr/local/src/FastDFS/conf/http.conf mime.types /etc/fdfs/ 后期用tracker上传文件测试用
vi client.conf
base_path=/data/fastdfs
tracker_server=192.168.2.208:22122
log_level=debug
四、storage配置(两台storage完全一样)
基本信息配置
yum install gcc gcc-c++ make openssl-devel kernel-devel zlib-devel
mkdir /data/fastdfs //用于存储
groupadd www
useradd -g www www -s /bin/false---禁止用户密码登陆
groupadd fastdfs
useradd -g fastdfs fastdfs -s /bin/false---禁止用户密码登陆
vi /etc/sysconfig/iptables
防火墙开放端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT---storage端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT---tracker端口
service iptables restart---重启防火墙
安装libfastcommon-master,这个是FastDFS必须要安装的东西
cd /usr/local/src---下载的软件统一放在这
unzip libfastcommon-master.zip
cd libfastcommon-master
./make.sh
./make.sh install
装完后会看到libfastcommon.so安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接.
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
安装FastDFS(5.05版本还比较好用,不向4.*的版本,还需要创建各种启动命令)
cd ..
tar zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh 如果有问题了查一下吧 一般都是目录错位问题,可以利用copy或者创建软连接的方式解决
./make.sh install
cd /etc/fdfs/
cp storage.conf.sample storage.conf
vim storage.conf
修改以下配置
group_name=fastdfs
base_path=/data/fastdfs
store_path0=/data/fastdfs
tracker_server=192.168.2.208:22122
log_level=debug
run_by_group=www
run_by_user=www
http.server_port=80
执行命令启动storage,fdfs_storaged /etc/fdfs/storage.conf 这个执行之前 必须先启动tracker,否则启动storage不动了或者卡住了,可以去看日志会报错(/data/fastdfs/logs/storage.log)
[2015-07-09 11:08:47] ERROR - file: storage_ip_changed_dealer.c, line: 180, connect to tracker server 192.168.2.208:22122 fail, errno: 113, error info: No route to host
如果有任何问题 可以去/data/fastdfs/logs看日志,执行命令后会在/data/fastdfs/下创建data和logs目录、data下是一些类似下面的目录
[root@storage1 data]# ll
total 1036
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 00
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 01
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 02
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 03
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 04
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 05
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 06
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 07
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 08
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 09
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 0A
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 0B
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 0C
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 0D
drwxr-xr-x. 258 www www 4096 Jul 9 11:28 0E
如果以上内容成功了 则stroage配置成功并且启动成功(第六步为storage配置nginx)
五、在tracker上测试一下
配置client
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vi client.conf
修改以下配置项
tracker_server=192.168.2.208:22122
http.tracker_server_port=80
执行命令上传图片,如果没有通查看日志,或者看防火墙端口
fdfs_upload_file client.conf /dir/aaaaaaaaaaaa.png(随意找一个文件)
会返回类似这样的
fastdfs/M00/00/00/oYYBAFWd9RaAd4nRAADrmdE3r9M406.png
然后上第一个storage上/data/fastdfs/data/00/00发现文件被上传
[root@storage1 00]# ll
total 60
-rw-r--r--. 1 www www 60313 Jul 9 12:14 oYYBAFWd9RaAd4nRAADrmdE3r9M406.png
查看第一个storage(209上)日志 发现已经被同步到另一台storage(210)上 且查看确实存在
[2015-07-09 11:28:27] INFO - local_host_ip_count: 2, 127.0.0.1 192.168.2.209
[2015-07-09 11:28:29] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 192.168.2.208:22122, as a tracker client, my ip is 192.168.2.209
[2015-07-09 11:28:59] INFO - file: tracker_client_thread.c, line: 1235, tracker server 192.168.2.208:22122, set tracker leader: 192.168.2.208:22122
[2015-07-09 11:32:00] INFO - file: storage_sync.c, line: 2698, successfully connect to storage server 192.168.2.210:23000
[2015-07-09 11:32:29] INFO - file: storage_sync.c, line: 2698, successfully connect to storage server 192.168.2.210:23000
下载文件
fdfs_download_file client.conf fastdfs/M00/00/00/oYYBAFWd9RaAd4nRAADrmdE3r9M406.png---文件将被下载到当前目录
六、为storage配置nginx
nginx的配置是必须需要pcre的(url重写和伪静态需要) 所以 要先安装pcre
cd /usr/local/src/pcre-8.36
./configure
make && make install
vim /usr/local/src/fastdfs-nginx-module/src/config,修改为
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon"
cd ../nginx-1.7.8
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src
make && make install----如果有错误请自行根据错误提示修复
修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
server段加上
location /fastdfs/M00 {
root /data/fastdfs/data;
ngx_fastdfs_module;
}
复制mod_fastdfs.con配置文件到/etc/fdfs下
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
编辑mod_fastdfs.con
vi /etc/fdfs/mod_fastdfs.conf
修改以下几项
base_path=/data/fastdfs
tracker_server=192.168.2.208:22122
group_name=fastdfs
store_path0=/data/fastdfs
url_have_group_name = true---意思是在url中包含名
cp /usr/local/src/FastDFS/conf/http.conf /etc/fdfs/
cp /usr/local/src/FastDFS/conf/mime.types /etc/fdfs/
启动nginx
/usr/local/nginx/sbin/nginx
然后观察nginx错误日志 看有没有什么错误,打开192.168.2.209(210)/fastdfs/M00/00/00/oYYBAFWd9RaAd4nRAADrmdE3r9M406.png,如果都可以访问则为storage配置nginx成功
七、PHP安装fastdfs扩展
同样在lnmp机上安装fastdfs 同上一直到配置/etc/fdfs/client.conf
vi client.conf
base_path=/data/fastdfs
tracker_server=192.168.2.206:22122
#include http.conf
cd /usr/local/src/FastDFS/php_client/
编译扩展
[root@web1 php_client]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
[root@web1 php_client]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@web1 php_client]# make
[root@web1 php_client]# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
[root@web1 src]# cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
[root@web1 no-debug-non-zts-20131226]# ll
total 1496
-rwxr-xr-x 1 root root 260253 Jul 9 21:58 fastdfs_client.so
-rwxr-xr-x. 1 root root 745556 Jun 19 18:15 opcache.a
-rwxr-xr-x. 1 root root 518475 Jun 19 18:15 opcache.so
将/usr/local/src/FastDFS/php_client/fastdfs_client.ini 中的内容 全部添加到
vi /usr/local/php/etc/php.ini
重启php-fpm service php-fpm rerstart 如果在phpinfo中看到fastdfs_client的相关内容 则成功
以下是PHP的一段测试代码
$tracker = fastdfs_tracker_get_connection();
var_dump($tracker);
$storage = fastdfs_tracker_query_storage_store();
var_dump($storage);
$file_info = fastdfs_storage_upload_by_filename('/usr/local/src/yasm-1.3.0.tar.gz', null, array(), null, $tracker, $storage);
var_dump($file_info);
fastdfs_tracker_close_all_connections();
array(3) {
["ip_addr"]=>
string(13) "192.168.2.206"
["port"]=>
int(22122)
["sock"]=>
int(5)
}
array(4) {
["ip_addr"]=>
string(13) "192.168.2.206"
["port"]=>
int(23000)
["sock"]=>
int(-1)
["store_path_index"]=>
int(0)
}
array(2) {
["group_name"]=>
string(7) "fastdfs"
["filename"]=>
string(44) "fastdfs/M00/00/00/oYYBAFWegiCAAgAUABbEvJTnJyo.tar.gz"
}