fastdfs+nginx集群搭建的实现


Posted in Servers onMarch 31, 2021

一.简介fastdfs

1.什么是fastdfs

  • fastdfs是一个轻量级的开源分布式文件系统;
  • fastdfs主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡;
  • fastdfs实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储支持存储服务器在线扩容支持相同内容的文件只保存一份,节约磁盘空间;
  • fastdfs只能通过Client API访问,不支持POSIX访问方式;
  • fastdfs特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)。

2.fastdfs框架图

作者(YuQing)给出了框架图如下:

fastdfs+nginx集群搭建的实现

其中:

Tracker Server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。记录storage server的状态,是连接Client和Storage server的枢纽。
Storage Server:存储服务器,文件和meta data都保存到存储服务器上
group:组,也可称为卷。同组内服务器上的文件是完全相同的文件标识:包括两部分:组名和文件名(包含路径)
meta data:文件相关属性,键值对(Key Value Pair)方式,如:width=1024,heigth=768

 3.上传文件流程

fastdfs+nginx集群搭建的实现

 (1)client询问tracker上传到的storage,不需要附加参数;
 (2)tracker返回一台可用的storage;
 (3)client直接和storage通讯完成文件上传。 

4.下载文件流程

fastdfs+nginx集群搭建的实现

(1)client询问tracker下载文件的storage,参数为文件标识(组名和文件名);
(2)tracker返回一台可用的storage;
(3)client直接和storage通讯完成文件下载。

5.同步机制

(1)同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行;
(2)文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器;
(3)源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
(4)上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。

6.tracker server目录结构

fastdfs+nginx集群搭建的实现

(1)data

         storage_groups.dat:存储分组信息

         storage_servers.dat:存储服务器列表  

(2)logs

          trackerd.log:tracker server日志文件

7.storage server目录结构

1)data

         .data_init_flag:当前storage server初始化信息

         storage_stat.dat:当前storage server统计信息

         sync:存放数据同步相关文件

                 binlog.index:当前的binlog文件索引号

                 binlog.###:存放更新操作记录(日志)

                 ${ip_addr}_${port}.mark:存放同步的完成情况

(2)logs

              storaged.log:storage server日志文件

以上理论参考:

ChinaUnix论坛:http://bbs.chinaunix.net/forum-240-1.html

github下载地址:https://github.com/happyfish100

二、fastdfs安装和测试

1.下载

需要下载:libfastcommon     fastdfs(2.0之前的版本需要以来libevent)

fastdfs+nginx集群搭建的实现

fastdfs+nginx集群搭建的实现

2.安装

(1)安装libfastcommon

$ tar xzvf libfastcommon-1.0.38.tar.gz
$ cd libfastcommon-1.0.38
$ ./make.sh
$ sudo ./make.sh install

(2)安装fastdfs

$ tar xzvf fastdfs-5.11.tar.gz
$ cd fastdfs-5.11
$ ./make.sh
$ sudo ./make.sh install

3.配置

集群搭建拓扑图(由于硬盘不够了,下面192.168.31.4和192.168.31.14现在还没有,扩容后加上)

fastdfs+nginx集群搭建的实现

(1)配置tracker(192.168.31.95/192.168.31.99)

$cd /etc/fdfs/

目录文件如下:

fastdfs+nginx集群搭建的实现

然后,执行如下:

$sudo su
#cp tracker.conf.sample tracker.conf

fastdfs+nginx集群搭建的实现

配置tracker.conf文件:

vim tracker.conf

修改:base_path=/home/fastdfs/tracker (注意:在启动前必须存在此目录,否则会报错,找不到路径,也就是说需要手动新建tracker目录)

fastdfs+nginx集群搭建的实现

启动:

/etc/init.d/fdfs_trackerd start

 fastdfs+nginx集群搭建的实现

(2)配置storage(192.168.31.2/192.168.31.12)

$ cd /etc/fdfs
$sudo su
#cp storage.conf.sample storage.conf

修改:

group_name=group1(192.168.31.2) 或者group2(192.168.31.12)

base_path=/home/fastdfs/storage

store_path0=/home/fastdfs/storage

修改:tracker服务ip与port:

tracker_server=192.168.31.95:22122  (注意:这里31.2 tracker_server配置31.95 ,31.12 tracker_server配置31.99)

fastdfs+nginx集群搭建的实现

fastdfs+nginx集群搭建的实现

启动:

/etc/init.d/fdfs_storaged start

fastdfs+nginx集群搭建的实现

查看fastdfs的相应配置信息

# fdfs_monitor /etc/fdfs/storage.conf

 有以下信息才算成功:

fastdfs+nginx集群搭建的实现

测试上传, 选择192.168.31.99 tracker机器当做fdfs_client

$ cd /etc/fdfs

$ sudo su

