1、背景

FastDFS 是一款开源的、分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发。该开源项目的主页是 http://code.google.com/p/fastdfs 。可以通过 fastdfs.sourceforge.net 下载。FastDFS论坛是 http://www.csource.org ,目前是指向 ChinaUnix 开源项目孵化平台的一个板块 FastDFS,网址为 bbs.chinaunix.net/forum-240-1.html 。(摘自 http://blog.csdn.net/poechant/article/details/6977407)

2、上传流程

我们可以通过 FastDFS 对文件的上传过程,来初步了解 FastDFS 的基本架构。首先客户端 client 发起对 FastDFS 的文件传输动作,是通过连接到某一台 Tracker Server 的指定端口来实现的,Tracker Server 根据目前已掌握的信息,来决定选择哪一台 Storage Server ,然后将这个Storage Server 的地址等信息返回给 client,然后 client 再通过这些信息连接到这台 Storage Server,将要上传的文件传送到给 Storage Server上。

  上传流程简述:

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

  下载流程简述:

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

3、架构简析

FastDFS 是包括一组 Tracker Server 和 Storage Server 的。Tracker Server 与 Storage Server 之间不直接通信,其基本的信息由配置文件在系统启动加载时获知。多台 Tracker Server 之间保证了 Tracker 的分布式,Tracker Server 之间是对等的,防止了单点故障。 Storage Server 是分成多个 Group,每个 Group 中的Storage 都是互相备份的,也就是说,如果 Group1 有 Storage1、Storage2、Storage3,其容量分别是100GB、100GB、100GB,那么 Group1 的存储能力是 100GB,而不是 300GB,这就是互相备份的意思。进一步说,整个 Group 的存储能力由该组中该储能力最小的 Storage 决定。多个 Group 之间的存储方式,可以采用 round robin(轮训)、load balanced(负载均衡)或指定 Group 的方式。

术语

FastDFS两个主要的角色:Tracker Server 和 Storage Server 
Tracker Server:跟踪服务器,主要负责调度storage节点与client通信,在访问上起负载均衡的作用,和记录storage节点的运行状态,是连接client和storage节点的枢纽。 
Storage Server:存储服务器,保存文件和文件的meta data(元数据) 
Group:文件组,也可以称为卷。同组内服务器上的文件是完全相同的,做集群时往往一个组会有多台服务器,上传一个文件到同组内的一台机器上后,FastDFS会将该文件即时同步到同组内的其它所有机器上,起到备份的作用。 
meta data:文件相关属性,键值对(Key Value Pair)方式,如:width=1024, height=768。和阿里云OSS的meta data相似。

5、安装环境准备

提示:本例安装目标为:一台虚拟机(centos 7)安装部署一个 tracker 和一个组 group1(其中包含两个 storage)

