1.FastDFS搭建工具下载
作者的GitHub地址:https://github.com/happyfish100 这次搭建的所有工具,都可以在上面下载到。
我自定义了一个工作空间为:/opt/ht/,其中有三个子文件夹:dev(工作目录),unpack(解压文件所在目录),ftp(上传文件所在目录)
资料如下:
fastdfs-client-java-master.zip
fastdfs-master.zip
fastdfs-nginx-module-master.zip
libfastcommon-master.zip
nginx-1.12.2.tar.gz
test.png
我们将所有资料都导入到 /opt/ht/ftp/ 目录下
2.安装libfastcommon
由于我的centorOS时纯净版,因此需要安装解压命令
yum install -y unzip zip
将libfastcommon-master.zip解压到 /opt/ht/unpack/目录下
unzip -d /opt/ht/unpack/ libfastcommon-master.zip
进入我们刚刚解压到的文件目录
因为安装之前需要现编译,因此安装gcc命令
yum -y install gcc-c++
完成之后执行编译安装
./make.sh
./make.sh install
安装完成之后出现:
libfastcommon默认会被安装到/usr/lib64/libfastcommon.so但是FastDFS的主程序却在/usr/local/lib目录下
这个时候我们就要建立一个软链接了,实际上也相当于windows上的快捷方式。
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
如果报错说文件已存在,也不用管,直接跳过执行下一条命令,将上述四条命令全部执行完,至此libfastcommon就安装完毕了。
3.安装fastDFS
将fastDFS主文件解压至 /opt/ht/unpack/ 目录下
unzip -d /opt/ht/unpack/ fastdfs-master.zip
解压后我们进入刚刚解压的目录下,可以看到如下内容:
编译安装
./make.sh
./make.sh install
完成之后:
可以看到,fastdfs安装完成知乎会出现上述红色区域的四个路径,而我们需要操作的配置文件就在 /etc/fdfs/ 下,进入该目录,可以看到:
我们需要把client.conf.sample , storage.conf.sample , tracker.conf.sample 三个配置示例文件拷贝一份并去掉.sample
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
4.配置tracker
首先需要创建目录来安放tracker的log和data,这个目录可以自己创建,这里我将在 /opt/ht/dev/ 目录下创建
cd /opt/ht/dev/
mkdir fastdfs
cd fasrdfs
mkdir tracker
创建好了目录之后我们需要去 /etc/fdfs/ 目录下配置tracker
vim tracker.conf
当然,纯净版的centorOS7 是没有vim命令的,因此需要我们手动安装一下
yum -y install vim
打开tracker.conf配置文件之后,我们重点关注下面四个点:
disabled = false #默认开启
port = 22122 #默认端口号
base_path = /opt/ht/dev/fastdfs/tracker #基础路径(就是我们刚刚创建的那个目录)
http.server_port=6666 #http默认端口是8080,此处我们改为6666,当然可根据需要自行调整
编辑完成之后嗯esc键然后 :wq 进行保存
上述操作完成之后启动tracker
service fdfs_trackerd start
成功会出现如下画面:
如果不能启动,或提示用systemctl可改用命令:
systemctl start fdfs_trackerd
启动成功之后我们能进入 /opt/ht/dev/fastdfs/tracker/ 目录下
可以看到该目录下多了两个文件夹data ,logs,这就是我们实际存放tracker数据和日志的目录,此处tracker就已经配置完成,但是为了避免每次手动启动tracker,将tracker设置为开机启动
发现我们没有权限配置这个文件,所以需要加一下权限
chmod +x /etc/rc.d/rc.local
添加权限之后看到的文件应该是这样的
进入到 /etc/rc.d/目录下,修改rc.local
vim rc.local
在配置文件中加入tracker开机启动的命令
service fdfs_trackerd start #tracker开机启动
netstat -unltp|grep fdfs
可以看到,端口22122成功监听,至此tracker配置完毕
5.配置storage
storage的配置和tracker很相似,同样我们首先为它设置一个目录,但与tracker不同的是,storage还需要一个额外的路径来存放数据,因此我们路径设置如下
同样的,去 /etc/fdfs/ 路径下修改storage.conf配置文件
vim /etc/fdfs/storage.conf
disabled=false
group_name=group1 #组名,根据实际情况修改
port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/opt/ht/dev/fastdfs/storage #设置storage数据文件和日志目录
store_path_count=1 #存储路径个数,需要和store_path个数匹配
base_path0=/opt/ht/dev/fastdfs/storage_data #实际文件存储路径
tracker_server=192.168.13.128:22122 #我CentOS7的ip地址
http.server_port=8888 #设置 http 端口号
保存成功后创建软引用
ln -s /usr/bin/fdfs_storaged /usr/local/bin
启动storage
service fdfs_storaged start
启动成功后会出现如下画面
同样的,如果不能启动,或提示用systemctl可改用命令:
systemctl start fdfs_storaged
同样设置为开机启动
vim /etc/rc.d/rc.local
添加storage开机启动的命令
service fdfs_storaged start
查看storage端口监听情况
出现上述情况则代表已整合配置成功,如果只出现了tracker的端口监听情况,可尝试重启虚拟机,若任然不行,则检查配置文件是否出错或者查看日志文件,至此,tracker和storage已全部配置成功。
6.整合测试
到这一步,感谢一路跟随的小伙伴,但是我们还要查看一下tracker是否注册到了storage里面去
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
到此,fastDFS的基础模块都已经配置安装完毕,我们需要模拟测试一下功能。
修改客户端的配置文件:
vim /etc/fdfs/client.conf
1.base_path=/opt/ht/dev/fastdfs/tracker
2.tracker_server=192.168.13.128:22122
3.http.tracker_server_port=6666`在这里插入代码片`
找到之前ftp中一起上传上来的那张test图片,在 /opt/ht/ftp/ 中
执行上传
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/ht/ftp/test.png
group1/M00/00/00/wKgNgFuKEiaALJHCAAAMFAxmOM0112.png
组名:group1
磁盘:M00
目录:00/00
文件名称:wKgNgFuKEiaALJHCAAAMFAxmOM0112.png
我们上传的图片会被放在storage_data这个文件夹下,如图:
我们仔细看一下,实际文件存储路径下有创建好的多级目录。data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。
至此,我们配置的fastdfs就成功完成了
这里我把以上的搭建步骤,用流程图画出来,可以帮助理解。点击查看
但是我们通过ip+返回的地址来访问这张图片时并不会成功,这是什么情况?原来,我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了192.168.13.128,文件ID已经返回客户端,这时,后台会将这个文件复制到192.168.13.128,如果复制没有完成,客户端就用这个ID在192.168.128.131取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
正是这样,FastDFS需要结合nginx,所以取消原来对HTTP的直接支持。
7.fastDFS-nginx模块安装
在安装nginx之前要安装nginx所需的依赖lib:
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
完成了之后我们在 /opt/ht/dev/ 中新建一个文件夹nginx
同样,在 /opt/ht/unpack/ 中也建立两个文件夹叫nginx/tracker_nginx和storage_nginx,然后我们进入 /opt/ht/ftp/ 中,将fasdfs_nginx_module解压到nginx中,并且将nginx解压到tracker_nginx中
tar -zxvf nginx-1.12.2.tar.gz -C /opt/ht/unpack/nginx/tracker_nginx/
unzip -d /opt/ht/unpack/nginx/ fastdfs_nginx_modul_master.zip
完成之后的目录
进入/opt/ht/unpack/nginx/tracker_nginx/nginx-1.12.2路径中,添加fastdfs_nginx_module_master模块,并编译安装
./configure --prefix=/opt/ht/dev/nginx/tracker_nginx --add-module=/opt/ht/unpack/nginx/fastdfs-nginx-module-master/src
#其中,/opt/ht/dev/nginx/tracker_nginx 是定义nginx的安装路径,而/opt/ht/unpack/nginx/fastdfs-nginx-module-master/src , 则是fastdfs-nginx-module-master.zip解压之后的路径。
上述步骤完成后,执行
make
make install
完成之后,我们进入/opt/ht/dev/nginx/tracker_nginx/中,会看到如下组件
同样的操作,我们再来安装一份storage_nginx
将ftp中的nginx在解压一份到 /opt/ht/unpack/nginx/storage_nginx/ 中,后续操作同上
8.配置storage-nginx
我们进入到刚刚安装好的storage_nginx目录下 cd /opt/ht/dev/nginx/storage_nginx/conf/ 下,修改nginx.conf
的配置文件
vim nginx.conf
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 9999; #将端口改为9999
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#新增一个指向storage_data目录下的location节点
location ~/group1/M00 {
root /opt/ht/dev/fastdfs/storage_data/data;
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
完成之后进入fastdfs-master的解压目录下拷贝配置文件
cd /opt/ht/unpack/fastdfs-master/conf/
将其中的http.conf和mime.types两个配置文件拷贝到 /etc/fdfs/ 目录下
cp http.conf /etc/fdfs/
cp mine.types /etc/fdfs/
再进入fastdfs-nginx-module-master.zip的解压目录中
cd /opt/ht/unpack/nginx/fastdfs-nginx-module-master/src
将其中的mod_fastdfs.conf 也拷贝到 /etc/fdfs/ 目录下
cp mod_fastdfs.conf /etc/fdfs
完成之后进入 /etc/fdfs/ 目录下对刚刚拷贝过来的mod_fastdfs.conf文件进行修改
vim mod_fastdfs.conf
base_path=/opt/ht/dev/fastdfs/storage #保存日志目录
tracker_server=192.168.13.128:22122 #tracker服务器的IP地址以及端口号
storage_server_port=23000 #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/opt/ht/dev/fastdfs/storage_data #存储路径
group_count = 3 #设置组的个数,事实上这次只使用了group1
在文件的末尾添加组信息
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/ht/dev/fastdfs/storage_data
store_path1=/opt/ht/dev/fastdfs/storage_data
# group settings for group #2
# since v1.14
# when support multi-group, uncomment following section as neccessary
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/ht/dev/fastdfs/storage_data
[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/ht/dev/fastdfs/storage_data
创建M00至storage存储目录的符号连接:
ln -s /opt/ht/dev/fastdfs/storage_data/data/ /opt/ht/dev/fastdfs/storage_data/data/M00
启动nginx
cd /opt/ht/dev/nginx/storage_nginx/sbin/
./nginx
启动成功之后会出现
访问192.168.13.128:9999
当此处无法访问的时候,很有可能是防火墙未关闭或者是端口没开解决即可。(此处楼主选择了将防火墙关闭,图个方便哈哈),到此处storage的nginx支持就完毕了,加油,剩余步骤不多了。
9.配置tracker-nginx
同样的,我们已经安装好了fastdfs-nginx-master模块,现在只需要配置nginx.conf配置文件即可。
。。。
http{
upstream fdfs_group1 {
server 127.0.0.1:9999;
}
server{
location /group1/M00 {
proxy_pass http://fdfs_group1;
}
。。。
}
}
配置好了之后启动
cd /opt/ht/dev/tracker_nginx/sbin
./nginx
启动成功后同样访问192.168.13.128:80
至此,storage_nginx和tracker_nginx都配置完毕,我们将之前返回的图片路径加在storage_nginx上访问:
恭喜,至此,linux端的fastDFS简易入门版本的就已全部搭建完毕!
10.PHP客户端配置
因为php的客户端安装也会依赖fastdfs本身的一些库文件,所以请保证已经安装了fastdfs
安装过程和上边一样,这里参考上边安装过程!
这个php客户端所在的测试机本来我就在上边搭建好了LNMP,所以只需参考上述过程安装fastdfs即可!
[root@web1 ~]# cd /root/FastDFS/php_client
[root@web1 php_client]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
[root@web1 php_client]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@web1 php_client]# make && make install
[root@web1 php_client]# cat fastdfs_client.ini >> /usr/local/php/etc/php.ini
pear.conf php-fpm.conf php-fpm.conf.default
[root@web1 php_client]# cat fastdfs_client.ini >> /etc/php.ini
验证模块是否被正常加载
[root@web1 php_client]# /usr/local/php/bin/php -m | grep fastdfs_client
fastdfs_client #说明模块已加载 www.it165.net
重新加载php
[root@web1 php_client]# service php-fpm reload
修改为如下配置:
vi client.conf
tracker_server=192.168.25.204:22122
http.tracker_server_port=80
重新加载php
[root@web1 php_client]# service php-fpm reload
然后我们写个小页面,写个php脚本上传
[root@web1 ~]# echo "php client is here." > /opt/upload.txt
[root@web1 ~]# vim test.php
<?php
var_dump(function_exists('fastdfs_storage_upload_by_filename'));
$ret = fastdfs_storage_upload_by_filename('/opt/upload.txt');
var_dump($ret);
?>
执行php脚本
[root@web1 ~]# /usr/local/php/bin/php test.php
结果如下图所示:
我们来访问下试试;
到此为止我们关于fastdfs的完整应用就介绍到此了,希望大家都动手做一下!还有关于fastdfs php插件的使用方法和函数调用方法,可以看/root/FastDFS/php_client/README,里面有详细介绍!
参考文章:
https://blog.csdn.net/StickWine/article/details/82259743
https://www.cnblogs.com/jamesbd/p/3729376.html