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 proxy_cache 缓存配置详解
Mar 31 Servers
Nginx本地目录映射实现代码实例
Mar 31 Servers
nginx location优先级的深入讲解
Mar 31 Servers
详解nginx location指令
Jan 18 Servers
HDFS免重启挂载新磁盘
Apr 06 Servers
Linux中文件的基本属性介绍
Jun 01 Servers
nginx之内存池的实现
Jun 28 Servers
使用 DataAnt 监控 Apache APISIX的原理解析
Jul 07 Servers
Apache自带的ab压力测试工具的实现
Jul 23 Servers
Nginx跨域问题解析与解决
Aug 05 Servers
ubuntu20.04虚拟机无法上网的问题及解决
Dec 24 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调用MySQL的存储过程的实现代码
2008/08/12 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
python3中int(整型)的使用教程
2017/03/23 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Python类class参数self原理解析
2020/11/19 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
绿色城市实施方案
2014/03/19 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
地球上的星星观后感
2015/06/02 职场文书
Python实现对齐打印 format函数的用法
2022/04/28 Python
2022年显卡天梯图(6月更新)
2022/06/17 数码科技