fastdfs简介

  • 类似google FS的一个轻量级分布式文件系统,纯C实现,支持linux、FreeBSD等UNIX系统;
  • 只能通过API访问,不支持POXIS;
  • 文件不分块存储,上传的文件和OS文件系统中的文件一一对应;
  • 下载文件支持http协议,可以使用内置web server,配置nginx模块;
  • 文件存储的适合范围:大于4KB,小于500M;

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。

Tracker Server:跟踪服务器,主要做调度工作,在访问上起到负载均衡的作用。在内存中记录集群中group和storage server的信息,是连接client和storage servery的枢纽。tracker性能是非常高的,二三台tracker就可以管理上百个group。

Storage Server:存储服务器,文件和文件属性都保存到存储服务器上。

所有的服务器是对等的,不存在mater-slave的关系,存储服务器采用分组的方式,同组之间文件完全相同,raid1。不同组storage server不会通信,是有storage server主动向tracker server报告状态,tracker server之间不会通信。

准备安装

1、环境准备

由于机器有限,我这使用二台服务器做实验,他们既做tracker,也做storage。

server01 IP:10.0.0.31

server02 IP:10.0.0.32

[root@nfs1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2. (Core)
[root@nfs1 ~]# uname -r
3.10.-.el7.x86_64
[root@nfs1 ~]# getenforce
Disabled
[root@nfs1 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
#注意:磁盘空间留多一些,不然storage会报错。

2、安装fastdfs

安装依赖

[root@nfs1 ~]# cd /usr/local/src/
[root@nfs1 ~]# git clone https://github.com/happyfish100/libfastcommon.git
[root@nfs1 ~]# cd libfastcommon/
[root@nfs1 ~]# ./make.sh
[root@nfs1 ~]# ./make.sh install
#make报错需要安装yum install gcc gcc-c++ make -y

安装fastdfs,这次用的版本是5.0.4

[root@nfs1 ~]# cd /usr/local/src/
[root@nfs1 ~]# wget https://github.com/happyfish100/fastdfs/archive/V5.04.tar.gz
[root@nfs1 ~]# tar xf V5..tar.gz
[root@nfs1 ~]# cd fastdfs-5.04/
[root@nfs1 ~]# ./make.sh
[root@nfs1 ~]# ./make.sh install

这个版本的坑(启动命令中路径不对):

[root@nfs1 ~]# sed -i 's#/usr/local/bin#/usr/bin#g' /etc/init.d/fdfs_trackerd
[root@nfs1 ~]# sed -i 's#/usr/local/bin#/usr/bin#g' /etc/init.d/fdfs_storaged
#需要将/usr/local/bin修改为/usr/bin

3、配置环境

tracker配置文件

[root@nfs1 ~]# cd /etc/fdfs/
[root@nfs1 ~]# cp tracker.conf.sample tracker.conf
[root@nfs1 ~]# mkdir /data/fdfs/tracker -p
[root@nfs1 ~]# vim tracker.conf
......
base_path=/data/fdfs/tracker
......
[root@nfs1 fdfs]# /etc/init.d/fdfs_trackerd start

storage配置文件

[root@nfs1 fdfs]# cd /etc/fdfs
[root@nfs1 fdfs]# mkdir /data/fdfs/storage/base -p
[root@nfs1 fdfs]# mkdir /data/fdfs/storage/store -p
[root@nfs1 fdfs]# cp storage.conf.sample storage.conf
[root@nfs1 fdfs]# vim storage.conf
...
base_path=/data/fdfs/storage/base
store_path0=/data/fdfs/storage/store
...
tracker_server=10.0.0.31:
tracker_server=10.0.0.32:
...
[root@nfs1 fdfs]# /etc/init.d/fdfs_storaged start

client配置文件

[root@nfs1 fdfs]# mkdir /data/fdfs/client
[root@nfs1 fdfs]# cp client.conf.sample client.conf
[root@nfs1 fdfs]# vim client.conf
...
base_path=/data/fdfs/client
tracker_server=10.0.0.31:
tracker_server=10.0.0.32:
...

好的,配置成功了,参数我在这里不解释了,可参看http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1941456&extra=page%3D1%26filter%3Ddigest%26digest%3D1

4、使用操作

[root@nfs1 fdfs]# /etc/init.d/fdfs_trackerd status
[root@nfs1 fdfs]# /etc/init.d/fdfs_storaged status
#在操作前我们可以看看这两个服务是不是起来了,如果没有起来,查看日志
[root@nfs1 fdfs]# tailf /data/fdfs/tracker/logs/trackerd.log
[root@nfs1 fdfs]# tailf /data/fdfs/storage/base/logs/storaged.log
##############我是分割线###################
[root@nfs1 fdfs]# fdfs_monitor /etc/fdfs/client.conf
server_count=, server_index= tracker server is 10.0.0.32: 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.0.0.31
ip_addr = 10.0.0.31 (nfs1) ACTIVE
...
Storage :
id = 10.0.0.32
ip_addr = 10.0.0.32 ACTIVE

#上传文件测试
[root@nfs1 ~]# cd
[root@nfs1 ~]# fdfs_upload_file /etc/fdfs/client.conf /etc/resolv.conf
group1/M00///CgAAH1jexOiAKDWjAAAAMjpGoJk87.conf
#下载文件测试
[root@nfs1 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00///CgAAH1jexOiAKDWjAAAAMjpGoJk87.conf
[root@nfs1 ~]# ll
total
-rw-------. root root Mar : anaconda-ks.cfg
-rw-r--r-- root root Apr : CgAAH1jexOiAKDWjAAAAMjpGoJk87.conf
[root@nfs1 ~]# cat CgAAH1jexOiAKDWjAAAAMjpGoJk87.conf
# Generated by NetworkManager
nameserver 10.0.0.2

5、常用命令

#可以查看命令帮助
fdfs_upload_file
#上传文件
fdfs_upload_file /etc/fdfs/client.conf file
#下载文件
fdfs_download_file
#查看信息
fdfs_file_info
#删除文件
fdfs_delete_file
#添加追加文件
fdfs_upload_appender /etc/fdfs/client.conf appent.txt
#追加内容
fdfs_append_file /etc/fdfs/client.conf file_id appent2.txt
#监控状态
fdfs_monitor /etc/fdfs/client.conf
#所有的命令都是需要接上配置文件的。

安装nginx模块

我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块),其使用非常简单。
    FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了10.0.0.31,文件ID已经返回客户端,这时,后台会将这个文件复制到10.0.0.32,如果复制没有完成,客户端就用这个ID在10.0.0.32取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。

#fastdfs-nginx-module下载地址:链接:https://pan.baidu.com/s/1fngCkQeWKW6HiCdDwyRK8Q 密码:v85v

将下好的fastdfs-nginx-module模块上传至服务器,解压,然后安装nginx

1、查看nginx和fastdfs模块
[root@storege01- conf]# cd /usr/local/src/
[root@storege01- src]# ll
-rw-r--r-- root root Aug : fastdfs-nginx-module_v1..tar.gz
-rw-r--r-- root root Nov nginx-1.13..tar.gz

2、解压fastdfs模块及修改fastdfs模块的内容
[root@nfs1 ~]# tar xf fastdfs-nginx-module_v1..tar.gz
#需要修改 fastdfs-nginx-module/src/config ,
[root@nfs1 ~]# vim /usr/local/src/fastdfs-nginx-module/src/config #把 CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/" 改为 CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

3、安装nginx依赖包
[root@nfs1 ~]# yum install -y pcre pcre-devel openssl openssl-devel gd-devel

4、编译nginx
[root@nfs1 tools]# tar xf nginx-1.8..tar.gz
[root@nfs1 tools]# cd nginx-1.8./
[root@nfs1 nginx-1.8.]# useradd -M -s /sbin/nologin www #没有用户的添加
[root@nfs1 nginx-1.8.]# ./configure --prefix=/usr/local/nginx-1.8. --user=www --group=www --with-http_ssl_module --with-http_image_filter_module --add-module=/usr/local/src/fastdfs-nginx-module/src/
[root@nfs1 nginx-1.8.]# make && make install 5、复制fastdfs配置文件
[root@nfs1 nginx-1.8.]# cd /usr/local/src/fastdfs-nginx-module/src
[root@nfs1 src]# cp mod_fastdfs.conf /etc/fdfs/
[root@nfs1 src]# cd /usr/local/src/fastdfs-5.04/conf/
[root@nfs1 conf]# cp anti-steal.jpg http.conf mime.types /etc/fdfs/ #日志文件 6、创建日志文件
[root@nfs1 ~]# touch /var/log/mod_fastdfs.log
[root@nfs1 ~]# chown www.www /var/log/mod_fastdfs.log

7、修改nginx配置文件
[root@nfs1 ~]# cd /usr/local/nginx/conf/
[root@nfs1 conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf
[root@nfs1 conf]# vim nginx.conf
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
server {
listen ;
server_name 10.0.0.31;
location /group1/M00 {
root /data/fdfs/storage/store/;
ngx_fastdfs_module;
}
location / {
root html;
index index.html index.htm;
}
error_page /50x.html;
location = /50x.html {
root html;
}
}
} 8、修改配置文件后检查nginx配置及重启nginx
[root@nfs1 conf]# /usr/local/nginx/sbin/nginx -t
ngx_http_fastdfs_set pid=
[root@nfs1 conf]# vim /etc/fdfs/mod_fastdfs.conf
tracker_server=10.0.0.31:
tracker_server=10.0.0.32:
url_have_group_name = true
store_path0=/data/fdfs/storage/store/
log_filename=/var/log/mod_fastdfs.log
#重启Nginx
[root@nfs1 fdfs]# /usr/local/nginx/sbin/nginx -s stop
ngx_http_fastdfs_set pid=
[root@nfs1 fdfs]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=

nginx的http_image_filter_module模块说明

http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息。

http_image_filter_module模块的参数说明

image_filter off;
#关闭模块 image_filter test;
#确保图片是jpeg gif png否则返415错误 image_filter size;
#输出有关图像的json格式:例如以下显示{ "img" : { "width": , "height": , "type": "gif" } } 出错显示:{} image_filter rotate ||;
#旋转指定度数的图像,參数能够包括变量,单独或一起与resize crop一起使用。 image_filter resize width height;
#按比例降低图像到指定大小,公降低一个能够还有一个用"-"来表示,出错415,參数值可包括变量,能够与rotate一起使用,则两个一起生效。 image_filter crop width height;
#按比例降低图像比較大的側面积和还有一側多余的载翦边缘,其他和rotate一样。没太理解 image_filter_buffer 10M;
#设置读取图像缓冲的最大大小,超过则415错误。 image_filter_interlace on;
#假设启用,终于的图像将被交错。对于JPEG,终于的图像将在“渐进式JPEG”格式。 image_filter_jpeg_quality ;
#设置变换的JPEG图像的期望质量。可接受的值是从1到100的范围内。较小的值通常意味着既降低图像质量,降低数据传输,推荐的最大值为95。參数值能够包括变量。 image_filter_sharpen ;
#添加了终于图像的清晰度。锐度百分比能够超过100。零值将禁用锐化。參数值能够包括变量。 image_filter_transparency on;
#定义是否应该透明转换的GIF图像或PNG图像与调色板中指定的颜色时,能够保留。透明度的损失将导致更好的图像质量。在PNG的Alpha通道总是保留透明度。

再前面编译nginx已经制定了http_image_filter_module模块了,http_image_filter_module模块依赖gd-devel包所以需要安装gd-devel包(前面也已经安装了)

 nginx实现图片缩略图的配置如下:

# cat /usr/local/nginx/conf/nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx;
worker_processes auto;
error_log /usr/local/nginx/logs/error.log;
pid /run/nginx.pid; /usr/share/nginx/README.dynamic. events {
worker_connections ;
} http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /usr/local/nginx/logs/access.log main; sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout ;
types_hash_max_size ; include /usr/local/nginx-1.13./conf/mime.types;
default_type application/octet-stream; server {
listen ;
server_name localhost;
root /data/nginx/resource;
location ~* \.(eot|ttf|woff|woff2|svg|otf)$ {
root /data/nginx/resource/;
add_header Access-Control-Allow-Origin *;
}
location static/* {
root /data/nginx/resource/;
}
location ~ group1/M00/(.+)_([0-9]+)x([0-9]+)\.(jpg|gif|png) { #这段往下为生成缩略图的配置
alias /data0/fastdfs/storage/storage0/data;
ngx_fastdfs_module;
set $w $2;
set $h $3; if ($w != "0") {
rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ group1/M00$1.$4 break;
} if ($h != "0") {
rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ group1/M00$1.$4 break;
} image_filter resize $w $h; image_filter_buffer 2M; try_files group1/M00$1.$4 $1.jpg;
} location ~ group1/M00/(.+)\.?(.+){
alias /data0/fastdfs/storage/storage0/data;
ngx_fastdfs_module;
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

配置后重启nginx!!!

# /usr/local/nginx/sbin/nginx -s reload

往fastdfs中上传图片

# fdfs_upload_file /etc/fdfs/client.conf test.png
group1/M00///wKgCEVvGzDSAJROvAAHgQeZ5IGY364.png

访问图片

1、访问原图:www.71net.com/group1/M00/00/00/wKgCEVvGzDSAJROvAAHgQeZ5IGY364.png

其中www.71net.com为你的域名或IP地址

2、访问缩略图

fastdfs+nginx+image_filter安装与生成缩略图的更多相关文章

  1. 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放

    如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...

  2. nginx实现本地图片生成缩略图

    nginx可以实现图片的缩略图效果,很多网站为了前端静态资源相应的性能会给大图自动生成一个小图,比如我们经常会在网上看到bd_64x64.png这种格式,淘宝上的小图经常会看到xxx.jpg_100x ...

  3. centos 系统下安装FastDFS+nginx+fastdfs-nginx-module安装配置

    前言: 以前的项目上传的文件都是保存到本地或者是局域网内的共享文件夹下,由于数据量,服务器的负载均衡(分机的某些图片无法访问的问题处理)等因素的情况下,就想到用fastdfs来文件管理,花了几天时间硬 ...

  4. fastdfs+nginx的安装部署

    原理图: fastdfs适用场景: fastdfs特别适合海量 中小文件(建议范围:4KB< file_size <500MB)为载体的在线服务. 安装系统介绍: CentOS6.6 安装 ...

  5. 【Nginx】面试官竟然问我Nginx如何生成缩略图,还好我看了这篇文章!!

    写在前面 今天想写一篇使用Nginx如何生成缩略图的文章,想了半天题目也没想好,这个题目还是一名读者帮我起的.起因就是这位读者最近出去面试,面试官正好问了一个Nginx如何生成缩略图的问题.还别说,就 ...

  6. 转: nginx使用image_filter生成缩略图 -- fasdfs海量图片缩略图整合

      转: nginx使用image_filter生成缩略图 -- fasdfs海量图片缩略图整合 http://blog.csdn.net/CleverCode/article/details/522 ...

  7. nginx利用image_filter动态生成缩略图

    转自:http://www.nginx.cn/2160.html "我如今是有些图片须要生成缩略图.这个如今加了image_filter这个已经实现了.但我不知道怎么样才干訪问我上传的原图& ...

  8. nginx 生成 缩略图 and 生成缩略图到硬盘

    nginx  编译的时候增加  ./configure --with-http_image_filter_module 配置如下 server { listen     80; server_name ...

  9. FastDFS + Nginx 安装

    1.安装FastDFS依赖lib包 cd /usr/local/src/ git clone https://github.com/happyfish100/libfastcommon.git cd  ...

随机推荐

  1. nginx 反向代理 proxy_pass 及对比nginx与haproxy反向代理服务器功能、性能的优劣

    1.使用 proxy 去请求另一个域名下的资源,如果跨域资源也部署在同一台机器上,我们甚至可以 proxy 到 127.0.0.1,比如: location /api { proxy_pass htt ...

  2. Gradle Goodness: Renaming Files while Copying

    With the Gradle copy task we can define renaming rules for the files that are copied. We use the ren ...

  3. java spring-WebSocket json参数传递与接收

    Websocket原理(摘抄) 一.websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环 ...

  4. P1015 回文数解题思路(非原创)

    测试 #include<bits/stdc++.h> using namespace std; int n,m,step; string nn; int len,nex; bool dfs ...

  5. iview-cli 项目、iView admin 代理与跨域问题解决方案

    iview-cli 项目.iView admin 跨域.代理问题解决方案 在webpack.dev.config.js文件中: 添加: devServer: { historyApiFallback: ...

  6. centos7 远程连接mongodb时,27017端口连接不上的解决办法

    一.问题描述:centos 7 上安装mongogdb,然后通过另外一台电脑用pymongo连接mongodb时,报错:连接拒绝 解决过程: 1.修改mongo.conf文件 命令:sudo  vi  ...

  7. 1.Hadoop集群安装部署

    Hadoop集群安装部署 1.介绍 (1)架构模型 (2)使用工具 VMWARE cenos7 Xshell Xftp jdk-8u91-linux-x64.rpm hadoop-2.7.3.tar. ...

  8. 【Mac】安装 Homebrew 出错 Failed during: git fetch origin master:refs/remotes/origin/master --tags --force

    今天在 Mac 装 Homebrew 遇到了一个问题,在网上找了大量解决方案,做个总结. Mac 版本 High Sierra 10.13.6. 问题描述 在 Mac 终端输入了 Homebrew 官 ...

  9. 检测com端口代码实现

    1:scan HRESULT CDevHound::Scan(const vector<CString> &guiInfo, vector<DEV_INFO> & ...

  10. /usr/bin/python与/usr/bin/env python的区别

    Infi-chu: http://www.cnblogs.com/Infi-chu/ /usr/bin/env python执行时,先查找python解释器的路径,然后执行./usr/bin/pyth ...