FastDFS 配置 Storage 服务器(四)

一、安装 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 服务器

fastdfs-stoage-1.jpg

启动成功,自动创建 datalog 目录,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 数据目录

fastdfs-stoage-2.jpg

进入到数据文件夹会看到一些目录文件(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命令行工具

fastdfs-install-5.jpg

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

fastdfs-client-upload-1.jpg

  • 组名:group1

  • 磁盘:M00

  • 目录:00/00

  • 文件名称:rBB3gFw_T2CADZ-LAAAXLcZMWT480.jpeg

上传成功后,图片会被上传到我们创建的 storage_data 目录下

liurenkui@ubuntu:~$ ls MyOpt/fastdfs/storage_data/data/00/00
rBB3gFw_T2CADZ-LAAAXLcZMWT480.jpeg

fastdfs-client-upload-2.jpg

当然,我们还可以来使用工具模拟用户的下载和删除磁盘上的文件内容。

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 服务器(四)

点  赞 (1) 打  赏
分享到: