• fastDfs-理解安装,一篇就够了


    觉得可以,点关注

    contos7
    fastdfs-5.11
    fastdfs-nginx-module-1.20
    libfastcommon-1.0.40
    nginx-1.12.0
    在百度网盘可以找到对应资源
    链接: https://pan.baidu.com/s/19fZUvkJ-BBJ6zJAhsuEqJg 提取码: 55cd
    将package包复制到  / 目录下,只需复制粘贴即可安装完成
    后续更新最小集群安装
    

    什么是FastDFS

    • FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

    FastDFS架构

    • FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
    • Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
    • Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。

    Tracker 集群

    • FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。

    Storage集群

    • Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
    • 采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。

    Storage状态收集

    • Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。

    文件上传

    • 客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名
      • 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
      • 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
      • 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
      • 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

    文件下载

    • tracker根据请求的文件路径即文件ID 来快速定义文件
    • 通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。
    • 2.存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。

    配置虚拟机ip,静态环境

    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    
    • 修改内容,没有的添加
    bootproto=static
    onboot=yes
    IPADDR=10.200.47.105
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=119.29.29.29
    
    • 重启网络服务
    systemctl restart network
    

    fastDfs安装

    • 创建文件夹
    mkdir -p /package 											#存放安装包
    mkdir -p /package/util										#工具安装包
    mkdir -p /package/perl										#perl安装包
    mkdir -p /package/gcc										#gcc环境安装包
    mkdir -p /data/fastdfs/log
    mkdir -p /data/fastdfs/data
    mkdir -p /data/fastdfs/tracker
    mkdir -p /data/fastdfs/client
    
    • 安装环境
    # 将gcc环境rpm包上传到/package/gcc
    rpm  -ivh  /package/gcc/*.rpm --nodeps --force
    # 将perl的rpm安装包上传到/package/perl
    rpm  -ivh  /package/perl/*.rpm --nodeps --force
    # netstat工具安装
    rpm -ivh /package/util/*.rpm --nodeps --force
    
    • 安装LibFastCommon,将libfastcommon-1.0.40.tar.gz文件上传到/package
    cd /package
    tar -zxvf libfastcommon-1.0.40.tar.gz
    cd libfastcommon-1.0.40
    ./make.sh && ./make.sh install
    
    • 做软连接
    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
    
    • 安装FastDFS 将fastdfs-5.11.tar.gz文件上传到/package
    cd /package
    tar -zxvf fastdfs-5.11.tar.gz
    cd fastdfs-5.11
    ./make.sh && ./make.sh install
    

    配置

    • Tracker -- >> 跟踪器
    cd /etc/fdfs/
    cp tracker.conf.sample tracker.conf
    vim tracker.conf
    ## 关注如下几个配置
    ## 存储数据和日志文件的基本路径
    base_path=/data/fastdfs/tracker
    ## Http服务端口
    http.server_port=8080
    ## 默认提供服务端口
    port=22122
    
    • 启动tracker
    /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
    # 查看状态
    netstat -apn|grep fdfs
    # 打印结果
    tcp  0  0 0.0.0.0:22122  0.0.0.0:*   LISTEN  10780/fdfs_trackerd
    
    • 配置数据存储
    cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
    vim /etc/fdfs/storage.conf
    # 关注如下配置
    # storage存储data和log的跟路径
    base_path=/data/fastdfs/data
    # 默认组名
    group_name=group1
    # 默认端口,相同组的storage端口号必须一致
    port=23000
    # 配置一个存储路径
    store_path_count=1
    store_path0=/data/fastdfs/data
    # 配置跟踪器IP和端口
    tracker_server=10.200.47.105:22122
    
    • 启动存储服务
    /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
    # 查看状态
    netstat -apn|grep fdfs
    # 查看日志
    tail -f /data/fastdfs/data/logs/storaged.log
    # 日志展示:单台FastDFS安装成功
    set tracker leader: 192.168.72.130:22122
    # 查看Storage和Tracker是否在通信
    /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
    Storage 1:
        id = 192.168.72.130
        ip_addr = 192.168.72.130 (localhost.localdomain)  ACTIVE
    

    配置客户端测试

    cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
    vim /etc/fdfs/client.conf
    # 关注如下几个配置
    # client数据和日志目录
    base_path=/data/fastdfs/client
    # 配置跟踪器IP和端口
    tracker_server=192.168.72.130:22122
    
    • 客户端测试 调用客户端文件上传命令
      • /usr/bin/fdfs_upload_file /etc/fdfs/client.conf
      • 如 /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /etc/fdfs/client.conf.sample
    • 返回文件上传的相对路径和编号
      • group1/M00/00/00/CsgvaV3t_K-AM2FxAAAFtXJOjeo.sample
    • 文件成功上传storage服务器,但是还无法查看下载。需要安装Nginx服务器用来支持Http方式访问文件

    安装Nginx

    • 将fastdfs-nginx-module-1.20.tar.gz文件上传到/package
    fastdfs-nginx-module作用说明:FastDfs通过Tracker服务器,向Storage存储数据
    
    cd /package
    tar -zxvf fastdfs-nginx-module-1.20.tar.gz
    
    • 将nginx-1.12.0.tar.gz文件上传到/package
    cd /package
    tar -zxvf nginx-1.12.0.tar.gz
    cd nginx-1.12.0
    ./configure --add-module=/package/fastdfs-nginx-module-1.20/src/
    make && make install
    
    • 如果编译出错
      /usr/include/fastdfs/fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录
    • 修改
    vim /package/fastdfs-nginx-module-1.20/src/config
    # 将以下两句话替换
    ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
    CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
    # 再次执行
    cd /package/nginx-1.12.0
    ./configure --add-module=/package/fastdfs-nginx-module-1.20/src/
    make && make install
    
    • 检查nginx是否安装成功
    /usr/local/nginx/sbin/nginx -V
    
    • 将配置文件拷贝不然浏览器无法访问nginx
    cp /package/fastdfs-5.11/conf/http.conf /etc/fdfs/
    cp /package/fastdfs-5.11/conf/mime.types /etc/fdfs/
    
    • 配置fastdfs-nginx-module客户端
    cd /package/fastdfs-nginx-module-1.20/src
    cp mod_fastdfs.conf /etc/fdfs/
    vim /etc/fdfs/mod_fastdfs.conf
    # 调整如下配置
    # 链接超时
    connect_timeout=20
    # 配置跟踪器IP和端口
    tracker_server=192.168.72.130:22122
    # 路径包含group
    url_have_group_name = true
    # 必须和storage配置相同
    store_path0=/data/fastdfs/data
    
    • 配置nginx
    cd /usr/local/nginx/conf/
    vim nginx.conf
    # 修改如下
    server {
        listen       80;
        
        location ~/group([0-9])/M00 {
            root /data/fastdfs/data;
            ngx_fastdfs_module;
        }
    }
    

    启动nginx服务

    ## 启动
    /usr/local/nginx/sbin/nginx
    ## 停止
    /usr/local/nginx/sbin/nginx -s stop
    ## 重启
    /usr/local/nginx/sbin/nginx -s reload
    
    • 防火墙操作
    systemctl status firewalld		 			#查看firewall防火墙状态
    firewall-cmd --list-ports					#查看firewall防火墙开放端口
    systemctl start firewalld.service			#打开firewall防火墙
    systemctl stop firewalld.service			#关闭firewall防火墙
    firewall -cmd --reload						#重启firewal防火墙
    
    • 端口操作
    ps -ef | grep nginx
    从容停止Nginx:kill -QUIT 主进程号
    快速停止Nginx:kill -TERM 主进程号
    强制停止Nginx:kill -9 主进程号 
    启动:/usr/local/nginx/sbin/nginx
    重启:/app/nginx/sbin/nginx -s reload -c nginx.conf
    
    开启端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    

    FastDFS扩展模块特性

    • 仅支持HTTP HEAD和GET
    • 支持token方式的防盗链(缺省是关闭的)
    • ts:生成token的时间(unix时间戳)
    • token:32位的token字符串(md5签名)
    • 支持指定保存的缺省文件名,URL参数名为filename
    • 支持断点续传

    推荐的FastDFS部署方案

    • 文件上传和删除等操作:使用FastDFS client API,目前提供了C、PHP extension和Java的client API
    • 文件下载采用HTTP方式:使用nginx或者apache扩展模块,不推荐使用FastDFS内置的web server
    • 不要做RAID,直接挂载单盘,每个硬盘作为一个mount point

    最大并发连接数设置

    • 参数名:max_connections
    • 缺省值:256
    • 说明:FastDFS采用预先分配好buffer队列的
      做法,分配的内存大小为:max_connections * buff_size,因此配置的连接数越大,消耗的内存越多。不建议配置得过大,以避免无谓的内存开销。

    工作线程数设置

    • 参数名: work_threads
    • 缺省值:4 • 说明:为了避免CPU上下文切换的开销,以及不必要的资源消耗,不建议将本参数设置得过大。为了发挥出多个CPU的效能,系统中的线程数总和,应等于CPU总数。
    • 对于tracker server,公式为:work_threads + 1 = CPU数 • 对于storage,公式为:
      work_threads + 1 + (disk_reader_threads + disk_writer_threads) * store_path_count = CPU数

    storage目录数设置

    • 参数名:subdir_count_per_path
    • 缺省值:256
    • 说明:FastDFS采用二级目录的做法,目录会在FastDFS初始化时自动创建。存储海量小文件,打开了trunk存储方式的情况下,建议将本参数适当改小,比如设置为32,此时存放文件的目录数为 32 * 32 = 1024。假如trunk文件大小采用缺省值64MB,磁盘空间为2TB,那么每个目录下存放的trunk文件数均值为:2TB / (1024 * 64MB) = 32个

    storage磁盘读写线程设置

    • disk_rw_separated:磁盘读写是否分离
    • disk_reader_threads:单个磁盘读线程数
    • disk_writer_threads:单个磁盘写线程数
    • 如果磁盘读写混合,单个磁盘读写线程数为读线程数和写线程数之后
    • 对于单盘挂载方式,磁盘读写线程分别设置为1即可
    • 如果磁盘做了RAID,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘性能

    storage同步延迟相关设置

    • sync_binlog_buff_interval:将binlog buffer写入磁盘的时间间隔,取值大于0,缺省值为60s
    • sync_wait_msec:如果没有需要同步的文件,对binlog进行轮询的时间间隔,取值大于0,缺省值为100ms
    • sync_interval:同步完一个文件后,休眠的毫秒数,缺省值为0 • 为了缩短文件同步时间,可以将上述3个参数适当调小即可
  • 相关阅读:
    pycharm突然变成了一个tab变成两个空格,查询无果
    79--JT项目17(Dubbo框架入门)
    79--JT项目17(SOA/RPC思想/zookeeper集群搭建)
    Java instanceof Operator
    12.21.4命名为Windows
    12.20.1汇总功能说明
    第24章分区
    Laravel 中间件的使用
    Laravel session的使用
    Laravel 数据分页
  • 原文地址:https://www.cnblogs.com/Mykebai/p/12020960.html
Copyright © 2020-2023  润新知