1. 分布式文件存储 FastDfs

1.1. 技术说明

FastDFS是用C语言编写的一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1.2. 技术内部架构

1.2.1. 设计思想

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。存储节点存储文件,完成文件管理的所有功能。

跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少

存储系统由一个或多个卷(也可称为组)组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,可以动态扩大了存储系统的容量。

1.2.2. 系统组成

· 跟踪器(tracker): Tracker server作用是对Storage server进行负载均衡和调度,在文件上传时会直接请求Tracker server,然后Tracker server可以根据一些策略找到Storage server来提供文件上传服务。所以可以将tracker称为追踪服务器或调度服务器。

· 存储节点(storage): Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。

1.2.3. 架构图

        

1.2.4. 文件上传流程:

1.3. 应用场景

1.3.1. 对比传统图片上传

存在问题:

1)大并发量上传访问图片时,需要对web应用做负载均衡,但是会存在图片共享问题

2)web应用服务器的存储空间有限,它是web应用服务器,而不是存储服务器。

3)web应用服务器的本身的io读写性能不高,图片上传下载时,速度偏慢

务器的带宽,这样该web应用服务器的其他功能就会受到较大的影响。

解决方案:

1)将图片集中存储到IO读写性能高的图片服务器中。

2)下载访问图片时,使用http服务器直接读取图片服务器中的图片。

1.3.2. 独立的图片服务器上传

使用独立的图片服务器可以解决传统上传方式遇到的并发,空间等问题

1.4. 应用案例架构

1.4.1. 安装配置FastDFS服务器

l 所需安装包

FastDFS为安装包

Fastdfs-nginx-module为文件服务器与nginx整合所需模块包

libfastcommonV1.0.7.tar.gz包括fdfs运行所需的各种组件

Nginx 为上传的文件提供http访问

l 安装步骤

安装准备:

1. 准备一台lunix服务器,这里使用的是Centos7.0

2. 上传安装包到服务器

安装步骤:

1. 安装gcc环境(编译c环境)

yum install gcc-c++

2. 安装libebvent环境(fastdfs环境)

yum -y install libevent

3. 安装perl环境(编译c文件环境)

yum -y install perl

4. 安装libfastcommon环境(fastdfs环境)

首先解压libfastcommonV1.0.7.tar:

tar -zxvf libfastcommonV1.0.7.tar.gz

cd libfastcommon-1.0.7/

./make.sh

./make.sh install

libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下:

cp /usr/lib64/libfastcommon.so /usr/lib

5. 安装tracker服务

5.1 解压FastDFS

tar -zxf FastDFS_v5.05.tar.gz

5.2 编译FastDFS

cd FastDFS

./make.sh

./make.sh install

5.3 安装成功后,将FastDFS下的conf文件下的所有文件复制到/etc/fdfs/下

