zoukankan      html  css  js  c++  java
  • 基于【 centos7】三 || 分布式文件系统FastDFS+Nginx环境搭建

     1. FastDFS介绍

    1.1 FastDFS定义

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

    1.2 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称为存储服务器。

     

    2. FastDFS安装

    2.1. 环境安装

    2.1.1. 安装gcc

    FastDFSC语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:

    yum install gcc-c++

    2.1.2. 安装libevent

    FastDFS依赖libevent库,需要安装libevent:

    yum -y install libevent

    2.2. 安装libfastcommon

    libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。tracker服务器和storage服务器都需要进行安装。

    2.2.1 准备工作

    新建文件夹:

    mkdir -p /usr/local/fastdfs

    mkdir -p /home/fastdfs/tracker

    mkdir -p /home/fastdfs/storage

    2.2.2 下载libfastcommon并上传

    wget https://github.com/happyfish100/libfastcommon/archive/mast.zip

    2.2.3 解压至/usr/local/fastdfs

    tar -zxvf fileName.tar.gz

    unzip fileName.zip

    2.2.4 编译安装

    进入目录:cd libfastcommon

    编译:./make.sh

    安装:./make.sh install

    2.2.5 拷贝库文件

    libfastcommon安装好后默认文件/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。

    cp /usr/lib64/libfastcommon.so  /usr/lib

    注意:5.0.5版本以后不需要此步操作。

    2.2.6 创建软连接

    fastDFS主程序设置的目录为/usr/local/lib(自行设定),所以需要创建/usr/lib64下的一些核心执行程序的软连接文件

    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

    2.3. 安装FastDFS

    2.3.1. 下载FastDFS并上传

    wget https://github.com/happyfish100/fastdfs/archive/mast.zip

    2.3.2. 解压至/usr/local/fastdfs

    tar -zxvf fileName.tar.gz

    unzip fileName.zip

    2.3.3. 编译安装

    进入目录:cd FastDFS

    编译:./make.sh

    安装:./make.sh install

    2.3.4. 查看服务脚本文件

    /etc/init.d/fdfs_storaged

    /etc/init.d/fdfs_trackerd

    过滤查看 cd /etc/init.d/ && ls | grep fdfs

    2.3.5. 查看命令行工具

    cd /usr/bin

    Fdfs_*执行脚本

    2.3.6. 修改服务脚本配置文件

    因为fastDFS服务脚本设置的bin目录为/usr/local/bin下,但实际我们安装在了/usr/bin/下,所以我们要修改fastdfs配置文件中的路径,也就是需要修改两个配置文件。

    命令: vi /etc/init.d/fdfs_storaged

    进行全局替换命令: %s+/usr/local/bin+/usr/bin

    命令: vi /etc/init.d/fdfs_trackerd

    进行全局替换命令: %s+/usr/local/bin+/usr/bin

    注意:如果配置文件中的目录为.../usr/local/bin...才需要替换

    2.4. 配置跟踪器(192.168.22.1)

    2.4.1. 配置tracker.conf

    进入目录: cd  /etc/fdfs/

    复制配置文件:cp tracker.conf.sample  tracker.conf

    修改:vi tracker.conf

    base_path=/home/fastdfs/tracker #设置tracker的数据文件和日记目录(预先创建)

    disabled=false #启用配置文件

    port=22122 #设置tracker的端口号,一般使用默认的

    注意:更多配置查看《附录一》

    2.4.2. 启动跟踪器

    启动tracker命令: /etc/init.d/fdfs_trackerd start

    查看进程命令: ps -el | grep fdfs

    停止tracker命令: /etc/init.d/fdfs_trackerd stop

     

    2.4.3. 设置开机启动

    编辑命令: vi /etc/rc.d/rc.local

    加入配置: /etc/init.d/fdfs_trackerd start

    2.5. 配置存储器(192.168.22.2)

    2.5.1. 配置storage.conf

    进入目录: cd  /etc/fdfs/

    复制配置文件:cp storage.conf.sample  storage.conf

    修改:vi storage.conf

    base_path=/home/fastdfs/storage#设置storage的数据文件和日记目录(预先创建):

    disabled=false #启用配置文件

    port=23000 #设置端口号,默认值23000,同一组的的storage端口号必须相同

    group_name=group2 #组名,根据实际情况修改

    base_path=/home/fastdfs/storage #设置tracker的数据文件和日记目录(预先创建)

    store_path0=/home/fastdfs/storage #存储路径

    store_path_count=1 #存储路径个数,需要和store_path个数匹配

    tracker_server=192.168.22.1:22122 #tracker服务器的ip地址和端口号

    注意:更多配置查看《附录二》

    2.5.2. 启动存储器

    启动tracker命令: /etc/init.d/fdfs_storaged start

    查看进程命令: ps -el | grep fdfs

    停止tracker命令: /etc/init.d/fdfs_storaged stop

     

    2.5.3. 设置开机启动

    编辑命令: vi /etc/rc.d/rc.local

    加入配置: /etc/init.d/fdfs_storaged start

    2.6. 测试

    2.6.1. 修改clien.conf

    进入tracker服务器中:cd  /etc/fdfs/

    复制配置文件:cp clien.conf.sample  clien.conf

    base_path=/fastdfs/tracker #存放路径

    tracker_server=192.16822.1:22122  #tracker服务器ip地址和端口

    2.6.2. 上传文件

    命令:/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /usr/local/1.img

    2.6.3. 查看上传文件

    storage服务器中,配置的/home/fastdfs/storage/data中根据返回值查看

    3. Nginx安装(storage)

    3.1. 安装fastdfs-nginx-module包进行整合

    3.1.1. 下载fastdfs-nginx-module并上传

    wget https://github.com/happyfish100/fastdfs-nginx-module/archive/mast.zip

    3.1.2. 解压至/usr/local/fastdfs

    tar -zxvf fileName.tar.gz

    unzip fileName.zip

    3.1.3. 修改配置文件

    进入目录:cd /fastdfs-nginx-module/src/config

    编辑:vi config

    将路径中的local全部去掉

    改为:ОCORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

    3.2. Fastdfs与Nginx进行集成

    3.2.1. 删除之前的nginx

    进入目录:cd /usr/local/

    删除文件:rm -rf nginx

    3.2.2. 安装依赖库文件:

    yum install pcre

    yum install pcre-devel

    yum install zlib

    yum install zlib-devel

    3.2.3. 下载nginx并上传

    wget -c https://nginx.org/download/nginx-1.17.1.tar.gz

    3.2.4. 解压至/usr/local/fastdfs

    tar -zxvf fileName.tar.gz

    unzip fileName.zip

    3.2.5. 编译安装

    进入nginx目录: cd nginx1.17.1/

    加入模块命令:

    ./configure  --add-module=/usr/local/fastdfs/fastdfs-nginx-module/src 

    重新编译命令: make && make install

    3.2.6. 修改nginx-module配置文件

    复制fastdfs-nginx-module中的配置文件,到/etc/fdfs目录:

    cp /usr/local/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/

    修改文件:vi mod_fastdfs.conf

    connect_timeout=10 #连接超时时间

    tracker_server=192.168.22.1:22122 #跟踪器ip

    url_have_group_name=true #启用url访问

    store_path0=/fastdfs/storage #与之前一致

    3.2.7. 复制nginx配置文件

    复制fastdfs里面的2个文件,到/etc/fdfs目录中:

    进入目录:cd/usr/local/fastdfs/Fastdfs/conf/

    复制: cp http.conf mime.types  /etc/fdfs/

    3.2.8. 创建软连接

    /fastdfs/storage文件存储目录下创建软连接,将其链接到实际存放数据的目录:

    ln -s /home/fastdfs/storage/data/  /home/fastdfs/storage/data/M00

    3.2.9. 修改nginx配置文件

    进入目录:cd/usr/local/nginx

    编辑:Vi nginx.conf

    Server {

    listen: 8888; #由80改为8888

    server_name localhost;

    location ~/group([0-9])/M00{

    ngx_fastdfs_module;

    }

    }

    注意: ~表示正则表达式, 匹配group下的0-9任意一位

    nginx里的端口要和配置fastdfs存储中的storage.conf文件配置一致,也就是 http-server-port=8888

    3.2.10. 启动nginx

    命令: /usr/local/nginx/sbin/nginx

    附录一:FastDFS配置手册tracker.conf

    tracker.conf 配置文件分析:

    #配置tracker.conf这个配置文件是否生效,因为在启动fastdfs服务端进程时需要指定配置文件,所以需要使次配置文件生效。false是生效,true是屏蔽。

    disabled=false

    #程序的监听地址,如果不设定则监听所有地址

    bind_addr=

    #tracker监听的端口

    port=22122

    #链接超时设定

    connect_timeout=30

    #tracker在通过网络发送接收数据的超时时间

    network_timeout=60

    #数据和日志的存放地点

    base_path=/opt/fdfs

    #服务所支持的最大链接数

    max_connections=256

    #工作线程数一般为cpu个数

    work_threads=4

    #在存储文件时选择group的策略,0:轮训策略 1:指定某一个组 2:负载均衡,选择空闲空间最大的group

    store_lookup=2

    #如果上面的store_lookup选择了1,则这里需要指定一个group

    #store_group=group2

    #在group中的哪台storage做主storage,当一个文件上传到主storage后,就由这台机器同步文件到group内的其他storage上,0:轮训策略 1:根据ip地址排序,第一个 2:根据优先级排序,第一个

    store_server=0

    #选择那个storage作为主下载服务器,0:轮训策略 1:主上传storage作为主下载服务器

    download_server=0

    #选择文件上传到storage中的哪个(目录/挂载点),storage可以有多个存放文件的base path 0:轮训策略 2:负载均衡,选择空闲空间最大的

    store_path=0

    #系统预留空间,当一个group中的任何storage的剩余空间小于定义的值,整个group就不能上传文件了

    reserved_storage_space = 4GB

    #日志信息级别

    log_level=info

    #进程以那个用户/用户组运行,不指定默认是当前用户

    run_by_group=

    run_by_user=

    #允许那些机器连接tracker默认是所有机器

    allow_hosts=*

    #设置日志信息刷新到disk的频率,默认10s

    sync_log_buff_interval = 10

    #检测storage服务器的间隔时间,storage定期主动向tracker发送心跳,如果在指定的时间没收到信号,tracker人为storage故障,默认120s

    check_active_interval = 120

    #线程栈的大小,最小64K

    thread_stack_size = 64KB

    #storage的ip改变后服务端是否自动调整,storage进程重启时才自动调整

    storage_ip_changed_auto_adjust = true

    #storage之间同步文件的最大延迟,默认1天

    storage_sync_file_max_delay = 86400

    #同步一个文件所花费的最大时间

    storage_sync_file_max_time = 300

    #是否用一个trunk文件存储多个小文件

    use_trunk_file = false

    #最小的solt大小,应该小于4KB,默认256bytes

    slot_min_size = 256

    #最大的solt大小,如果上传的文件小于默认值,则上传文件被放入trunk文件中

    slot_max_size = 16MB

    #trunk文件的默认大小,应该大于4M

    trunk_file_size = 64MB

    #http服务是否生效,默认不生效

    http.disabled=false

    #http服务端口

    http.server_port=8080

    #检测storage上http服务的时间间隔,<=0表示不检测

    http.check_alive_interval=30

    #检测storage上http服务时所用请求的类型,tcp只检测是否可以连接,http必须返回200

    http.check_alive_type=tcp

    #通过url检测storage http服务状态

    http.check_alive_uri=/status.html

    #if need find content type from file extension name

    http.need_find_content_type=true

    #用include包含进http的其他设置

    ##include http.conf

    附录二:FastDFS配置手册storage.conf

    storage.conf配置文件分析:

    #tracker.conf

    disabled=false

    #这个storage服务器属于那个group

    group_name=group1

    #tracker.conf

    bind_addr=

    #连接其他服务器时是否绑定地址,bind_addr配置时本参数才有效

    client_bind=true

    #tracker.conf

    port=23000

    connect_timeout=30

    network_timeout=60

    #主动向tracker发送心跳检测的时间间隔

    heart_beat_interval=30

    #主动向tracker发送磁盘使用率的时间间隔

    stat_report_interval=60

    #tracker.conf

    base_path=/opt/fdfs

    max_connections=256

    #接收/发送数据的buff大小,必须大于8KB

    buff_size = 256KB

    #tracker.conf

    work_threads=4

    #磁盘IO是否读写分离

    disk_rw_separated = true

    #是否直接读写文件,默认关闭

    disk_rw_direct = false

    #混合读写时的读写线程数

    disk_reader_threads = 1

    disk_writer_threads = 1

    #同步文件时如果binlog没有要同步的文件,则延迟多少毫秒后重新读取,0表示不延迟

    sync_wait_msec=50

    #同步完一个文件后间隔多少毫秒同步下一个文件,0表示不休息直接同步

    sync_interval=0

    #表示这段时间内同步文件

    sync_start_time=00:00

    sync_end_time=23:59

    #同步完多少文件后写mark标记

    write_mark_file_freq=500

    #storage在存储文件时支持多路径,默认只设置一个

    store_path_count=1

    #配置多个store_path路径,从0开始,如果store_path0不存在,则base_path必须存在

    store_path0=/opt/fdfs

    #store_path1=/opt/fastdfs2

    #subdir_count  * subdir_count个目录会在store_path下创建,采用两级存储

    subdir_count_per_path=256

    #设置tracker_server

    tracker_server=x.x.x.x:22122

    #tracker.conf

    log_level=info

    run_by_group=

    run_by_user=

    allow_hosts=*

    #文件在数据目录下的存放策略,0:轮训 1:随机

    file_distribute_path_mode=0

    #当问及是轮训存放时,一个目录下可存放的文件数目

    file_distribute_rotate_count=100

    #写入多少字节后就开始同步,0表示不同步

    fsync_after_written_bytes=0

    #刷新日志信息到disk的间隔

    sync_log_buff_interval=10

    #同步storage的状态信息到disk的间隔

    sync_stat_file_interval=300

    #线程栈大小

    thread_stack_size=512KB

    #设置文件上传服务器的优先级,值越小越高

    upload_priority=10

    #是否检测文件重复存在,1:检测 0:不检测

    check_file_duplicate=0

    #check_file_duplicate设置为1时,次值必须设置

    key_namespace=FastDFS

    #FastDHT建立连接的方式 0:短连接 1:长连接

    keep_alive=0

    #tracker.conf

    http.disabled=false

    http.domain_name=

    http.server_port=8888

    http.trunk_size=256KB

    http.need_find_content_type=true

    ##include http.conf

    附录三:FastDFS常用命令

    启动命令:

    启动tracker命令:/etc/init.d/fdfs_trackerd start

    查看进程命令:ps -el | grep fdfs

    启动storage命令:/etc/init.d/fdfs_storaged start

    查看进程命令:ps -el | grep fdfs

    启动nginx命令:/usr/local/nginx/sbin/nginx

    停止命令:

    停止tracker命令:/etc/init.d/fdfs_trackerd stop

    关闭storage命令:/etc/init.d/fdfs_storaged stop

    关闭nginx命令:/usr/local/nginx/sbin/nginx -s stop

  • 相关阅读:
    【MISC】ctf-想要种子吗?——jpg图片隐写
    【MISC】ctf-白哥的鸽子——jpg图片隐写
    关于MySQL递归查询,从子类ID查询所有父类
    关于lambdaQueryWrapper中常用方法
    Jmeter之正则表达式提取器+BeanShell断言--将返回结果导出到本地文件
    SQLMap开源渗透工具-SQLMap注入安全测试
    jmeter之配置元件-HTTP授权管理器(HTTP Authorization Manager)
    Jmeter实战大全(持续更新)
    Jmeter 之Ramp-up Period&固定定时器
    《从一万到一千万没有秘密》
  • 原文地址:https://www.cnblogs.com/kevin-ying/p/11169442.html
Copyright © 2011-2022 走看看