linux 基础环境:centos 7 minimal(官方历史版本:http://vault.centos.org/

相关源码包(此处省略通过 ftp 传送源码包,有兴趣的可移步至:)

linux 中需要事先准备相关程序(linux 联网直接安装)

  yum -y install gcc (必须在最开始的环境里就已经安装了,否则上面的源码包安装过程会出错)

  yum -y install gcc-c++(必须在最开始的环境里就已经安装了,否则上面的源码包安装过程会出错)

  yum -y install vim (可选择,文本编辑器)

  perl-5.20.2

nginx 负载均衡环境部署先的依赖程序准备

  • yum install gcc-c++
  • yum install -y pcre pcre-devel
  • yum install -y zlib zlib-devel
  • yum install -y openssl openssl-devel

6、文件夹初始化

创建 tracker 所需的文件夹 base_path:mkdir /opt/fastdfs_tracker

创建 storage所需的日志目录:mkdir /opt/fastdfs_storage_info (这个目录是用来记录 storage 同步文件的日志)

创建 storage 存储所需的文件目录:mkdir /opt/fastdfs_storage_data (此目录存储文件)

7、 安装 libfastcommon-1.0.7

  解压:tar -zxvf libfastcommonV1.0.7.tar.gz

  进入安装文件夹:cd libfastcommon-1.0.7

  依次执行 make 命令:./make.sh 和 ./make.sh install

  

  从安装记录可以看出:安装路径为 /usr/lib64,但是FastDFS主程序设置的默认安装目录是lib目录:/usr/local/lib,所以要创建连接:

  • ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
  • ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
  • ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so (先创建着,后面会使用到)
  • ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so (先创建着,后面会使用到)

8、安装 FastDFS-5.0.5

  解压 tar 包:tar -zxvf FastDFS_v5.05.tar.gz

  进入安装文件夹:cd FastDFS

  依次执行 make 命令:./make.sh 和 ./make.sh install

  安装过程没有错误提示,再检查  /etc/fdfs 目录中是否含有以下文件,如果有则安装成功:

  

9、配置 tracker

  9.1  进入 /etc/fdfs 文件夹,执行如下命令: cp tracker.conf.sample tracker.conf

  9.2  编辑  tracker.conf 文件:vim tracker.conf

  9.3 具体配置信息:

    a. disabled=false # 启用配置文件

    b. port=22122 # 设置 tracker 端口好,一般采用默认端口 22122

    c. base_path=/opt/fastdfs_tracker # 设置 tracker 的数据文件和日志目录

    d. http.server_port=80 # fastdfs5.0.5版本没有,保险起见,这里设置成 80 端口

    其他配置信息保持默认,不用动。

  9.4 启动 tracker: /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

    检测是否启动成功:

    方法1: netstat -unltp|grep fdfs ,看 22122 端口监听情况

    方法2: 通过命令查看 tracker 启动日志:tail -100f /opt/fastdfs_tracker/logs/trackerd.log

  9.5 如果成功启动 tracker,将启动命令添加到服务器的开机启动配置中:

     vim /etc/rc.d/rc.local

    在文本中添加这行,并保存:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

10、配置 stroage(和 trcker 配置类似)

  10.1 进入 /etc/fdfs 文件夹,执行命令: cp storage.conf.sample storage.conf

  10.2 编辑 storage.conf 文件,执行命令: vim storage.conf

  10.3 具体配置信息:

    a. disabled=false #启用配置文件
    b. group_name=group1 #组名,这里本例只配置一组,所以命名为 group1
    c. port=23000 #这里设置 storage 端口号,23000是默认端口,同一个组的 storage 端口号必须一致
    d. base_path=/opt/fastdfs_storage_info #记录 storage 日志(预先已经创建的文件夹)
    e. store_path_count=1 #存储的路径个数,个数需要和 store_path 的个数一致

    f. store_path0=/opt/fastdfs_storage_data #存储路径,这里是一个 group1 组配置了两个 storage

       store_path1=/opt/fastdfs_storage_data

    g. tracker_server=192.168.25.131:22122 # tracker 服务器的 ip 和端口号,本 ip 是本 linux的 ip
    h. http.server_port=80  # 设置 http 端口号,fastdfs-5.0.5 这个版本已经不用配置,保险起见,就配置一下吧

  10.4 启动 tracker:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

    检测是否启动成功:

      方法1: netstat -unltp|grep fdfs ,看 23000 端口监听情况(配置的是 什么端口就监听哪个端口)

      方法2: 通过命令查看 tracker 启动日志:tail -100f /opt/fastdfs_storage_info/logs/storage.log

    启动成功之后,可以通过 fdfs_monitor 查看集群情况:stroage 是否已经注册到服务器中:

      /usr/bin/fdfs_monitor /etc/fdfs/storage.conf # 查看192.168.25.131:23000 是 “ ACTIVE ”状态即可

  10.5 启动没有问题,则将 stroage 启动命令配置到服务器启动项里: vim /etc/rc.d/rc.local

    添加这行命令,并保存: /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

===================================分割线====================================

以上安装配置步骤就是 fastdfs 的配置。

storage 中安装 nginx 目的是为了提供 http 的访问服务,同时解决 group 和 storage 同步延迟问题,

tracker 中安装 nginx 目的是为了提供 http 访问的反向代理、负载均衡及缓存服务。

===================================分割线====================================

11、nginx 安装前的环境准备

   yum install -y gcc # 前面步骤已安装,略过

   yum install -y gcc-c++ # 前面步骤已安装,略过

   yum install -y pcre pcre-devel

   yum install -y zlib zlib-devel 

   yum install -y openssl openssl-devel

12、 在 storage 中安装 nginx

  12.1 创建 nginx 默认安装文件夹: mkdir /usr/local/nginx

  12.2 解压 tar 包:

    tar -zxvf nginx1.7.8.tar.gz  # 得到 nginx-1.7.8 文件目录

    tar -zxvf fastdfs-nginx-module_v1.16.tar.gz # 得到 fastdfs-nginx-module 文件目录

  12.3 修改 fastdfs-nginx-module 文件目录中的 config 文件:

     cd /fastdfs-nginx-module/src

     vim config

     将 CORE_INCS中 的参数路径修改一下,local 全部不要: CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

  12.4 建立软连接,在第七步骤中已经创建,可略过: 

      ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so (第七步骤中已经创建,可略过)

      ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so (第七步骤中已经创建,可略过)

    

  12.5 进入nginx 安装文件夹:cd nginx-1.7.8

     执行命令:./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src

     备注:执行命令中的 add-module 参数为 fastdfs-nginx-module 文件目录路径,这里是 /usr/local/src 目录下的。

     命令执行完毕之后,依次执行 make 和 make install,没有错误提示表示安装成功。

  12.6 执行命令 cd /usr/local/nginx/conf, 编辑 vim  nginx.conf 文件:

    在 http 语句块中将 listen 修改成:listen 80;

    在 server 语句块中添加:

      location /group1/M00 {

        root/fdfs/storage/data;

        ngx_fastdfs_module;

      }

    注意:这里 group 组名是上面配置的 group1,要和第 10 步骤的 10.3 步骤中的配置组信息一致

    如果 nginx 成功启动,浏览器不能访问,就在 nginx.conf 这个配置文件中,把第一行的注解打开,配置成:user  root; 即可。

       

  12.7 执行命令:cd /usr/local/rsrc/FastDFS/conf ,将 conf 文件夹目录下的 http.conf 和 mime.types 复制到 /etc/fdfs/ 下,

    cp http.conf /etc/fdfs/

    cp mime.types /etc/fdfs/

    如果不执行这个操作,启动 nginx 会报异常

  12.8 执行命令:cd/usr/local/rsrc/fastdfs-nginx-module/src

    将 conf 文件夹下的 mod_fastdfs.conf 文件复制到 /etc/fdfs/下:cp mod_fastdfs.conf /etc/fdfs/

  12.9 在 /etc/fdfs/ 文件目录下,打开编辑:vim mod_fastdfs.conf

    a. base_path=/opt/fastdfs_storage_info # 保存日志目录

    b. tracker_server=192.168.25.131:22122  # tracker的ip和端口

    c. storage_server_port=23000 # storage服务器的端口号

    d. group_name=group1 #当前服务器的 group名称

    e. url_have_group_name= true # 文件 url中是否有 group名称

    f. store_path_count=2 #存储路径个数,必须和 下面的store_path个数一致

    g. store_path0=/opt/fastdfs_storage_data #文件存储路径

     store_path1=/opt/fastdfs_storage_data #本例设置了两个stroage,和第 10 步骤的 10.3 步骤配置一致

    h. http.need_find_content_type=true #从文件扩展名查找文件类型,这个配置 fastdfs-5.0.5没有,保险起见,还是配置吧

    i. group_count= 1 # 设置组的个数 这里设置了一个组 group1 所以配置为 1

    j. 在配置信息的最后,将注解的 group 信息展开,这里设置的是一个组,所以只配置一个:

      注意组的名称 端口 存储路径个数 和存储路径

    

  12.10 创建软连接: ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/M00

  12.11 启动 nginx:/usr/local/nginx/sbin/nginx

    提示:/usr/local/nginx/sbin/nginx -s stop  # 停止nginx

    检查是否启动成功:netstat -anp | grep 80,如果有宽口冲突,也可以检测到,kill -9 对应的pid 即可。

    启动成功只会提示一个 pid,需要自己通过浏览器验证。

    

  常见问题:

    如果上面配置都完整无误,浏览器还是无法访问,则可以 ping 一下网络,再 telnet 一下端口,很有可能是防火墙的问题:

    添加开放端口 firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)

    删除开放端口 firewall-cmd --zone=public --remove-port=80/tcp --permanent 

    添加或者删除开放端口之后需要更新防火墙规则: firewall-cmd --reload 

    查看所有打开的端口:  firewall-cmd --zone=public --list-ports 或者  firewall-cmd --list-services

    显示防火墙状态是否运行:firewall-cmd --state  或者   systemctl status firewalld.service

用了一天时间,折腾好几次,又是重装系统又是查资料的,感觉能这么细致的讲解的真不多,于是就想把这个心得写下来,让读者们少走坑。

通过 java 代码测试一番,成功!

  

13、tracker 中安装 nginx

  待续…    

  

  

    

  

  

FastDFS分布式文件系统&Nginx负载均衡最小环境安装配置[超级详解]的更多相关文章

  1. Web Server 分布式服务: Nginx负载均衡

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用.其 ...

  2. LVS实现负载均衡原理及安装配置

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

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

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

  4. (转)使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 原文:https://www.cnblogs.com/liwei0526vip/p/6370103.html

  5. 基于【 centos7】四 || FastDFS集群+Nginx负载均衡

    1. 架构设计 1.1 架构图 FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用F ...

  6. 手把手教你玩转nginx负载均衡(三)----配置虚拟服务器网络

    引言 虽然上一篇我们成功的启动了虚拟机,也安装好了操作系统,但是这台虚拟机和主机以及其他虚拟机是没有办法连通的,我们的目标是配置多台服务器并且配置nginx反向代理,来实现负载均衡,所以不能访问内网是 ...

  7. 手把手教你玩转nginx负载均衡(五)----配置后端服务器组

    引言 在前面几篇中,我们成功的搭建起了一台nginx服务器,所以我们要重复前面的步骤,把服务器的数量增加到3台以上,我这里已经建好了另外两台,分别是centos7-22,centos7-23,对应的i ...

  8. nginx负载均衡fair模块安装和配置

    nginx-upstream-fair-master fair模块源码 官方github下载地址:https://github.com/gnosek/nginx-upstream-fair说明:如果从 ...

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

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...

随机推荐

  1. 深入理解springAOP切面的特性

    一张图说明情况

  2. bzoj 3195 奇怪的道路 状压dp

    看范围,状压没毛病 但是如果随便连的话给开1<<16,乘上n,m就爆了 所以规定转移时只向回连边 于是想状态数组:f[i][j]表示到i这里i前K位的状态为j(表示奇偶) 发现有条数限制, ...

  3. BZOJ_3436_小K的农场_差分约束

    BZOJ_3436_小K的农场_差分约束 题意: 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个),以下列三种形式描述 ...

  4. Rmq Problem/mex BZOJ3339 BZOJ3585

    分析: 一开始没看懂题... 后来想用二分答案却不会验证... 之后,想到用主席树来维护... 建一个权值线段树,维护出这个权值以前所有的点最晚在哪里出现... 之后,查一下是不是比查询区间的l断点大 ...

  5. 【游戏开发】Excel表格批量转换成lua的转表工具

    一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ...

  6. Python并发编程之初识异步IO框架:asyncio 上篇(九)

    大家好,并发编程 进入第九篇. 通过前两节的铺垫(关于协程的使用),今天我们终于可以来介绍我们整个系列的重点 -- asyncio. asyncio是Python 3.4版本引入的标准库,直接内置了对 ...

  7. SSRS报表服务随笔(rdl报表服务)-报表参数

    上一篇我们说了创建一个简单的显示报表,但在实际工作中,我们有很多要带条件的报表 现在先认识一下报表数据,首次打开SSDT,报表数据在窗口的左侧,要是找不到了,没关系,在工具栏-视图-最下面的报表数据 ...

  8. 《前端之路》之 Babel 下一代 JavaScript 语法编译器

    写本章的内容的出发点主要是 为了对于之前关于 JS 版本的一个总结,在之前的开发中,我们始终对于 ECMAScript 的版本的更新不够重视,以至于在后面的 开发过程中,我们始终会被各种新奇的语法打断 ...

  9. 带着新人看java虚拟机06(多线程篇)

    其实多线程还有很多的东西要说,我们慢慢来,可能会有一些东西没说到,那就没办法了,只能说尽量吧! 1.synchronized关键字 说到多线程肯定离不开这个关键字,为什么呢?因为多线程之间虽然有各自的 ...

  10. Spring Boot 2.x整合Redis

    最近在学习Spring Boot 2.x整合Redis,在这里和大家分享一下,希望对大家有帮助. Redis是什么 Redis 是开源免费高性能的key-value数据库.有以下的优势(源于Redis ...