释放双眼,带上耳机,听听看~!
网上大部分安装FastDFS并没有说清楚相关的配置文件和参数,导致集群无法启动或者性能降低。 这篇文章主要整理一下以FastDFS 6.6版本为基础的配置文件参数,需要修改的地方已经提前说明清楚
🤖 由 ChatGPT 生成的文章摘要
本次修改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
6666666666666666666666