需要搭建一个高性能的文件系统?我推荐你试试它.....(中)

简介: 需要搭建一个高性能的文件系统?我推荐你试试它.....(中)
  • storage.conf


#这个配置文件是否 不生效(这里笔者个人认为,改成是否生效会比较好),true代表不生效,false代表生效
disabled = false
#组名
group_name = group1
#是否绑定ip,如果不填就代表所有的ip都提供服务,常用于服务器有多个ip但只希望一个ip提供服务
bind_addr =
# 当指定bind_addr 本参数才有效
# storage作为客户端链接其他服务器时,是否绑定bind_addr
client_bind = true
# 本storage服务器的端口号
port = 23000
# 连接超时时间 针对套接字socket函数connect
connect_timeout = 5
# storage server的网络超时时间,单位为秒。接收或发送数据时,如果在超时时间后还不能发送或接收数据,则本次网络通信失败。
network_timeout = 60
# 心跳间隔时间 单位为秒
heart_beat_interval = 30
# storage server向tracker server报告磁盘剩余空间的时间间隔,单位为秒
stat_report_interval = 60
# base_path目录地址,该目录必须存在
base_path = /home/yuqing/fastdfs
# 最大连接数
max_connections = 1024
# 设置队列结点的buffer大小。工作队列消耗的内存大小 = buff_size * max_connections
# 设置得大一些,系统整体性能会有所提升。
# 消耗的内存请不要超过系统物理内存大小。另外,对于32位系统,请注意使用到的内存不要超过3GB
buff_size = 256KB
# 接收请求的线程数
accept_threads = 1
# 工作线程数 通常设置为cpu数
work_threads = 4
# 磁盘读写是否分离
disk_rw_separated = true
# disk reader thread count per store path
# for mixed read / write, this parameter can be 0
# default value is 1
# since V2.00
# 磁盘 读 线程数量
disk_reader_threads = 1
# 磁盘 写 线程数量
disk_writer_threads = 1
# 同步文件时 如果从binlog中没有读到要同步的文件,则休眠N毫秒后重新读取,0表示不休眠。
# 同步等待时间 单位ms
sync_wait_msec = 50
# 同步间隔:同步上一个文件后,再同步下一个文件的时间间隔 单位为秒
sync_interval = 0
# 同步开始时间
sync_start_time = 00:00
# 同步结束时间
sync_end_time = 23:59
# 同步完N个文件后,把storage的mark文件同步到磁盘
# 注:如果mark文件内容没有变化 则不会同步
write_mark_file_freq = 500
# 磁盘恢复线程
disk_recovery_threads = 3
# 存放文件路径个数 存放文件时storage server支持多个路径(可以理解为windows的分区)。
store_path_count = 1
# store_path_count配置多少,这里就写多少个路径,注意:路径必须存在。
store_path0 = /home/yuqing/fastdfs
#store_path1 = /home/yuqing/fastdfs2
# FastDFS存储文件时 采用256*256结构的二级目录,这里配置存放文件的目录个数
subdir_count_per_path = 256
# tracker server的列表 有几个trackers server 就写几个
tracker_server = 192.168.209.121:22122
tracker_server = 192.168.209.122:22122
# 标准日志级别从小到大依次:debug<info<notice<warn for warning<error<crit for critcal<alert<emerg for emergency
log_level = info
# 操作系统运行FastDFS的用户组,不填默认就是启动FastDFS的用户组
run_by_group=
# 操作系统运行FastDFS的用户,不填默认就是启动FastDFS的用户
run_by_user =
# 可以连接到此Tracker Server的IP范围
# 例子:
# allow_hosts=10.0.1.[1-15,20]
# allow_hosts=host[01-08,20-25].domain.com
# allow_hosts=192.168.5.64/26
allow_hosts = *
# 文件在data目录下分散存储的策略
# 0:轮流,再一个目录下存储设置的文件数后,使用下一个目录进行存放
# 1:随机,根据文件名对应的hash_code进行分散存储(推荐)
file_distribute_path_mode = 1
# 文件存放个数达到本参数值时,使用下一个目录进行存放
# 注意:只有当file_distribute_path_mode设置为1时,这个参数才有效
file_distribute_rotate_count = 100
# 当写入大文件时 每写入N个字节,调用一次系统函数fsync将内容强行同步到硬盘。0表示不调用fsync
fsync_after_written_bytes = 0
# 同步或刷新日志到硬盘的时间间隔,单位为秒
# 注意:storage server 的日志信息不是直接写硬盘的,而是先写内存再写硬盘
sync_log_buff_interval = 1
# 同步binlog日志到硬盘的时间间隔 单位为秒
sync_binlog_buff_interval = 1
# 把storage的stat文件同步到硬盘的时间间隔 单位为秒·
sync_stat_file_interval = 300
# 线程栈的大小
# 线程栈越大,一个线程占用的系统资源就越多,可以启动的线程就越少。
thread_stack_size = 512KB
# 上传优先级 值越小 优先级越高 和tracker.conf的storage_server = 2时的配置相对应
upload_priority = 10
#NIC别名前缀,比如Linux中的eth,可以通过ifconfig-a看到
#用逗号分隔的多个别名。空值表示按操作系统类型自动设置
#默认值为空
if_alias_prefix =
# 检查文件是否重复,如果设置为true,则使用FastDHT去存储文件的索引(需要先安装FastDHT)
# 1或者yes 需要检查
# 0或者no 不需要检查
check_file_duplicate = 0
# 文件去重时,文件内容的签名方式
# hash:4个hashcode
# MD5:MD5
file_signature_method = hash
# 当上个参数设置为1或者yes时,本参数有效
# FastDHT中的命名空间
key_namespace = FastDFS
# 与FastDHT server的连接方式 是否为持久连接
# 0 短链接 1 长连接
keep_alive = 0
# you can use "#include filename" (not include double quotes) directive to
# load FastDHT server list, when the filename is a relative path such as
# pure filename, the base path is the base path of current/this config file.
# must set FastDHT server list when check_file_duplicate is true / on
# please see INSTALL of FastDHT for detail
##include /home/yuqing/fastdht/conf/fdht_servers.conf
# 是否将文件操作记录到access_log
use_access_log = false
# 是否定期分割access_log
rotate_access_log = false
# access_log分割时间
access_log_rotate_time = 00:00
# 是否压缩旧的access_log
compress_old_access_log = false
# 压缩多久之前的access_log
compress_access_log_days_before = 7
# 是否分割error_log
rotate_error_log = false
# 分割error_log的时间
error_log_rotate_time = 00:00
# 是否压缩error_log
compress_old_error_log = false
# 压缩多久之前的error_log
compress_error_log_days_before = 7
# 当access_log达到一定大小时分割  0表示不按大小分割
rotate_access_log_size = 0
# 当error_log达到一定大小时分割 0表示不按大小分割
rotate_error_log_size = 0
# 日志文件保存天数 0表示不删除
log_file_keep_days = 0
# 日志同步是否忽略无效的binlog记录
file_sync_skip_invalid_record = false
# 是否使用线程池
use_connection_pool = true
# 最大空闲连接时间,只有使用线程池这个配置才有效
connection_pool_max_idle_time = 3600
# 是否压缩binlog日志
compress_binlog = true
# 压缩binlog日志的时间
compress_binlog_time = 01:30
# 是否检查存储路径标记
check_store_path_mark = true
# storage server上web server域名,通常仅针对单独部署的web server。这样URL中就可以通过域名方式来访问storage server上的文件了
# 参数为空表示使用ip访问
http.domain_name =
# storage服务器端口
http.server_port = 8888


  • 需要配置tracker.conf和storage.conf


#tracker.conf需要配置如下几个地方
# Tracker端口号
port = 22122
# 基础目录 请求后生成日志文件 这个目录需要手动创建 必须保证存在
base_path = /home/fdfs/log/tracker


#storage.conf需要配置如下几个地方
# 组名 暂时保持默认
group_name = group1
# 存储节点端口号
port = 23000# 存放存储节点日志的基础目录 这个目录需要手动创建 保证存在
base_path = /home/fdfs/log/storage
# 文件需要存放到哪个目录下
store_path0 = /home/fdfs/file/storage
# 追踪器地址
tracker_server = 192.168.137.17:22122


  • 启动



我们需要进行一些最小配置,来支持FastDFS的启动。


首先是tracker.conf



# 1.绑定ip
bind_addr = 192.168.137.3
# 2.设置端口
port = 22122
# 3.base目录 该目录需要手动创建,必须保证存在
base_path = /WorkSpace/SoftwareData/fdfs/log/tracker


  • 然后是storage.conf


# 1.设置group_name
group_name = group1
# 2.绑定ip
bind_addr = 192.168.137.3
# 3.设置端口号
port = 23000
# bast_path 该路径必须手动创建
base_path = /WorkSpace/SoftwareData/fdfs/log/storage
# 配置storage存储文件的路径
store_path0 = /WorkSpace/SoftwareData/fdfs/data/storage0
# Tracker Server的ip
tracker_server = 192.168.137.3


  • 配置好并且检查配置文件中的目录都存在之后,将配置文件拷贝到/etc/fdfs目录下,然后启动tracker和storage即可。


#启动命令:fdfs_trackerd/fdfs_storaged 配置文件 start 
#关闭命令:fdfs_trackerd/fdfs_storaged 配置文件 stop 
#重启命令:fdfs_trackerd/fdfs_storaged 配置文件 restart
#最好不要使用kill -9 强制杀进程,这样会导致文件不同步
[root@localhost /]# fdfs_trackerd /etc/fdfs/tracker.conf start
[root@localhost /]# fdfs_storaged /etc/fdfs/storage.conf start
[root@localhost /]# ps -ef|grep fdfs
root      1652     1  0 22:58 ?        00:00:00 fdfs_trackerd /etc/fdfs/tracker.conf start
root      1661     1  0 22:58 ?        00:00:00 fdfs_storaged /etc/fdfs/storage.conf start
root      1671  1515  0 22:58 pts/0    00:00:00 grep --color=auto fdfs


  • FastDFS的文件存储方式


启动FastDFS后,可以去到我们刚才在storage.conf中配置的storage_path目录下,可以看到FastDFS在这个目录下创建了一个data目录,在data目录中创建了256*256个文件夹,用于分散存储数据,这样可以提高查找文件的效率。这个就是上文中所说的,FastDFS解决IO效率的一种手段,将文件分布到每个目录下,类似于Java中的HashMap,通过文件的HashCode,迅速判断文件的位置从而找到文件。


image.png


  • 至此我们的FastDFS已经成功启动。
  1. 检查Linux上是否安装了GCC、libevent、libevent-devel


yum list installed|grep gcc
yum list installed|grep libevent
yum list installed|grep libevent-devel


  1. 如果没有安装,则需进行安装


yum install gcc libevent libevent-devel -y


  • 功能测试
    上文中我们已经将FastDFS成功启动,并且可以看到启动后数据目录的变化。现在我们就可以使用客户端来测试一下FastDFS的功能了。
    首先我们需要配置一下客户端,在/etc/fdfs目录下找到client.conf配置文件,进行如下的最小配置:


#client.conf 需要改如下两个地方的配置
# 日志基础路径  一定要手动创建 否则无法使用client测试
base_path = /home/fdfs/log/client
# 追踪器地址
tracker_server = 192.168.137.17:22122


  • 配置完毕后,需要在任意目录下,创建一个用于测试的文件。


[root@localhost /]# touch fdfstest 
[root@localhost /]# echo "A fdfs test file">>fdfstest 
[root@localhost /]# cat fdfstest 
A fdfs test file


  • 创建好文件并写入内容后,就可以对已部署的fdfs进行各种方式的测试了。
    首先是文件上传,FastDFS自带的客户端通过fdfs_test 配置文件 upload 需要上传的文件路径进行文件的上传,示例如下:


