一、安装 Storage 存储服务器(172.16.119.128)
进入 /etc/fdfs
目录,把 storage.conf.sample
文件拷贝一份,名为 storage.conf
# 进入目录 cd /etc/fdfs/ # 拷贝文件 sudo cp storage.conf.sample storage.conf
1、设置 storage 工作目录
创建工作目录
sudo mkdir -p /home/liurenkui/MyOpt/fastdfs/storage
在 storage.conf
文件中,通过关键字 base_path
找到如下代码
# the base path to store data and log files base_path=/home/yuqing/fastdfs
改为自己的工作目录
# the base path to store data and log files base_path=/home/liurenkui/MyOpt/fastdfs/storage
2、配置 storage 存储目录
创建存储目录
sudo mkdir -p /home/liurenkui/MyOpt/fastdfs/storage_data
在 storage.conf
文件中,通过关键字 store_path0
找到如下代码
# store_path#, based 0, if store_path0 not exists, it's value is base_path # the paths must be exist store_path0=/home/yuqing/fastdfs #store_path1=/home/yuqing/fastdfs2
改为自己的存储目录
# store_path#, based 0, if store_path0 not exists, it's value is base_path # the paths must be exist store_path0=/home/liurenkui/MyOpt/fastdfs/storage_data #store_path1=/home/yuqing/fastdfs2
3、配置 tracker 跟踪服务器地址
在 storage.conf
文件中,通过关键字 tracker_server
找到如下代码
# tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address tracker_server=192.168.209.121:22122
将默认的ip地址,设置为上面配置的 tracker 服务器 ip 地址和端口号
# tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address tracker_server=172.16.119.129:22122
4、启动 / 停止 storage 存储服务器
# 启动 storage 存储服务 sudo service fdfs_storaged start # 查看线程 ps -ef | grep fdfs # 查看数据和日志目录 tree MyOpt/fastdfs/tracker/
启动 storage 服务器
启动成功,自动创建 data
和 log
目录,data
目录下还有一个 sync
同步记录的目录
# 逐级查看 data 数据目录 ls MyOpt/fastdfs/tracker/ ls MyOpt/fastdfs/tracker/data ls MyOpt/fastdfs/tracker/data/00 ls MyOpt/fastdfs/tracker/data/00/00
查看 storage 数据目录
进入到数据文件夹会看到一些目录文件(256*256=65536
),如上图所示。
实际文件存储路径下有创建好的多级目录。data
下有 256
个1级目录,每级目录下又有256个2级子目录,总共 65536
个文件,新写的文件会以 hash
的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。
二、校验整合
最后我们可以通过 fdfs_monitor
工具来确定一下 storage
是否注册到了 tracker
中去。
查看命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
成功后可以看到:ip_addr = 172.16.119.128 (ubuntu) ACTIVE
liurenkui@ubuntu:~$ /usr/bin/fdfs_monitor /etc/fdfs/storage.conf [2019-01-16 22:29:55] DEBUG - base_path=/home/liurenkui/MyOpt/fastdfs/storage, connect_timeout=30, 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 server_count=1, server_index=0 tracker server is 172.16.119.129:22122 group count: 1 Group 1: group name = group1 disk total space = 20028 MB disk free space = 13106 MB trunk free space = 0 MB storage server count = 1 active server count = 1 storage server port = 23000 storage HTTP port = 8888 store path count = 1 subdir count per path = 256 current write server index = 0 current trunk file id = 0 Storage 1: id = 172.16.119.128 ip_addr = 172.16.119.128 (ubuntu) ACTIVE http domain = version = 5.11 join time = 2019-01-16 22:01:48 up time = 2019-01-16 22:01:48 total storage = 20028 MB free storage = 13106 MB upload priority = 10 store_path_count = 1 subdir_count_per_path = 256 storage_port = 23000 storage_http_port = 8888 current_write_path = 0 source storage id = if_trunk_server = 0 connection.alloc_count = 256 connection.current_count = 0 connection.max_count = 0 total_upload_count = 0 success_upload_count = 0 total_append_count = 0 success_append_count = 0 total_modify_count = 0 success_modify_count = 0 total_truncate_count = 0 success_truncate_count = 0 total_set_meta_count = 0 success_set_meta_count = 0 total_delete_count = 0 success_delete_count = 0 total_download_count = 0 success_download_count = 0 total_get_meta_count = 0 success_get_meta_count = 0 total_create_link_count = 0 success_create_link_count = 0 total_delete_link_count = 0 success_delete_link_count = 0 total_upload_bytes = 0 success_upload_bytes = 0 total_append_bytes = 0 success_append_bytes = 0 total_modify_bytes = 0 success_modify_bytes = 0 stotal_download_bytes = 0 success_download_bytes = 0 total_sync_in_bytes = 0 success_sync_in_bytes = 0 total_sync_out_bytes = 0 success_sync_out_bytes = 0 total_file_open_count = 0 success_file_open_count = 0 total_file_read_count = 0 success_file_read_count = 0 total_file_write_count = 0 success_file_write_count = 0 last_heart_beat_time = 2019-01-16 22:29:48 last_source_update = 1970-01-01 08:00:00 last_sync_update = 1970-01-01 08:00:00 last_synced_timestamp = 1970-01-01 08:00:00 liurenkui@ubuntu:~$
三、配置 Client 客户端,模拟上传/下载/删除文件
前面已经对 FastDFS 的安装和配置,做了比较详细的讲解。接下来介绍一下如何使用命令上传一个文件。
注: 为了方便,我直接在 tracker 服务器上,增加一个 client
处理了(默认客户端是一个单独服务器)。
1、配置客户端
同样的,需要修改客户端的配置文件,进入 /etc/fdfs
目录,把 client.conf.sample
文件拷贝一份,名为 client.conf
# 进入目录 cd /etc/fdfs/ # 拷贝文件 sudo cp client.conf.sample client.conf
重点修改重点如下3项
base_path
:tracker服务器文件路径tracker_server
:tracker服务器IP地址和端口号http.tracker_server_port
:tracker 服务器的 http端口号,必须和tracker的设置对应起来
修改如下
# the base path to store log files base_path=/home/liurenkui/MyOpt/fastdfs/tracker # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address tracker_server=172.16.119.129:22122 #HTTP settings http.tracker_server_port=8080
在上面介绍的命令行列表中,有 fdfs_upload_file
命令,使用它来进行模拟上传文件。
FastDFS命令行工具
2、模拟上传
我在 Tracker / Client 服务器(172.16.119.129)上,放了一个 example.jpeg
图片文件,文件路径为:/home/liurenkui/桌面/example.jpeg
执行命令:
# 语法:fdfs_upload_file <config_file> [local_filename] /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/liurenkui/桌面/example.jpeg
示例
liurenkui@ubuntu:~/桌面$ /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/liurenkui/桌面/example.jpeg group1/M00/00/00/rBB3gFw_T2CADZ-LAAAXLcZMWT480.jpeg
组名:group1
磁盘:M00
目录:00/00
文件名称:rBB3gFw_T2CADZ-LAAAXLcZMWT480.jpeg
上传成功后,图片会被上传到我们创建的 storage_data
目录下
liurenkui@ubuntu:~$ ls MyOpt/fastdfs/storage_data/data/00/00 rBB3gFw_T2CADZ-LAAAXLcZMWT480.jpeg
当然,我们还可以来使用工具模拟用户的下载和删除磁盘上的文件内容。
3、模拟下载
执行命令:
# 语法:fdfs_download_file <config_file> <file_id> [local_filename] /usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBB3gFw_T2CADZ-LAAAXLcZMWT480.jpeg a.jpeg
4、模拟删除
执行命令
# 语法:fdfs_delete_file <config_file> <file_id> /usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/rBB3gFxARnaANl_6AAD5RW7DK4w39.jpeg
四、Storage 存储服务器配置文件介绍
查看 storage.conf.sample
文件内容
# 配置文件是否禁用 # false 启用,true禁用 disabled=false # 指定 storage server 所在的组名称 # 如果需要从 tracker 服务器上获取,就需要在 tracker.conf 将 use_storage_id 设置为 true, 并且 storage_ids.conf 要配置正确 group_name=group1 # bind_addr= 后面为绑定的IP地址 (常用于服务器有多个IP但只希望一个IP提供服务)。如果不填则表示所有的(一般不填就OK) bind_addr= # 如果在连接到其他服务器时绑定该主机的地址(此存储服务器作为客户端) # true:当指定bind_addr时,本参数才有效 # false:用于绑定此主机的任何地址 client_bind=true # storage server 端口 port=23000 # 连接超时,默认30秒,针对socket套接字函数connect connect_timeout=30 # 网络超时,默认30秒,发送或接收数据时,如果在超时时间后还不能发送或接收数据,则本次网络通信失败。 network_timeout=60 # 心跳间隔时间,默认30秒 (这里是指主动向tracker server 发送心跳) heart_beat_interval=30 # storage server 向 tracker server 报告磁盘剩余空间的时间间隔,默认 60秒。 stat_report_interval=60 # 存储数据和日志文件的基本路径 base_path=/home/yuqing/fastdfs # 服务器支持的最大并发连接数 # 默认 256 # 更多max_connections意味着将使用更多内存 max_connections=256 # buff 发送数据大小,值必须大于8KB,默认 64KB # since V2.00 buff_size = 256KB # 接受线程数 默认 1 # since V4.07 accept_threads=1 # 工作线程数, 应该 <= max_connections,默认 4,通常设置为CPU数 # since V2.00 work_threads=4 # 磁盘IO读写是否分离,默认 true ## false 用于混合读写 ## true 用于分离读写 # since V2.00 disk_rw_separated = true # 针对单个存储路径的读线程数,默认 1,对于混合读/写,可以设置为 0。 # 读写分离时,系统中的读线程数 = disk_reader_threads * # 读写混合时,系统中的读写线程数 = (disk_reader_threads + disk_writer_threads) * store_path_count # since V2.00 disk_reader_threads = 1 # 针对单个存储路径的写线程数,默认 1,对于混合读/写,可以设置为 0。 # 读写分离时,系统中的写线程数 = disk_writer_threads * store_path_count # 读写混合时,系统中的读写线程数 = (disk_reader_threads + disk_writer_threads) * store_path_count # since V2.00 disk_writer_threads = 1 # 同步文件时,如果从binlog中没有读到要同步的文件,休眠N毫秒后再重新读取。 # 值必须大于 0,默认 200 毫秒 sync_wait_msec=50 # 同步上一个文件后,再同步下一个文件的时间间隔,单位为毫秒,0表示不休眠,直接同步下一个文件。 sync_interval=0 sync_start_time=00:00 # sync_start_time 和 sync_end_time,一起解释。 # 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定 # 格式: Hour:Minute,小时[0-23],分钟[0-59] sync_end_time=23:59 # 同步完N个文件后,把storage的mark文件同步到磁盘 # 默认 500 write_mark_file_freq=500 # 存放文件时 storage server 支持多个路径(例如磁盘)。这里配置存放文件的基路径数目,通常只配一个目录。 # 默认 1 store_path_count=1 # 逐一配置 store_path 个路径,索引号基于0。注意配置方法后面有0,1,2 ......,需要配置 0 到 store_path - 1。 # 路径必须存在 store_path0=/home/yuqing/fastdfs #store_path1=/home/yuqing/fastdfs2 # FastDFS存储文件时,采用了两级目录。这里配置存放文件的目录个数 (系统的存储机制) # 如果本参数为N(如:256),那么 storage server 在初次运行时,会自动创建 N * N 个存放文件的子目录。 # 取值范围【1-256】,默认 256 subdir_count_per_path=256 # tracker_server 的列表。 (storage server 是主动连接 tracker_server ) # tracker_server 格式:"host:port" host可以是域名或ip地址 # 有多个tracker server时,每个tracker server写一行 tracker_server=192.168.209.121:22122 # 日志级别 ### emerg for emergency ### alert ### crit for critical ### error ### warn for warning ### notice ### info ### debug log_level=info # 操作系统运行FastDFS的用户组 (不填 就是当前用户组,哪个启动进程就是哪个) run_by_group= # 操作系统运行FastDFS的用户 (不填 就是当前用户,哪个启动进程就是哪个) run_by_user= # 可以连接到此 tracker server 的ip范围,可以是主机名或ip地址(对所有类型的连接都有影响,包括客户端,storage server) # "*" 表示匹配所有IP地址 # 可以使用 CIDR(无类域间路由),例如 192.168.5.64/26 # 例如 # 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: 轮流存放,在一个目录下存储设置的文件数后(参数file_distribute_rotate_count中设置文件数),使用下一个目录进行存储 # 1: 随机存储,根据文件名对应的hash code来分散存储 file_distribute_path_mode=0 # 当参数 file_distribute_path_mode = 0(轮流存放方式)时,本参数有效 # 当一个目录下的文件存放的文件数达到本参数值时,后续上传的文件存储到下一个目录中 # 默认 100 file_distribute_rotate_count=100 # 当写入大文件时,每写入N个字节,调用一次系统函数fsync,将内容强行同步到硬盘 # 0: 从不调用fsync(默认) # other: call fsync when written bytes >= this bytes fsync_after_written_bytes=0 # 同步或刷新日志信息到硬盘的时间间隔,值必须大于0,默认 10秒 # 注意:storage server 的日志信息不是时时写硬盘的,而是先写内存。 sync_log_buff_interval=10 # 同步binglog(更新操作日志)到硬盘的时间间隔,默认 60秒 # 本参数会影响新上传文件同步延迟时间 sync_binlog_buff_interval=10 # 把storage的stat文件(存储状态信息)同步到磁盘的时间间隔,默认 300秒。 sync_stat_file_interval=300 # 线程栈的大小。FastDFS server端采用了线程方式,线程栈越大,一个线程占用的系统资源就越多。 # 值应该 >= 512KB,默认 512KB thread_stack_size=512KB # 本 storage server 作为源服务器,上传文件的优先级,可以为负数。值越小,优先级越高。 # 这里就和 tracker.conf 中 store_server= 2 时的配置相对应了 # 默认 10 upload_priority=10 # NIC别名前缀,例如Linux中的eth,您可以通过 ifconfig -a 查看它 # 多个别名用逗号分隔。 空值表示由 OS 类型自动设置 # 默认 空 if_alias_prefix= # 是否检测上传文件是否重复。如果重复就使用 FastDHT 建立一个符号链接,以节省磁盘空间 # 1 或 yes: 检测 # 0 或 no: 不检测 # 默认 0 check_file_duplicate=0 # 检查文件重复的文件签名方法 ## hash: 四个32位哈希码(默认) ## md5: MD5 签名 # since V4.01 file_signature_method=hash # 用于存储文件索引(符号链接)的名称空间(键值对) # 当 check_file_duplicate 设定为1 或 yes时 (true/on也是可以的) ,必须设置该值 key_namespace=FastDFS # 与 FastDHT servers 的连接方式 (是否为持久连接) ,默认是0(短连接方式)。 # 可以考虑使用长连接,这要看FastDHT server的连接数是否够用。 keep_alive=0 # 下面是关于FastDHT servers 的设定 需要对FastDHT servers 有所了解 # 可以通过 #include filename 方式来加载 FastDHT 服务器列表 # 当文件名是相对路径(如纯文件名),基本路径是当前配置文件的 base_path 基本路径。 # 同样要求 check_file_duplicate=1 时才有用,不然系统会忽略 # 有关详细信息,请参阅FastDHT的安装 ##include /home/yuqing/fastdht/conf/fdht_servers.conf # 是否将文件操作记录到access log,默认 false # since V4.00 use_access_log = false # 是否定期轮转access log,目前仅支持一天轮转一次,默认 false # since V4.00 rotate_access_log = false # access log 定期轮转的时间点,只有当rotate_access_log设置为true时有效 # 时间格式: Hour:Minute,默认 00:00 # since V4.00 access_log_rotate_time=00:00 # 是否定期轮转error log,目前仅支持一天轮转一次,默认 false # since V4.02 rotate_error_log = false # error log定期轮转的时间点,只有当rotate_error_log设置为true时有效 # 时间格式: Hour:Minute,默认 00:00 # since V4.02 error_log_rotate_time=00:00 # access log按文件大小轮转 # 默认 0,表示不按文件大小轮转,否则当 access log 达到该大小,就会轮转到新文件中 # since V4.02 rotate_access_log_size = 0 # error log按文件大小轮转 # 默认 0,表示不按文件大小轮转,否则当 error log 达到该大小,就会轮转到新文件中 # since V4.02 rotate_error_log_size = 0 # 保留日志文件的天数 # 默认0,表示不删除旧的日志文件 log_file_keep_days = 0 # 文件同步的时候,是否忽略无效的binlog记录,默认 false # since V4.02 file_sync_skip_invalid_record=false # 是否使用连接池,默认 false # since V4.05 use_connection_pool = false # 空闲时间超过此时间的连接将被关闭,默认 3600 秒 # since V4.05 connection_pool_max_idle_time = 3600 # storage server上web server域名,通常仅针对单独部署的web server。这样URL中就可以通过域名方式来访问storage server上的文件了, # 参数为空就是 sorage server 的IP地址了。否则此域名将在 tracker 服务器重定向的URL中显示 http.domain_name= # storage 服务器在 web 服务器上的端口号 http.server_port=8888
五、Client 客户端配置文件介绍
查看 client.conf.sample
文件内容
# 连接超时,默认30秒,针对 socket套接字函数connect connect_timeout=30 # 网络超时,默认30秒,发送或接收数据时,如果在超时时间后还不能发送或接收数据,则本次网络通信失败。 network_timeout=60 # 存储日志文件的基本路径 base_path=/home/yuqing/fastdfs # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address tracker_server=192.168.0.197:22122 # 日志级别 ### emerg for emergency ### alert ### crit for critical ### error ### warn for warning ### notice ### info ### debug log_level=info # 是否使用线程池 # since V4.05 use_connection_pool = false # 空闲时间超过此时间的连接将被关闭,默认 3600 # since V4.05 connection_pool_max_idle_time = 3600 # 从跟踪服务器加载FastDFS参数,默认 false # since V4.05 load_fdfs_parameters_from_tracker=false # 使用 server ID 作为 storage server 标识,而不是IP地址,默认 false # 仅当 load_fdfs_parameters_from_tracker = false 时有效 # 默认 false # since V4.05 use_storage_id = false # 指定存储 ids filename,可以使用相对或绝对路径,与tracker.conf相同 # 仅当 load_fdfs_parameters_from_tracker = false 时有效 # since V4.05 storage_ids_filename = storage_ids.conf # HTTP 跟踪服务器端口号 http.tracker_server_port=80 # 使用“#include”指令包含HTTP其他设置 ##include http.conf
未经允许请勿转载:程序喵 » FastDFS 配置 Storage 服务器(四)