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

时间:2023-12-15 17:39:14

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通讯完成文件下载。

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

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分布式文件系统&Nginx负载均衡最小环境安装配置[超级详解]

术语

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

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

  从安装记录可以看出:安装路径为 /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 目录中是否含有以下文件,如果有则安装成功:

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

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; 即可。

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

  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 信息展开,这里设置的是一个组,所以只配置一个:

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

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

  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,需要自己通过浏览器验证。

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

  常见问题:

    如果上面配置都完整无误,浏览器还是无法访问,则可以 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 代码测试一番,成功!

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

13、tracker 中安装 nginx

  待续…