cp -r conf/* /etc/fdfs/

5.4 配置tracker

cd /etc/fdfs/

vi tracker.conf

将base_path=/home/yuqing/FastDFS改为base_path=/home/fastdfs(可以通过命令符去查找,命令符:/base_path)

保存退出

5.5 创建fastdfs目录

mkdir /home/fastdfs

5.6启动tracker

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

5.7 设置开机自启

vi /etc/rc.d/rc.local

将命令添加到文件里面:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

6. 安装storage服务

如果单机安装,无需编译和环境安装,如果存储文件的跟客户端不在同一台机器则需要按照安装tracker一样的环境步骤安装

7. 配置tracker和storage服务

7.1 配置storage服务

vi storage.conf

修改以下配置:

group_name=group1

base_path=/home/yuqing/FastDFS改为:base_path=/home/fastdfs

store_path0=/home/yuqing/FastDFS 改为:store_path0=/home/fastdfs/fdfs_storage

#如果有多个挂载磁盘则定义多个store_path,如下

#store_path1=.....

#store_path2=......

tracker_server=192.168.101.3:22122

#配置tracker服务器:IP

#如果有多个则配置多个tracker

tracker_server=192.168.101.4:22122

7.2 创建数据存储目录

mkdir /home/fastdfs/fdfs_storage

7.3 启动storage

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

7.4 设置开机自启

vi /etc/rc.d/rc.local

将此命令添加到文件里面:

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

7.5 整体完成,可以通过内部上传测试,看返回结果(但是没有和nginx整合所以无法使用http下载)

1.修改上传客户端配置

vi /etc/fdfs/client.conf

修改以下配置

base_path=/home/fastdfs

tracker_server=你的ip:22122

2.上传命令

命令使用格式:

/usr/bin/fdfs_test 客户端配置文件地址  upload  上传文件

返回格式如下图:

8. 配置fastdfs-nginx-module

8.1 解压fastdfs-nginx-module

tar -zxf fastdfs-nginx-module_v1.16.tar.gz

8.2 配置fastdfs-nginx-module

cd fastdfs-nginx-module/src

vi config

将文件中的/usr/local/路径改为/usr/(两个都改)

将mod_fastdfs.conf复制到/etc/fdfs/下

cp mod_fastdfs.conf /etc/fdfs/

修改etc/fdfs/下的mod_fastdfs.conf

vi mod_fastdfs.conf

修改mod_FastDFS.conf的以下内容:

base_path=/home/fastdfs

tracker_server=你的ip:22122

#tracker_server=你的ip:22122(多个tracker配置多行)

url_have_group_name=true #url中包含group名称

store_path0=/home/fastdfs/fdfs_storage  #指定文件存储路径

将libfdfsclient.so拷贝至/usr/lib下

cp /usr/lib64/libfdfsclient.so /usr/lib/

创建nginx/client目录

mkdir -p /var/temp/nginx/client

9. nginx整合

9.1 解压nginx

tar -zxf nginx-1.8.0.tar.gz

9.2 安装nginx环境

gcc环境(编译环境,上面已经安装):yum install gcc-c++

pcre环境(perl库,nginx的http模块使用pcre来解析正则表达 式):yum install -y pcre pcre-devel

zlib环境(提供多种压缩和解压缩的方式,nginx使用zlib对http包 的内容进行gzip):yum install -y zlib zlib-devel

openssl环境(算法和安全,https使用):yum install -y openssl openssl-devel

9.3编译nginx

cd /root/nginx-1.8.0

./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=/usr/local/fastdfs-nginx-module/src(fastdfs专有)

make

make install

9.4 创建编译链接

ln -s /usr/include/fast* /usr/local/include/

原因:编译安装nginx的fastdfs插件的头文件没有找到,由于编 译nginx时候系统会到/usr/local/include,而编译安装 fastdfs-nginx-module时则默认保存在了/usr/include目录。

修复:ln -s /usr/include/fast* /usr/local/include/

9.5 修改nginx配置

编译完成后,会自动将nginx安装到/usr/local/nginx

cd /usr/local/nginx/conf

vi nginx.conf

添加一个server

server {

listen       80;

server_name  本机;

location /group1/M00/ {

ngx_fastdfs_module;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

配置说明:

说明:

server_name指定本机ip

location /group1/M00/:group1为nginx 服务FastDFS的分 组名称,M00是FastDFS自动生成编号,对应 store_path0=/home/FastDFS/fdfs_storage,如果FastDFS定义 store_path1,这里就是M01

9.6 启动nginx

cd /usr/local/nginx/sbin/

./nginx

说明:

如果重启服务器会发现无法启动nginx,报错找不到文件

解决:编辑/usr/local/nginx/conf/nginx.conf

打开#pid    logs/nginx.pid;注释

在/usr/local/nginx下创建/logs/nginx.pid

并赋给 /logs和nginx.pid读写权限

然后再运行nginx

10. 开启fdfs所需的23000和22122端口

由于Centos7.0使用的是firewalld和iptables有些区别具体防火墙操作参考我另一片微博:

Centos7下的防火墙设置:http://blog.csdn.net/hiqingtian/article/details/79027104

1.4.2. 客户端配置与使用

项目中使用FstdDfs是当做一个客户端请求安装的服务器完成服务:

l 项目中引入客户端jar包

l 项目中配置请求服务器的地址(本项目中放置在src下)

配置文件定义了要请求跟踪器的服务器地址:

tracker_server为初始化客户端需要的属性,当上传文件时它会根据此地址请求Tracker server服务器,查询可用storage后,返回给客户端状态良好的Storage server服务器地址和端口(23000)此时客户端直接访问storage地址进行上传并获取返回的文件访问地址;

l 编写java客户端

定义初始化方法:

定义上传方法:

定义下载方法:

l 代码中的使用

1. 创建FastDfs客户端并传入参数classpath:fast_dfs.conf(图片服务器配置文件地址),

FastDFSClient client = new FastDFSClient("classpath:fast_dfs.conf");

2. 创建完毕之后调用客户端的相应方法完成所需功能:

其中fileByte为上传文件的byte数组,extName为上传文件的后缀(例: jpg)

url为上传成功后返回的访问路径:

注意:这个路径不包含ip地址所以需要手动拼接ip地址

可以配置在配置文件中地址后注入进所需要拼接的地址:

拼接之后返回可直接访问的地址:

由于整合了nginx所以此地址可直接在浏览器访问

Url可根据具体业务需求进行数据库保存;

到此,FastDfs的安装配置和项目中的使用记录完毕

java客户端代码参考我另一篇微博:

http://blog.csdn.net/hiqingtian/article/details/79413777

FastDFS图片服务器的原理和安装配置相关推荐

  1. CentOS7设置静态IP、搭建单机版FastDFS图片服务器、使用FastDFS-Client客户端进行简单测试、实现图片上传、实现商品添加修改删除

    CentOS7设置静态IP.搭建单机版FastDFS图片服务器.使用FastDFS-Client客户端进行简单测试.实现图片上传.实现商品添加修改删除 CentOS7设置静态IP而且还可以上网 192 ...

  2. FastDFS图片服务器(分布式文件系统)学习。

    参考:https://blog.csdn.net/hiqingtian/article/details/79413471 https://blog.csdn.net/sinat_40399893/ar ...

  3. 使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...

  4. zookeeper工作原理、安装配置、工具命令简介

    1 Zookeeper简介 Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等等. ZooK ...

  5. 图片工具GraphicsMagick的下载安装配置使用

    转自:图片工具GraphicsMagick的下载安装配置使用,更优阅读体验:http://www.kongzid.com/ 目录 1.概述 2.下载 2.1 进入官网地址 2.2 进入版本列表页面 2 ...

  6. Nginx 教程(一)-- 工作原理及安装配置

    Nginx简介 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在一个BSD-like协议下发行,由俄罗斯人IgorSysoev开发,共俄罗斯大型的搜索 ...

  7. mysql安装原理_全面解读MySQL主从复制,从原理到安装配置

    为什么需要主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了 ...

  8. 第二章:阿里云ECS服务器(G5)安装配置docker

    个人简介: 我是廖志伟,一名Java开发工程师,CSDN博客专家,多年一线研发经验,曾就职多家互联网公司,参与并主导多个百万级并发的互联网产品研发与系统架构搭建,对大型分布式,高并发及微服务架构,缓存 ...

  9. 华为 静态NAT---动态NAT---NAPT---Easy IP---NAT服务器工作原理和示例配置

    目    录 一.NAT简介 二.NAT好处: 三.静态NAT工作原理和示例配置 1. 静态NAT工作原理 2. 静态NAT配置示例 四.动态NAT工作原理和示例配置 1. 动态NAT工作原理 2.动 ...

最新文章

  1. P5667 拉格朗日插值2(拉格朗日插值,NTT, 倒推求逆元)
  2. python趋势稳定检验Kwiatkowski-Phillips-Schmidt-Shin
  3. 你应该知道的7个写出更好的 Java 代码的技巧
  4. Java实现doc或xls转PDF
  5. 用筛选法求100之内的素数
  6. 前端学习(2027)vue之电商管理系统电商系统之实现省--市联动
  7. [Ext JS6]路由(Routing)及使用
  8. 利用keras训练自己的图片数据集
  9. js清空浏览器cokie缓存_JS设置cookie,删除cookie
  10. 适应度函数及遗传操作
  11. linux服务器上配置二级域名
  12. 移动云5G消息平台技术架构
  13. php 超炫 页面,dedecms织梦后台模板,超炫界面风格
  14. 在鹅厂的第5219天,我毕业了...
  15. 华硕b365安装服务器系统,华硕B365主板搭载intel8/9代平台安装win7的详细教程
  16. ICDsoft主机半价优惠码推荐
  17. pgpool添加用户
  18. 面向对象简答题:多态的前提条件?
  19. 利用Firesheep对人人网(renren.com)进行会话劫持.
  20. 投资理财-朋友好像的故事

热门文章

  1. Pro SQL Server on Linux 免积分下载
  2. 汽车专题直播月 | CAN FD目前发展与未来展望
  3. SYSTEMTIME相关
  4. 转行软件测试实用操作总结
  5. centos 7.4 安装zabbix 3.4
  6. 计算机应用教程excel,计算机应用课程EXCEL作业
  7. 如何保证FBA库存,及时补货
  8. 【转载】把aspx文件编译成DLL文件-.NET教程,Asp.Net开发
  9. C# WinForm创建QR Code测试
  10. 女程序员、女设计师、女运营……原来女生也能活成这样!