[root@localhost /]# fdfs_test /etc/fdfs/client.conf upload /fdfstest 
This is FastDFS client test program v6.06
Copyright (C) 2008, Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.fastken.com/ 
for more detail.
[2020-09-18 22:15:54] DEBUG - base_path=/WorkSpace/SoftwareData/fdfs/client, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
tracker_query_storage_store_list_without_group: 
 server 1. group_name=, ip_addr=192.168.137.3, port=23000
# storage信息
group_name=group1, ip_addr=192.168.137.3, port=23000
storage_upload_by_filename
# group_name:文件上传到的组
# remote_filename:文件上传到的远程路径 M00代表第一个storage 也就是刚才配置的storage0,可以理解为分区,总的一个文件目录结构就是:组名/磁盘/目录/文件名 
group_name=group1, remote_filename=M00/ED/49/wKiJA19kwRqAI_g6AAAAEbcXlKw7921454
source ip address: 192.168.137.3
file timestamp=2020-09-18 22:15:54
file size=17
file crc32=3071775916
# 在后期进行一些配置后,可以通过这个url直接访问文件
example file url: http://192.168.137.3/group1
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/ED/49/wKiJA19kwRqAI_g6AAAAEbcXlKw7921454_big
source ip address: 192.168.137.3
file timestamp=2020-09-18 22:15:54
file size=17
file crc32=3071775916
example file url: http://192.168.137.3/group1/M00/ED/49/wKiJA19kwRqAI_g6AAAAEbcXlKw7921454_big


  • 当执行完这条命令之后,我们可以看到文件上传到的storage server的一些信息,例如group_name,ip,端口等,还可以看到我们的文件上传到那个group,存在这个group的哪个路径下。
    本次我们上传的文件通过返回信息,可以看到上传到group1下(因为我们只有一个storage并且只设置了一个group),上传到的路径为M00/ED/49/wKiJA19kwRqAI_g6AAAAEbcXlKw7921454,那么就可以到这个目录下查看一下这个文件是否已经上传成功了。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
20天前
|
存储 缓存 固态存储
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
|
存储 缓存 负载均衡
需要搭建一个高性能的文件系统?我推荐你试试它.....(上)
需要搭建一个高性能的文件系统?我推荐你试试它.....(上)
需要搭建一个高性能的文件系统?我推荐你试试它.....(上)
|
7月前
|
缓存 网络协议 Unix
程序员超实用的文件系统性能评测工具盘点
程序员超实用的文件系统性能评测工具盘点
|
存储 算法 安全
Linux操作系统:基础篇5基本功能之文件系统
在Linux操作系统中,文件系统是用来组织、管理、存放文件的一套管理机制。文件系统可以有不同的格式,叫做文件系统类型(file system types)。这些格式决定信息如何被存储为文件和目录。
456 0
Linux操作系统:基础篇5基本功能之文件系统
|
负载均衡 容灾 Java
需要搭建一个高性能的文件系统?我推荐你试试它.....(下)
需要搭建一个高性能的文件系统?我推荐你试试它.....(下)
需要搭建一个高性能的文件系统?我推荐你试试它.....(下)
|
Linux 运维 安全
《高性能Linux服务器构建实战》笔记
系统安全、故障排查、自动化运维、集群架构 1、账号安全,安装完后可以删除的账号: adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher 禁用登录功能:usermod -s /...
1060 0
|
存储 Linux 数据库
《高性能Linux服务器构建实战》——3.5节本章小结
本节书摘来自华章社区《高性能Linux服务器构建实战》一书中的第3章,第3.5节本章小结,作者:高俊峰,更多章节内容可以访问云栖社区“华章社区”公众号查看
1308 0
|
应用服务中间件 Linux nginx
《高性能Linux服务器构建实战》——导读
本节书摘来自华章社区《高性能Linux服务器构建实战》一书中的目录,作者:高俊峰,更多章节内容可以访问云栖社区“华章社区”公众号查看
1421 0

热门文章

最新文章