# cp client.conf.sample client.conf

# vim client.conf

修改:

base_path = /home/fastdfs

tracker_server=192.168.31.99:22122

fastdfs+nginx集群搭建的实现

测试上传net.png文件:

fdfs_upload_file /etc/fdfs/client.conf net.png

fastdfs+nginx集群搭建的实现

三、nginx配置

需要安装:

fastdfs-nginx-module-1.20  类似插件的东西

nginx-1.14.2.tar.gz

安装nginx需要先安装:

openssl       zlib     pcre

把astdfs-nginx-module插入到nginx(需要对nginx进行configure和make&&make install)

./configure --add-module=../../fastdfs-nginx-module/src/

fastdfs+nginx集群搭建的实现

 会报错:需要修改fastdfs-nginx-module-1.20/src/config文件

fastdfs+nginx集群搭建的实现

ngx_addon_name=ngx_http_fastdfs_module

if test -n "${ngx_module_link}"; then
  ngx_module_type=HTTP
  ngx_module_name=$ngx_addon_name
  ngx_module_incs="/usr/local/include"
  ngx_module_libs="-lfastcommon -lfdfsclient"
  ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
  ngx_module_deps=
  CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
  . auto/module
else
  HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
  NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
  CORE_INCS="$CORE_INCS /usr/local/include"
  CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
  CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
fi

修改为:

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

ngx_addon_name=ngx_http_fastdfs_module

if test -n "${ngx_module_link}"; then
  ngx_module_type=HTTP
  ngx_module_name=$ngx_addon_name
  ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
  ngx_module_libs="-lfastcommon -lfdfsclient"
  ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
  ngx_module_deps=
  CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
  . auto/module
else
  HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
  NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
  CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
  CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
  CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
fi

然后重新configure 和make && make install

接下来,cp mod_fastdfs.conf /etc/fdfs/ 并修改mod_fastdfs.conf文件

$ cd fastdfs-nginx-module-1.20/src
$ cp mod_fastdfs.conf /etc/fdfs/

修改mod_fastdfs.conf

tracker_server=192.168.31.99:22122
store_path0=/home/fastdfs/storage
group_name=group1

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/fastdfs/storage


[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/home/fastdfs/storage

 将fastdfs-5.11/conf/

$ cp http.conf /etc/fdfs/
$ cp mime.types /etc/fdfs/

修改:http.conf

http.anti_steal.token_check_fail=/home/fastdfs/fastdfs-5.11/conf/

fastdfs+nginx集群搭建的实现

修改nginx.conf 

cd /usr/local/nginx/sbin
vim ../conf/nginx.conf

 fastdfs+nginx集群搭建的实现

 8888端口号与/etc/fdfs/storage.conf中的http.server_port=8888相对应

上传一张图片

fastdfs+nginx集群搭建的实现

http://192.168.31.12:8888/group1/M00/00/00/wKgfDFzxVTyAM4suABWWvfB6x_k962.png

fastdfs+nginx集群搭建的实现

到此这篇关于fastdfs+nginx集群搭建的实现的文章就介绍到这了,更多相关fastdfs+nginx集群搭建内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Nginx优化服务之网页压缩的实现方法
Mar 31 Servers
nginx的zabbix 5.0安装部署的方法步骤
Jul 16 Servers
Nginx配置文件详解以及优化建议指南
Sep 15 Servers
nginx安装以及配置的详细过程记录
Sep 15 Servers
深入解析Apache Hudi内核文件标记机制
Mar 31 Servers
Kubernetes部署实例并配置Deployment、网络映射、副本集
Apr 01 Servers
nginx容器方式反向代理实战
Apr 18 Servers
Nginx限流和黑名单配置
May 20 Servers
linux目录管理方法介绍
Jun 01 Servers
git中cherry-pick命令的使用教程
Jun 25 Servers
nginx静态资源的服务器配置方法
Jul 07 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 23 Servers
Nginx域名转发https访问的实现
Mar 31 #Servers
Nginx本地目录映射实现代码实例
Mar 31 #Servers
nginx 防盗链防爬虫配置详解
Mar 31 #Servers
Nginx服务器如何设置url链接
nginx搭建图片服务器的过程详解(root和alias的区别)
Mar 31 #Servers
Nginx代理同域名前后端分离项目的完整步骤
Mar 31 #Servers
Nginx+SpringBoot实现负载均衡的示例
You might like
PHP与javascript实现变量交互的示例代码
2013/07/23 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
PHPStorm中如何对nodejs项目进行单元测试详解
2019/02/28 NodeJs
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
苹果美国官方商城:Apple美国
2016/08/24 全球购物
优秀团队获奖感言
2014/02/19 职场文书
护士先进个人总结
2015/02/13 职场文书
禁毒主题班会教案
2015/08/14 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL