网上大部分安装FastDFS并没有说清楚相关的配置文件和参数,导致集群无法启动或者性能降低。 这篇文章主要整理一下以FastDFS 6.6版本为基础的配置文件参数,需要修改的地方已经提前说明清楚
本次修改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
- # base_path 目录地址(根目录必须存在,子目录会自动创建)
- # 附目录说明:
- 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
- # 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
- # 设置得大一些,系统整体性能会有所提升。
- 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。
- # 读写分离时,系统中的读线程数 = disk_reader_threads * store_path_count
- # 读写混合时,系统中的读写线程数 = (disk_reader_threads + disk_writer_threads) * store_path_count
- disk_writer_threads = 1
- #针对单个存储路径的写线程数,默认值为1。
- # 读写分离时,系统中的写线程数 = disk_writer_threads * store_path_count
- # 读写混合时,系统中的读写线程数 = (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
- # (同步 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
- # 文件在data目录下分散存储策略。
- # 0: 轮流存放,在一个目录下存储设置的文件数后(参数file_distribute_rotate_count中设置文件数),使用下一个目录进行存储。
- # 1: 随机存储,根据文件名对应的hash code来分散存储。
- file_distribute_rotate_count = 100
- # 当上面的参数file_distribute_path_mode配置为0(轮流存放方式)时,本参数有效。
- # 当一个目录下的文件存放的文件数达到本参数值时,后续上传的文件存储到下一个目录中。
- fsync_after_written_bytes = 0
- #当写入大文件时,每写入N个字节,调用一次系统函数fsync将内容强行同步到硬盘。0表示从不调用fsync
- sync_log_buff_interval = 1
- #同步或刷新日志信息到硬盘的时间间隔,单位为秒
- #注意:storage server 的日志信息不是时时写硬盘的,而是先写内存。
- sync_binlog_buff_interval = 1
- # 同步binglog(更新操作日志)到硬盘的时间间隔,单位为秒
- # 本参数会影响新上传文件同步延迟时间
- sync_stat_file_interval = 300
- # 把storage的stat文件同步到磁盘的时间间隔,单位为秒。
- # 注:如果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
- # 文件去重时,文件内容的签名方式:
- ## 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
- # 是否定期轮转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
- # 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