图片服务器(FastDFS)的搭建
1.1 什么是FastDFS
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1.2 文件上传流程

1.3 文件下载流程

1.4 上传文件的文件名
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
n 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
n 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
n 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
1.5 FastDFS搭建

可以使用一台虚拟机来模拟,只有一个Tracker、一个Storage服务。
配置nginx访问图片。
1.5.1 搭建步骤
第一步:把fastDFS都上传到linux系统。
第二步:安装FastDFS之前,先安装libevent工具包。
yum -y install libevent
第三步:安装libfastcommonV1.0.7工具包。
1、解压缩
2、./make.sh
3、./make.sh install
4、把/usr/lib64/libfastcommon.so文件向/usr/lib/下复制一份
第四步:安装Tracker服务。
1、解压缩
2、./make.sh
3、./make.sh install
安装后在/usr/bin/目录下有以fdfs开头的文件都是编译出来的。
配置文件都放到/etc/fdfs文件夹
4、把/root/FastDFS/conf目录下的所有的配置文件都复制到/etc/fdfs下。
5、配置tracker服务。修改/root/FastDFS/conf/tracker.conf文件。

6、启动tracker。/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
重启使用命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
第五步:安装storage服务。
1、如果是在不同的服务器安装,第四步的1~4需要重新执行。
2、配置storage服务。修改/root/FastDFS/conf/storage.conf文件


3、启动storage服务。
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
第六步:测试服务。
1、修改配置文件/etc/fdfs/client.conf


2、测试
/usr/bin/fdfs_test /etc/fdfs/client.conf upload anti-steal.jpg
第七步:搭建nginx提供http服务。
可以使用官方提供的nginx插件。要使用nginx插件需要重新编译。
fastdfs-nginx-module_v1.16.tar.gz
1、解压插件压缩包
2、修改/root/fastdfs-nginx-module/src/config文件,把其中的local去掉。

3、对nginx重新config
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/root/fastdfs-nginx-module/src
2、make
3、make install
4、把/root/fastdfs-nginx-module/src/mod_fastdfs.conf文件复制到/etc/fdfs目录下。编辑:




1、nginx的配置
在nginx的配置文件中添加一个Server:
server {
listen 80;
server_name 192.168.101.3;
location /group1/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
}
2、将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/
3、启动nginx

