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 相关文章推荐
使用Apache的rewrite
Mar 09 Servers
Nginx域名转发使用场景代码实例
Mar 31 Servers
nginx location优先级的深入讲解
Mar 31 Servers
Nginx工作原理和优化总结。
Apr 02 Servers
centos8安装nginx1.9.1的详细过程
Aug 02 Servers
图文详解Nginx版本平滑升级方案
Sep 15 Servers
关于nginx 实现jira反向代理的问题
Sep 25 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
Nginx动静分离配置实现与说明
Apr 07 Servers
Windows Server 2019 安装DHCP服务及相关配置
Apr 28 Servers
Nginx配置之禁止指定IP访问
May 02 Servers
排查Tomcat进程假死的问题
May 06 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 Google的translate API代码
2008/12/10 PHP
php数组(array)输出的三种形式详解
2013/06/05 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
PHP中each与list用法分析
2016/01/08 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
php-app开发接口加密详解
2018/04/18 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
一文带你了解Python中的字符串是什么
2018/11/20 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
python基于openpyxl生成excel文件
2020/12/23 Python
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
自荐书格式
2013/12/01 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
yy司仪主持词
2014/03/22 职场文书
英语教师自荐信
2014/05/26 职场文书
读群众路线的心得体会
2014/09/03 职场文书
社区服务活动报告
2015/02/05 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
中秋节随笔
2015/08/15 职场文书
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android
idea下配置tomcat避坑详解
2022/04/12 Servers
MySQL存储过程及语法详解
2022/08/05 MySQL