FastDFS 配置文件详解

网上大部分安装FastDFS并没有说清楚相关的配置文件和参数,导致集群无法启动或者性能降低。 这篇文章主要整理一下以FastDFS 6.6版本为基础的配置文件参数,需要修改的地方已经提前说明清楚

    <img src="https://img.mryunwei.com/uploads/2023/05/20230504095107230.jpg" alt>

        <img src="https://img.mryunwei.com/uploads/2023/05/20230504095107230.jpg" alt>

            <h2>搭建分布式文件系统FastDFS集群</h2>

                <img src="https://img.mryunwei.com/uploads/2023/05/20230504095109910.gif">新闻联播老司机
                <li>
                        20年7月3日</li>
                    <li>
                        喜欢:0
                    </li>
                    <li>
                        浏览:2.9k
                    </li>

本次修改FastDFS版本为v6.6 关于tacker.conf参数解释

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

bind_addr =
#程序的监听地址,如果不设定则监听所有地址(0.0.0.0)

port = 22122
#tracker监听的端口

connect_timeout = 5
#连接超时时间,针对socket套接字函数connect

network_timeout = 60
#tracker server的网络超时,单位为秒。发送或接收数据时,如果在超时时间后还不能发送或接收数据,则本次网络通信失败。 

base_path = /data/tracker
1. base_path 目录地址(根目录必须存在,子目录会自动创建)
1. 附目录说明: 
  tracker server目录及文件结构:
  ${base_path}
    |__data
    |     |__storage_groups.dat:存储分组信息
    |     |__storage_servers.dat:存储服务器列表
    |__logs
          |__trackerd.log:tracker server日志文件
数据文件storage_groups.dat和storage_servers.dat中的记录之间以换行符(n)分隔,字段之间以西文逗号(,)分隔。
storage_groups.dat中的字段依次为:
  1. group_name:组名
  2. storage_port:storage server端口号

storage_servers.dat中记录storage server相关信息,字段依次为:
  1. group_name:所属组名
  2. ip_addr:ip地址
  3. status:状态
  4. sync_src_ip_addr:向该storage server同步已有数据文件的源服务器
  5. sync_until_timestamp:同步已有数据文件的截至时间(UNIX时间戳)
  6. stat.total_upload_count:上传文件次数
  7. stat.success_upload_count:成功上传文件次数
  8. stat.total_set_meta_count:更改meta data次数
  9. stat.success_set_meta_count:成功更改meta data次数
  10. stat.total_delete_count:删除文件次数
  11. stat.success_delete_count:成功删除文件次数
  12. stat.total_download_count:下载文件次数
  13. stat.success_download_count:成功下载文件次数
  14. stat.total_get_meta_count:获取meta data次数
  15. stat.success_get_meta_count:成功获取meta data次数
  16. stat.last_source_update:最近一次源头更新时间(更新操作来自客户端)
  17. stat.last_sync_update:最近一次同步更新时间(更新操作来自其他storage server的同步)

max_connections = 1024
#系统提供服务时的最大连接数。对于V1.x,因一个连接由一个线程服务,也就是工作线程数。

accept_threads = 1
#该参数决定接收客户端连接的线程数,默认值为1,适当放大该参数可改善Storage处理连接的能力,改成2[线上环境cpu为32核心可支持足够多的线程数]。

work_threads = 4
#工作线程用来处理网络IO,默认值为4,该参数影响Stroage可以同时处理的连接数

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

max_buff_size = 128KB
#接收/发送数据的buff大小必须小于128KB

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

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

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

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

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

log_level = info
#日志信息级别

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

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

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

check_active_interval = 120
#检测 storage server 存活的时间隔,单位为秒。
#storage server定期向tracker server 发心跳,如果tracker server在一个check_active_interval内还没有收到storage server的一次心跳,那边将认为该storage server已经下线。所以本参数值必须大于storage server配置的心跳时间间隔。通常配置为storage server心跳时间间隔的2倍或3倍。

thread_stack_size = 256KB
#线程栈的大小。FastDFS server端采用了线程方式。更正一下,tracker server线程栈不应小于64KB,不是512KB。

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

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

storage_sync_file_max_time = 300
#存储服务器同步一个文件需要消耗的最大时间,单位为300s,即5分钟。

use_trunk_file = false 
#是否使用小文件合并存储特性 [false代表关闭]

slot_min_size = 256
#trunk file分配的最小字节数。比如文件只有16个字节,系统也会分配slot_min_size个字节。

slot_max_size = 1MB
#只有文件大小<=这个参数值的文件,才会合并存储。如果一个文件的大小大于这个参数值,将直接保存到一个文件中(即不采用合并存储方式)

trunk_alloc_alignment_size = 256
#对齐大小越大,磁盘碎片的可能性越小,但浪费的空间也更多。

trunk_free_space_merge = true
#是否合并中继文件的连续可用空间

delete_unused_trunk_files = false
#files 删除/回收未使用的中继文件

trunk_file_size = 64MB
#runk file 大小

trunk_create_file_advance = false
#是否提前创建 trunk file

trunk_create_file_time_base = 02:00
 提前创建trunk file的起始时间点(基准时间),02:00表示第一次创建的时间点是凌晨2点。

trunk_create_file_interval = 86400
#创建 trunk file 时间间隔, 86400 即隔一天

trunk_create_file_space_threshold = 20G
#提前创建trunk file时,需要达到的空闲trunk大小
#比如本参数为20G,而当前空闲trunk为4GB,那么只需要创建16GB的trunk file即可。

trunk_init_check_occupying = false
#trunk初始化时,是否检查可用空间是否被占用

trunk_init_reload_from_binlog = false
#是否无条件从trunk binlog中加载trunk可用空间信息
#FastDFS缺省是从快照文件storage_trunk.dat中加载trunk可用空间,
#该文件的第一行记录的是trunk binlog的offset,然后从binlog的offset开始加载

trunk_compress_binlog_min_interval = 86400
#压缩 trunk binlog 文件的最小间隔

trunk_compress_binlog_interval = 86400
#压缩 trunk binlog 文件的间隔时间 (默认1天)

trunk_compress_binlog_time_base = 03:00
#压缩 trunk binlog 文件的时间点

trunk_binlog_max_backups = 7
#trunk binlog 文件最大备份数

use_storage_id = false
#是否使用server ID作为storage server标识

storage_ids_filename = storage_ids.conf
#use_storage_id 设置为true,才需要设置本参数
#在文件中设置组名、server ID和对应的IP地址,参见源码目录下的配置示例:conf/storage_ids.conf

id_type_in_filename = id
#存储服务ID文件中的 ID 类型

store_slave_file_use_link = false
#存储从文件是否使用符号链接

rotate_error_log = false
#是否定期轮转error log,目前仅支持一天轮转一次

error_log_rotate_time = 00:00
#error log定期轮转的时间点,只有当rotate_error_log设置为true时有效

compress_old_error_log = false
#是否压缩旧的错误日志

compress_error_log_days_before = 7
#压给它几天前的错误日志 (compress_old_error_log = false本参数不生效)

rotate_error_log_size = 0
#error log按大小轮转
#设置为0表示不按文件大小轮转,否则当error log达到该大小,就会轮转到新文件中

log_file_keep_days = 0
#日志文件保留几天(0代表永久保留)

use_connection_pool = true
#是否使用连接池

connection_pool_max_idle_time = 3600
#连接空闲时长,超过则连接被关闭 (单位秒)

#include http.conf
#如果加载http.conf的配置文件 去掉第一个

#以下是关于http的设置了默认编译是不生效的要求更改 #WITH_HTTPD=1 将 注释#去掉 再编译
http.server_port = 8080
http.check_alive_interval = 30
http.check_alive_type = tcp
http.check_alive_uri = /status.html

storage配置参数解释 storage.conf

disabled = false
bind_addr =
connect_timeout = 5

network_timeout = 60
1. storage server 网络超时时间,单位为秒。发送或接收数据时,如果在超时时间后还不能发送或接收数据,则本次网络通信失败。

group_name = group2
#指定此storage server所在组(卷)

client_bind = true
#bind_addr通常是针对server的。当指定bind_addr时,本参数才有效。
#本storage server作为client连接其他服务器(如tracker server、其他storage server),是否绑定bind_addr。

port = 23000
#storage 默认端口

heart_beat_interval = 30
#心跳间隔时间,单位为秒 (这里是指主动向tracker server 发送心跳)

stat_report_interval = 60
#storage server向tracker server报告磁盘剩余空间的时间间隔,单位为秒。

base_path = /data/fastdfs_data
#数据存储目录地址

max_connections = 1024
#最大连接数

buff_size = 256KB
#设置队列结点的buffer大小。工作队列消耗的内存大小 = buff_size * max_connections
1. 设置得大一些,系统整体性能会有所提升。

accept_threads = 1
#接收数据的线程数

work_threads = 4
#工作线程数,一般为cpu个数,当然CPU核数太多的话可以稍小一点。如我们是12CCPU,这里设置为8.

disk_rw_separated = true
#磁盘IO读写是否分离。磁盘读/写分离为false则为混合读写,如果为true则为分离读写的。默认值为V2.00以后为true。

disk_reader_threads = 1
#针对单个存储路径的读线程数,默认值为1。
1. 读写分离时,系统中的读线程数 = disk_reader_threads * store_path_count
1. 读写混合时,系统中的读写线程数 = (disk_reader_threads + disk_writer_threads) * store_path_count

disk_writer_threads = 1
#针对单个存储路径的写线程数,默认值为1。
1. 读写分离时,系统中的写线程数 = disk_writer_threads * store_path_count
1. 读写混合时,系统中的读写线程数 = (disk_reader_threads + disk_writer_threads) * store_path_count

sync_wait_msec = 50
#同步文件时,如果从binlog中没有读到要同步的文件,休眠N毫秒后重新读取。0表示不休眠,立即再次尝试读取。
#出于CPU消耗考虑,不建议设置为0。如何希望同步尽可能快一些,可以将本参数设置得小一些,比如设置为10ms

sync_interval = 0
#同步上一个文件后,再同步下一个文件的时间间隔,单位为毫秒,0表示不休眠,直接同步下一个文件。

sync_start_time = 00:00
sync_end_time = 23:59
#上面二个一起解释。允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定

write_mark_file_freq = 500
1. (同步 N 个文件后就写入标记文件)

disk_recovery_threads = 3
#硬盘恢复线程数

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

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

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

tracker_server = 192.168.31.101:22122
tracker_server = 192.168.31.102:22122
#设置tracker_server

log_level = info
#日志级别

run_by_group =
run_by_user =
allow_hosts = *

file_distribute_path_mode = 0
1. 文件在data目录下分散存储策略。
1. 0: 轮流存放,在一个目录下存储设置的文件数后(参数file_distribute_rotate_count中设置文件数),使用下一个目录进行存储。
1. 1: 随机存储,根据文件名对应的hash code来分散存储。

file_distribute_rotate_count = 100
1. 当上面的参数file_distribute_path_mode配置为0(轮流存放方式)时,本参数有效。
1. 当一个目录下的文件存放的文件数达到本参数值时,后续上传的文件存储到下一个目录中。

fsync_after_written_bytes = 0
#当写入大文件时,每写入N个字节,调用一次系统函数fsync将内容强行同步到硬盘。0表示从不调用fsync  

sync_log_buff_interval = 1
#同步或刷新日志信息到硬盘的时间间隔,单位为秒
#注意:storage server 的日志信息不是时时写硬盘的,而是先写内存。

sync_binlog_buff_interval = 1
1. 同步binglog(更新操作日志)到硬盘的时间间隔,单位为秒
1. 本参数会影响新上传文件同步延迟时间

sync_stat_file_interval = 300
1. 把storage的stat文件同步到磁盘的时间间隔,单位为秒。
1. 注:如果stat文件内容没有变化,不会进行同步

thread_stack_size = 512KB
#线程栈大小,线程栈越大,一个线程占用的系统资源就越多。

upload_priority = 10
#本storage server作为源服务器,上传文件的优先级,可以为负数。值越小,优先级越高。这里就和 tracker.conf 中store_server= 2时的配置相对应了 

if_alias_prefix =
#网卡别名,用ifconfig -a可以看到很多本机的网卡别名,类似eth0,eth0:0等等。多个网卡别名使用逗号分割,默认为空,让系统自动选择。

check_file_duplicate = 0
#是否检测上传文件已经存在。如果已经存在,则不存在文件内容,建立一个符号链接以节省磁盘空间。 
#这个应用要配合FastDHT 使用,所以打开前要先安装FastDHT 
#1或yes 是检测,0或no 是不检测

file_signature_method = hash
1. 文件去重时,文件内容的签名方式:
## hash: 4个hash code
## md5:MD5

key_namespace = FastDFS
#当check_file_duplicate设置为1时,此值必须设置

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

use_access_log = false
#是否将文件操作记录到access log

rotate_access_log = false
1. 是否定期轮转access log,目前仅支持一天轮转一次

access_log_rotate_time = 00:00
#access log定期轮转的时间点,只有当rotate_access_log设置为true时有效

compress_old_access_log = false
#是否压缩旧的访问日志

compress_access_log_days_before = 7
#压缩几天前的访问日期

rotate_error_log = false
#是否每天轮转错误日志

error_log_rotate_time = 00:00
#错误日志轮转时间

compress_old_error_log = false
#压缩旧的错误日志

compress_error_log_days_before = 7
#压给它几天前的错误日志

rotate_access_log_size = 0
1. access log按文件大小轮转
#设置为0表示不按文件大小轮转,否则当access log达到该大小,就会轮转到新文件中

rotate_error_log_size = 0
#error log按文件大小轮转
#设置为0表示不按文件大小轮转,否则当error log达到该大小,就会轮转到新文件中

log_file_keep_days = 0
#保留日志文件的日期0表示不删除旧的日志文件

file_sync_skip_invalid_record = false
#文件同步的时候,是否忽略无效的binlog记录

use_connection_pool = true
#是否使用连接池

connection_pool_max_idle_time = 3600
#连接的空闲时间超过这个时间将被关闭,单位:秒

compress_binlog = true
#是否使用gzip压缩二进制日志文件

compress_binlog_time = 01:30
#压给它二进制日志时间点

check_store_path_mark = true
#是否检查存储路径的标记以防止混淆,建议开启,如果两个服务使用一个相同的存储路径,此参数要设置为 false

http.domain_name =
#服务域名, 如果为空则表示使用 IP 地址

http.server_port = 80
#http 端口

FastDFS客户端配置文件参数详解 client.conf

connect_timeout = 5
#连接的超时时间

network_timeout = 60
#网络超时(秒),默认值 60s

base_path = /data/fdfs_client/logs
#存储日志文件的基本路径

tracker_server = 192.168.31.101:22122
tracker_server = 192.168.31.102:22122
#tracker server的列表

log_level = info
#日志级别

use_connection_pool = false
#是否使用连接池

connection_pool_max_idle_time = 3600
#连接的空闲时间超过这个时间将被关闭,单位:秒

load_fdfs_parameters_from_tracker = false
#是否加载来自跟踪服务器的FastDFS参数,默认值为false。这里可以设置为true。

use_storage_id = false
#是否使用storage id替换ip作为storage server标识,默认为false

storage_ids_filename = storage_ids.conf
#在文件中设置组名、server ID和对应的IP地址
http.tracker_server_port = 80

nginx_http_module模块配置文件 mod_fastdfs.conf

connect_timeout=2
network_timeout=30

base_path=/tmp
#日志存储路径

load_fdfs_parameters_from_tracker=true
storage_sync_file_max_delay = 86400
use_storage_id = false
storage_ids_filename = storage_ids.conf

tracker_server=192.168.31.101:22122
tracker_server=192.168.31.102:22122
#tracker 服务列表

storage_server_port=23000
#storage server端口号

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

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

log_level=info
#日志级别

log_filename=
response_mode=proxy
if_alias_prefix=
flv_support = true
flv_extension = flv
group_count = 2   
#group组个数

#include http.conf
#ngx-fastdfs-module依赖

[group1]             
group_name=group1
#组名称

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

store_path0=/data/fastdfs_data 
#存储路径

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs_data

相关文章:

  1. 搭建分布式文件系统FastDFS集群
  2. CentOS 7 ETCD集群配置大全
  3. Kubernetes 1.14 二进制集群安装
  4. Xtrabackup安装以及应用