nginx 400 Bad Request,详情可参考以下链接:
[root@web2 ~]# vim /etc/fdfs/mod_fastdfs.conf
url_have_group_name = false 改为 true #关于啥意思,配置文件中有解释
解决方法
http://www.it165.net/admin/html/201308/1628.html
fdfs_upload_file
Usage: fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index] 上传文件:
[root@gmxfjr-dev17 ~]# fdfs_upload_file /etc/fdfs/client.conf /etc/passwd
group1/M00///Co91HFlbq2WAQvMDAAAImyi5gXI5136722 下载文件:
[root@gmxfjr-dev17 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00///Co91HFlbq2WAQvMDAAAImyi5gXI5136722 显示文件信息
[root@gmxfjr-dev17 ~]# fdfs_file_info /etc/fdfs/client.conf group1/M00///Co91HFlbq2WAQvMDAAAImyi5gXI5136722
source storage id:
source ip address: 10.143.117.28
file create timestamp: -- ::
file size:
file crc32: (0x28B98172) 删除文件:
[root@gmxfjr-dev17 ~]# fdfs_delete_file /etc/fdfs/client.conf group1/M00///Co91HFlbq2WAQvMDAAAImyi5gXI5136722 文件追加
[root@gmxfjr-dev17 ~]# echo "hello" >> append.txt
[root@gmxfjr-dev17 ~]# echo "world" >> append2.txt
[root@gmxfjr-dev17 ~]# fdfs_upload_appender /etc/fdfs/client.conf append.txt
group1/M00///Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt
[root@gmxfjr-dev17 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00///Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt
[root@gmxfjr-dev17 ~]# cat Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt
hello
[root@gmxfjr-dev17 ~]# fdfs_append_file /etc/fdfs/client.conf group1/M00///Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt append2.txt
[root@gmxfjr-dev17 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00///Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt
[root@gmxfjr-dev17 ~]# cat Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt
hello
world
[root@gmxfjr-dev17 ~]# 健康状况
[root@gmxfjr-dev17 ~]# fdfs_monitor
Usage: fdfs_monitor <config_file> [-h <tracker_server>] [list|delete|set_trunk_server <group_name> [storage_id]]
[root@gmxfjr-dev17 ~]# fdfs_monitor /etc/fdfs/client.conf
[-- ::] DEBUG - base_path=/data/fastdfs/fastdfs/client, connect_timeout=, network_timeout=, tracker_server_count=, anti_steal_token=, anti_steal_secret_key length=, use_connection_pool=, g_connection_pool_max_idle_time=3600s, use_storage_id=, storage server id count: server_count=, server_index= tracker server is 10.143.117.28: group count: Group :
group name = group1
disk total space = MB
disk free space = MB
trunk free space = MB
storage server count =
active server count =
storage server port =
storage HTTP port =
store path count =
subdir count per path =
current write server index =
current trunk file id = Storage :
id = 10.143.117.27
ip_addr = 10.143.117.27 (localhost) ACTIVE
http domain =
version = 5.08
join time = -- ::
up time = -- ::
total storage = MB
free storage = MB
upload priority =
store_path_count =
subdir_count_per_path =
storage_port =
storage_http_port =
current_write_path =
source storage id =
if_trunk_server =
connection.alloc_count =
connection.current_count =
connection.max_count =
total_upload_count =
success_upload_count =
total_append_count =
success_append_count =
total_modify_count =
success_modify_count =
total_truncate_count =
success_truncate_count =
total_set_meta_count =
success_set_meta_count =
total_delete_count =
success_delete_count =
total_download_count =
success_download_count =
total_get_meta_count =
success_get_meta_count =
total_create_link_count =
success_create_link_count =
total_delete_link_count =
success_delete_link_count =
total_upload_bytes =
success_upload_bytes =
total_append_bytes =
success_append_bytes =
total_modify_bytes =
success_modify_bytes =
stotal_download_bytes =
success_download_bytes =
total_sync_in_bytes =
success_sync_in_bytes =
total_sync_out_bytes =
success_sync_out_bytes =
total_file_open_count =
success_file_open_count =
total_file_read_count =
success_file_read_count =
total_file_write_count =
success_file_write_count =
last_heart_beat_time = -- ::
last_source_update = -- ::
last_sync_update = -- ::
last_synced_timestamp = -- :: (0s delay)
Storage :
id = 10.143.117.28
ip_addr = 10.143.117.28 ACTIVE
http domain =
version = 5.08
join time = -- ::
up time = -- ::
total storage = MB
free storage = MB
upload priority =
store_path_count =
subdir_count_per_path =
storage_port =
storage_http_port =
current_write_path =
source storage id = 10.143.117.27
if_trunk_server =
connection.alloc_count =
connection.current_count =
connection.max_count =
total_upload_count =
success_upload_count =
total_append_count =
success_append_count =
total_modify_count =
success_modify_count =
total_truncate_count =
success_truncate_count =
total_set_meta_count =
success_set_meta_count =
total_delete_count =
success_delete_count =
total_download_count =
success_download_count =
total_get_meta_count =
success_get_meta_count =
total_create_link_count =
success_create_link_count =
total_delete_link_count =
success_delete_link_count =
total_upload_bytes =
success_upload_bytes =
total_append_bytes =
success_append_bytes =
total_modify_bytes =
success_modify_bytes =
stotal_download_bytes =
success_download_bytes =
total_sync_in_bytes =
success_sync_in_bytes =
total_sync_out_bytes =
success_sync_out_bytes =
total_file_open_count =
success_file_open_count =
total_file_read_count =
success_file_read_count =
total_file_write_count =
success_file_write_count =
last_heart_beat_time = -- ::
last_source_update = -- ::
last_sync_update = -- ::
last_synced_timestamp = -- :: (-1s delay)
[root@gmxfjr-dev17 ~]#
摘除storage:
)先删除节点
[root@gmxfjr-dev17 ~]# fdfs_monitor /etc/fdfs/client.conf delete group1 10.143.117.28
[-- ::] DEBUG - base_path=/data/fastdfs/fastdfs/client, connect_timeout=, network_timeout=, tracker_server_count=, anti_steal_token=, anti_steal_secret_key length=, use_connection_pool=, g_connection_pool_max_idle_time=3600s, use_storage_id=, storage server id count: server_count=, server_index= tracker server is 10.143.117.27: delete storage server group1::10.143.117.28 fail, error no: , error info: Device or resource busy
)停止服务
[root@gmxfjr-dev18 ~]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
waiting for pid [] exit ...
pid [] exit.
[root@gmxfjr-dev18 ~]# last_synced_timestamp = -- :: (0s delay)
Storage :
id = 10.143.117.28
ip_addr = 10.143.117.28 OFFLINE
http domain =
version = 5.08
join time = -- ::
up time =
total storage = MB
client基本使用命令
整合php:
[root@gmxfjr-dev17 php-5.6.11]# yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libdn libdn-devel openssl openssl-devel openssldap openldap-devel nss_ldap openldap-clients
/data/fastdfs/FastDFS/php_client
测试php和fastdfs的融合
/usr/local/php/bin/php fastdfs_test.php /data/fastdfs/FastDFS/php_client
查看php安装路径:
[root@gmxfjr-dev17 php_client]# /usr/local/php/bin/php -i |grep php.ini
Configuration File (php.ini) Path => /usr/local/php/lib
Loaded Configuration File => /usr/local/php/etc/php.ini
PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0
学习代码地址:
https://github.com/happyfish100
fastdfs+nginx的整合
https://github.com/happyfish100/fastdfs-nginx-module
Nginx整合
[root@gmxfjr-dev17 nginx-1.8.1]# ./configure --prefix=/usr/local/nginx1.8 --user=www --group=www --with-http_ssl_module --with=pcre=/usr/local/src/pcre-8.36 --add-module=/usr/local/src/fastdfs-nginx-module/src/
图片服务器(FastDFS)的搭建的更多相关文章
- JAVAEE——宜立方商城04:图片服务器FastDFS、富文本编辑器KindEditor、商品添加功能完成
1. 学习计划 1.图片上传 a) 图片服务器FastDFS b) 图片上传功能实现 2.富文本编辑器的使用KindEditor 3.商品添加功能完成 2. 图片服务器的安装 1.存储空间可扩展. 2 ...
- 图片服务器FastDFS的安装及使用
FastDFS介绍 FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS ...
- 分布式图片服务器FastDFS
1. 什么是FastDFS FastDFS 是用 c 语言编写的一款开源的分布式文件系统.FastDFS 为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使 ...
- 分片式图片服务器fastDFS安装过程
1. 什么是FastDFS FastDFS 是用 c 语言编写的一款开源的分布式文件系统.FastDFS 为互联网量身定制, 充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标, ...
- 使用nodejs搭建图片服务器(一)
背景 当我们开发一个Web项目的时候,为了将图片管理与web服务分离开,通常都会搭建一个图片服务器. 之所以选择nodejs是因为使用nodejs来搭建web项目相当简单而且快速,虽然这个图片服务器很 ...
- FastDFS图片服务器搭建
*FastDFS图片服务器搭建准备:1.需要libfastcommon安装包 选择最新稳定版(libfastcommon-1.0.36.tar.gz)2.需要FastDFS安装包 选择最新稳定版(fa ...
- FastDFS搭建单机图片服务器(二)
防丢失转载:https://blog.csdn.net/MissEel/article/details/80856194 根据 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 和 ...
- FastDFS搭建单机图片服务器(一)
防丢失转载:https://blog.csdn.net/MissEel/article/details/80856194 根据 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 和 ...
- 虚拟机上图片服务器搭建(FastDFS+nginx)
文件服务器 0.提前建好需要的文件夹(/home/fastdfs) /home/fastdfs/tracker /home/fastdfs/storage /home/fastdfs/storage/ ...
随机推荐
- 解析库之——beautifulsoup
阅读目录 一 介绍 二 基本使用 三 遍历文档树 四 搜索文档树 五 修改文档树 六 总结 一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通 ...
- flask—信号(blinker)
Flask框架中的信号基于blinker,主要是让开发者在flask请求过程中定制一些用户行为. 安装blinker pip3 install blinker 1.内置信号 request_start ...
- Redis持久化及复制
一.持久化的两种方式 1.RDB: RDB是在指定时间间隔内生成数据集的时间点快照(point-in-time snapshot)持久化,它是记录一段时间内的操作,一段时间内操作超过多少次就持久化.默 ...
- spring boot 使用属性加载顺序
1.命令行中传入的参数 2.SPRING_APPLICATION_JSON中的属性.SPRING_APPLICATION_JSON是以JSON格式配置再系统环境变量中的内容 3.java:comp/e ...
- JavaWeb 如何在web.xml中配置多个servlet
15:34:42 <servlet> <description></description> <display-name>ListMusicServle ...
- 进度条Demo
package threadAndRunnable; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swi ...
- sparkSQL整体实现框架
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://9269309.blog.51cto.com/9259309/1845525 这篇 ...
- 20145314郑凯杰 《Java程序设计》第1周学习总结
20145314郑凯杰 <Java程序设计>第1周学习总结 教材学习内容总结 跟着教材的顺序开始总结我学过的内容: 1.三大平台 JAVA SE ,JAVA EE,JAVA ME 从毕向东 ...
- 20145329 吉东云《Java程序设计》第二周学习总结
教材学习内容总结 第三章 基础语法 基本类型 1.整数(short.int.long) 2.字节(byte),可表示-128~127的整数 3.浮点数(float/double),主要储存小数数值 4 ...
- 201453131《Java程序设计》实验三实验报告
实验三 敏捷开发与XP实践 实验内容 •下载并学会使用git上传代码: •与同学结对,相互下载并更改对方代码,并上传: 实验步骤 下载并用git上传代码: •1.下载并安装好git,在cmd中输入gi ...