1 简介
1.1 相关术语
fastDFS:
FastDFS是一款开源的轻量级分布式文件系统,纯C实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size < 500MB)为载体的在线服务。
tracker-server:
跟踪服务器, 主要做调度工作, 起负载均衡的作用。 在内存中记录集群中所有存储组和存储服务器的状态信息, 是客户端和数据服务器交互的枢纽。 相比GFS中的master更为精简, 不记录文件索引信息, 占用的内存量很少。
storage-server:
存储服务器( 又称:存储节点或数据服务器) , 文件和文件属性( metadata) 都保存到存储服务器上。 Storage server直接利用OS的文件系统调用管理文件。
group:
组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。
meta data:
meta data:文件相关属性,键值对( Key Value Pair) 方式,如:width=1024,heigth=768 。
存储形式:
FastDFS 不会对文件进行分块存储,客户端上传的文件和 Storage server 上的文件一一对应(V3 引入的小文件合并存储除外)。为了防止一个目录下的文件数过多影响访问性能,FastDFS 采用两级目录来保存文件。每一级目录最大 256 个子目录(默认配置为 256,可以酌情改小),两级目录对应的存储目录数为 256 * 256 = 65536。如果平均一个目录下保存 1k 个文件,那么存储的文件总数将超过 6kw。 —— FastDFS的三大误解
FastDFS 是一种轻量级对象存储解决方案。如果您需要一般分布式 数据库、K8s 和虚拟机(如 KVM)的文件系统,您可以了解实现强大数据一致性的FastCFS 和高性能。
文件上传流程
文件下载流程
2 FastDFS 3.02的安装和配置
2.0 常用命令
1、启动:
/usr/local/fastdfs/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/local/fastdfs/bin/fdfs_storaged /etc/fdfs/storage.conf
2、停止:
/usr/local/fastdfs/bin/stop.sh /usr/local/fastdfs/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/local/fastdfs/bin/stop.sh /usr/local/fastdfs/bin/fdfs_storaged /etc/fdfs/storage.conf
3、重启:
/usr/local/fastdfs/bin/restart.sh /usr/local/fastdfs/bin/fdfs_trackerd
/usr/local/fastdfs/bin/restart.sh /usr/local/fastdfs/bin/fdfs_storaged
2.1 安装包版本
fastdfs:FastDFS_v3.02(2011-10-07)
下载地址:FastDFS - Browse Files at SourceForge.net
libevent库:libevent-2.0.14
下载地址:libevent
2.2 单机部署
在访问量都不是很大情况下,将tracker和storage都部署在同一台服务器上。
centos | 7.9 |
---|---|
libevent | 利用libevent库处理网络连接请求(fastdfs v3.0--v5.0) |
FastDFS | 3.02 |
一、配置tracker服务器:172.16.20.44
1.下载相关软件
wget Download FastDFS from SourceForge.net
wget https://github.com/downloads/libevent/libevent/libevent-2.0.14-stable.tar.gz
2、编译安装libevent库
tar -zxvf libevent-2.0.14-stable.tar.gz
cd libevent-2.0.14-stable
./configure --prefix=/usr/local/libevent
make && make install
3、配置并编译安装FastDFS
tar -zxvf FastDFS_v3.02.tar.gz
cd FastDFS
vi make.sh (修改下面几处)
TARGET_PREFIX=/usr/local/fastdfs
TARGET_CONF_PATH=/etc/fdfs
WITH_HTTPD=1
WITH_LINUX_SERVICE=1
./make.sh C_INCLUDE_PATH=/usr/local/libevent/include LIBRARY_PATH=/usr/local/libevent/lib
./make.sh install
安装成功后会在/etc/fdfs/生成以下文件
ls /etc/fdfs/
client.conf http.conf mime.types storage.conf tracker.conf
4、修改tracker配置文件
重点关注以下几个配置项,其它一般默认即可
vim /etc/fdfs/tracker.conf
bind_addr= //绑定的IP
port=22122 //监听的端口
base_path=/home/data/fastdfs //存放路径
store_group=group2
reserved_storage_space = 4GB //预留存储空间
http.server_port=8080
#include httpd.conf //原来是有两个#号,去掉一个#号即可
5、修改http.conf
vim /etc/fdfs/http.conf
http.default_content_type = application/octet-stream
http.mime_types_filename=/etc/fdfs/mime.types
http.anti_steal.check_token=false
http.anti_steal.token_ttl=900
http.anti_steal.secret_key=FastDFS1234567890
http.anti_steal.token_check_fail=/usrdata/fastdfs/conf/anti-steal.jpg
6、启动tracker服务
需要注意tracker.conf文件最后一行为#include httpd.conf (1)添加库文件(以下命令如果不能正确执行,请手动输入)
echo '/usr/local/libevent/include/' >> /etc/ld.so.conf
echo '/usr/local/libevent/lib/' >> /etc/ld.so.conf
ldconfig
(2)创建basedir
mkdir -p /usrdata/fastdfs
mkdir -p /home/data/fastdfs
(3)启动tracker服务
/usr/local/fastdfs/bin/fdfs_trackerd /etc/fdfs/tracker.conf
启动完成,查看进程:
ps -ef |grep tracker
二、配置storage服务器:172.16.20.44
如果是在另外一台服务器上安装,需要再次安装FastDFS,在同一台服务器上则不用,安装步骤和上面一样,只配置文件不一样。
1、增加storage的存储目录
mkdir -p /usrdata/storage
2、修改存储结点配置文件
vim /etc/fdfs/storage.conf
重点关注以下几个配置项,其它一般默认即可
group_name=group1
bind_addr=
base_path=/usrdata/storage
store_path_count=1
store_path0=/usrdata/storage
tracker_server=172.16.20.44:22122
http.server_port=8888
#include httpd.conf //原来是有两个#号,去掉一个#号即可
3、修改测试客户端配置文件(用于测试)
vim /etc/fdfs/client.conf
重点关注以下几个配置项,其它一般默认即可
base_path=/usrdata/fastdfs
tracker_server=172.16.20.44:22122
http.tracker_server_port=8080
#include httpd.conf
4、修改http.conf(部署在同一台服务器可省略此步)
vi /etc/fdfs/http.conf
重点关注以下几个配置项,其它一般默认即可
http.default_content_type = application/octet-stream
http.mime_types_filename=/etc/fdfs/mime.types
http.anti_steal.check_token=false
http.anti_steal.token_ttl=900
http.anti_steal.secret_key=FastDFS1234567890
http.anti_steal.token_check_fail=/usrdata/fastdfs/conf/anti-steal.jpg
5、启动storage
/usr/local/fastdfs/bin/fdfs_storaged /etc/fdfs/storage.conf
三、测试文件上传
上传文件/root/test/1.jpg用于测试
/usr/local/fastdfs/bin/fdfs_test /etc/fdfs/client.conf upload /root/test/1.jpg
生成http://172.16.20.44:8080/group1/M00/00/00/rBAULGNjkNeAdeTLAAFVd5oHz0A341_big.jpg
2.3 集群部署
1、部署规划
2台主机,数据存储节点共1个group组,每个组里面有2个storage节点互为主备,这样就能保证一定高可用。角色分配如下:
ip地址 | 角色1 | 角色2 |
---|---|---|
172.16.20.46 | Tracker1 | Storage-group1-1 |
172.16.20.47 | Tracker2 | Storage-group1-2 |
其他配置仿照单机部署配置。
2、配置2台主机上的tracker服务
vim /etc/fdfs/storage.conf
#1. 复制配置文件
cd /etc/fdfs/
cp storage.conf.sample storage.conf
vim storage.conf
#修改以下内容
# Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成) (注 :这里是上传的文件存放的地址,之后的某个版本更改了,不是上传文件存放的目录)
base_path=/usrdata/storage
# 逐一配置 store_path_count 个路径,索引号基于 0。
# 如果不配置 store_path0,那它就和 base_path 对应的路径一样。
store_path0=/usrdata/storage
group_name = group1 #由于我只有1个组,只需配置一个,storage配置相同的group_name则代表同一组,互相互为主备。
# tracker_server 的列表 ,会主动连接 tracker_server
# 有多个 tracker server 时,每个 tracker server 写一行
tracker_server = 172.16.20.46:22122
tracker_server = 172.16.20.47:22122
# 访问端口 默认80 建议修改 防止冲突
http.server_port=80 #这端口没什么用,4以上版本已经不在启动网络服务了
bind_addr = 172.16.20.46 #2台独自改为自己ip
检查FastDFS Tracker Server是否启动成功:
ps aux | grep fdfs_storaged
集群检测
/usr/local/fastdfs/bin/fdfs_monitor /etc/fdfs/storage.conf
3 FastDFS 5.11的安装和配置(单机)
3.0 常用命令
# 每次开机时,手动打开 Tracker 服务
/etc/init.d/fdfs_trackerd start
# 打开 Storage 服务
/etc/init.d/fdfs_storaged start
# 启动 Nginx
/usr/local/nginx/sbin/nginx
3.1 安装包版本
-
libfastcommon :1.0.38
-
FastDFS :5.11
-
fastdfs-ninx-module :1.16
-
Nginx : 1.15.1
3.2 安装准备
yum -y install make cmake gcc gcc-c++ perl*
3.3 安装libfastcommon
cd /root
# 解压 libfastcommon 压缩包
tar -zxvf libfastcommon-1.0.39.tar.gz -C /usr/local/
cd /usr/local/libfastcommon-1.0.39
# 编译并安装
./make.sh && ./make.sh install
# 由于 libfastcommon 安装的路径在 /usr/lib64/
# 但是 FastDFS 主程序设置的 lib 目录是在 /usr/local/lib,所以需要创建软链接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
3.4 安装fastdfs
cd /root/
# 解压缩
tar -zxvf fastdfs-5.11.tar.gz -C /usr/local/
cd /usr/local/fastdfs-5.11/
# 编译并安装
./make.sh && ./make.sh install
一、配置Tracker
# 创建 Tracker 的存储日志和数据的根目录
mkdir -p /fastdfs/tracker
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
# 配置 tracker.conf
vi tracker.conf
# 启用配置文件(默认为 false,表示启用配置文件)
disabled=false
# Tracker 服务端口(默认为 22122)
port=22122
# 存储日志和数据的根目录
base_path=/fastdfs/tracker
二、配置Storage
# 创建 Storage 的存储日志和数据的根目录
mkdir -p /fastdfs/storager
cd /etc/fdfs
cp storage.conf.sample storage.conf
# 配置 storage.conf
vi storage.conf
# 启用配置文件(默认为 false,表示启用配置文件)
disabled=false
# Storage 服务端口(默认为 23000)
port=23000
# 数据和日志文件存储根目录
base_path=/fastdfs/storager
# 存储路径,访问时路径为 M00
# store_path1 则为 M01,以此递增到 M99(如果配置了多个存储目录的话,这里只指定 1 个)
store_path0=/fastdfs/storager
# Tracker 服务器 IP 地址和端口,单机搭建时也不要写 127.0.0.1
# tracker_server 可以多次出现,如果有多个,则配置多个
tracker_server=172.16.20.45:22122
# 设置 HTTP 访问文件的端口。这个配置已经不用配置了,配置了也没什么用
# 这也是为何 Storage 服务器需要 Nginx 来提供 HTTP 访问的原因
http.server_port=8888
三、启动 Tracker
# 启动 Tracker 服务
# 其它操作则把 start 改为 stop、restart、reload、status 即可。Storage 服务相同
/etc/init.d/fdfs_trackerd start
四、启动 Storage
# 启动 Storage 服务
/etc/init.d/fdfs_storaged start
# 可以通过 fdfs_monitor 查看集群的情况
# 查看 Storage 是否已经注册到 Tracker 服务器中
# 当查看到 ip_addr = 172.16.20.45 (localhost.localdomain) ACTIVE
# ACTIVE 表示成功
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
查看是否启动成功
ps -ef | grep fdfs
五、测试文件上传
修改 Tracker 服务器客户端配置文件
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vi /etc/fdfs/client.conf
client.conf 中修改 base_path 和 Tracker 服务器的 IP 地址与端口号即可
# 存储日志文件的基本路径
base_path=/home/fastdfs/tracker
# Tracker 服务器 IP 地址与端口号
tracker_server=172.16.20.45:22122
# http端口号,和上面的http.server_port=8888一致
http.tracker_server_port=8888
将root目录下的一张图片存储到 FastDFS 服务器中
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/1.jpg
3.5 安装与配置nginx
Storage 安装 Nginx,为了提供 http 的访问和下载服务,同时解决 group 中 Storage 服务器的同步延迟问题。 Tracker 安装 Nginx,主要是为了提供 http 访问的反向代理、负载均衡以及缓存服务
一、安装依赖
Nginx 依赖环境有 GCC(这个在安装 libfastcommon 时就安装了)、PCRE、zlib 和 openssl。
yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel
二、配置 fastdfs-nginx-module
所有 storage 节点都要安装 fastdfs-nginx-module 模块
cd /root
# 解压 fastdfs-nginx-module 模块
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local/
cd /usr/local/fastdfs-nginx-module/
# 修改 fastdfs-nginx-module 的 config 配置文件
vi src/config
将CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"中的local 去掉
修改为
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
三、编译安装 nginx
cd /root
tar -zxvf nginx-1.16.1.tar.gz -C /usr/local/
cd /usr/local/nginx-1.15.1/
# 给 Nginx 添加 fastdfs-nginx-module 模块
./configure --add-module=/usr/local/fastdfs-nginx-module/src
make && make install
四、配置并启动nginx
1、fastdfs-nginx-module 和 FastDFS 配置文件修改
# 复制 FastDFS 的部分配置文件到 /etc/fdfs
cd /usr/local/fastdfs-5.11/conf/
cp http.conf mime.types /etc/fdfs/
# 复制 fastdfs-nginx-module 源码中的配置文件到 /etc/fdfs 中
cp /usr/local/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
# Tracker 服务器IP和端口修改
tracker_server=172.16.20.45:22122
# url 中是否包含 group 名称,改为 true,包含 group
url_have_group_name = true
# 配置 Storage 信息,修改 store_path0 的信息
store_path0=/fastdfs/storager
# 其它的一般默认即可,例如
base_path=/tmp
group_name=group1
storage_server_port=23000
store_path_count=1
2、配置nginx
vi /usr/local/nginx/conf/nginx.conf
在 server 中添加以下代码
# 配置为支持 group0-group9,以及 M00-M99,以便于以后扩容
# 本单机环境下其实配置为 ~/group1/M00 就可以了
location ~/group([0-9])/M([0-9])([0-9]) {
ngx_fastdfs_module;
}
3、启动nginx
# 启动 Nginx
/usr/local/nginx/sbin/nginx
# 重启 Nginx
/usr/local/nginx/sbin/nginx -s reload
# 停止 Nginx
/usr/local/nginx/sbin/nginx -s stop
# 查看是否启动成功
ps -ef|grep nginx
4、通过http文件
http://172.16.20.45:8888/group1/M00/00/00/rBAULWNotL2AYq5ZAAFVdx81UC4345.jpg
4 FastDFS数据迁移
4.1 数据迁移
数据迁移是指旧的fastdfs可以继续正常运行的情况下,将旧环境的fastdfs的数据恢复到新的环境fastdfs服务中。
同IP数据迁移
-
首先关闭fdfs_storage和fdfs_tracker服务。
-
拷贝fdfs_storage目录中的所有数据到新目录。
-
修改storage配置文件中的store_path和base_path到新位置。
-
修改mod_fastdfs.conf配置文件中的store_path和base_path到新位置。
-
根据情况,选择是否修改client配置文件。
-
重启fdfs_tracker和fdfs_storage服务
不同IP数据迁移
不同IP之间迁移采用FastDFS的扩容机制。
-
在新服务器安装FastDFS。
-
将新FastDFS的storage服务实例关联到以前的tracker服务。
-
拷贝以前的storage服务配置为新服务实例的配置文件。
-
启动storage服务。FastDFS会自动同步以前服务器上的数据。
-
停止storage服务,将storage配置文件中的tracker地址修改为新的tracer 地址,同时修改storage 中/data/fast_data/data/.data_init_flag文件,sync_src_server=空即可。
-
启动新的tracker服务和storage服务。
4.2 数据恢复
数据恢复是指旧的FastDFS服务已经不能运行,需要将已有的FastDFS数据恢复到新的FastDFS服务中。
如果FastDFS服务使用了V4的ServerID特性,修改storage_ids.conf文件,调整对应关系即可。
如果采用IP地址进行标识,则需要修改tracker 和storage下data目录中的数据文件中的ip地址。
tracker server 需要修改 :
tracker/data/storage_groups_new.dat
tracker/data/storage_servers_new.dat
tracker/data/storage_sync_timestamp.dat
storage server 需要修改:
storage/data/.data_init_flag
storage/data/sync/${ip_addr}_${port}.mark
4.3 FastDFS集群整体迁移的问题
如果新旧IP地址一一对应,而且是一样的,那非常简单,直接将data目录拷贝过去即可。 IP不一样的话,会比较麻烦一些。
如果使用了V4的自定义server ID特性,那么比较容易,直接将tracker上的IP和ID映射文件storage_ids.conf修改好即可。 如果是用IP地址作为服务器标识,那么需要修改tracker和storage的data目录下的几个数据文件,将旧IP调整为新IP。 注意storage的data目录下有一个.打头的隐藏文件也需要修改。 另外,需要将后缀为mark的IP地址和端口命名的同步位置记录文件名改名。 文件全部调整完成后才能启动集群服务。 tracker server上需要调整的文件列表:
data/storage_groups_new.dat data/storage_servers_new.dat data/storage_sync_timestamp.dat
storage server需要调整的文件列表:
data/.data_init_flag data/sync/${ip_addr}_${port}.mark:此类文件,需要将文件名中的IP地址调整过来。
4.4 迁移实践
将文件从旧的fastdfs服务器迁移到新的fastdfs文件服务器上来,完成2.2的基础上。旧:172.16.20.44;新:172.16.20.43 1、先将所有storage进程都停止:
/usr/local/fastdfs/bin/stop.sh /usr/local/fastdfs/bin/fdfs_storaged
2、修改storage.conf文件
将tracker_server的IP设置成旧服务器IP172.16.20.44
vim /etc/fdfs/storage.conf
tracker_server=172.16.20.44:22122
3、启动storage进程:
/usr/local/fastdfs/bin/fdfs_storaged /etc/fdfs/storage.conf
此时storage服务器开始同步;
查看同步进程: 在旧tracker服务器执行:
/usr/local/fastdfs/bin/fdfs_monitor /etc/fdfs/storage.conf
可以看到同步进度。
4、同步完成后,在新的fastdfs文件服务器172.16.20.43上停止storage进程:
/usr/local/fastdfs/bin/stop.sh /usr/local/fastdfs/bin/fdfs_storaged
5、修改storage.conf文件,将tracker修改成新的tracker IP
vim /etc/fdfs/storage.conf
tracker_server=172.16.20.43:22122
6、修改.data_init_flag文件:
cd /usrdata/storage/data/
vi .data_init_flag
# 将sync_src_server配置项留空,其它配置项不变 sync_src_server=
7、启动storage进程
/usr/local/fastdfs/bin/fdfs_storaged /etc/fdfs/storage.conf
查看storage进程状态:
/usr/local/fastdfs/bin/fdfs_monitor /etc/fdfs/storage.conf
8、增量同步
FastDFS是实现增量同步的,最后位置保存在安装目录的data/sync目录下,扩展名是mark的文件,具体格式是这样的:
172.16.20.44_23000.mark,即 IP_端口.mark。
mark文件具体内容如下:
binlog_index=0
binlog_offset=3422
need_sync_old=1
sync_old_done=1
until_timestamp=1596511256
scan_row_count=118
sync_row_count=62
关键参数是binlog_offset,即binlog中最后同步成功的偏移量,每同步一个文件后,都会将偏移量更新。
9、备注
当storage启动时,会将以前存在文件中的IP(文件.data_init_flag, 不是第一次启动)和现在的IP 比较,如果IP改变了,就会将IP 变化的情况告诉Tracker(TRACKER_PROTO_CMD_STORAGE_REPORT_IP_CHANGED); Tracker将更新原来的storage的IP地址, 但原来的IP继续保留在server列表中(内部的字段改为默认值); 状态改为FDFS_STORAGE_STATUS_IP_CHANGED;并将更新情况记录到storage_changelog.dat中。
下载文件时主要是看group name; 如果IP更改了, 用指定源IP server下载时, 如果找不到,还是会用round robin 的方式选择storage server;
Tracker 每次都会将当前的storage server 信息保存在storage_servers_new.dat中,每次启动是先load storage_servers_new.dat中的老的信息(tracker_load_storages_old), 后续如果storage的信息如果有变化就会更改server列表的信息(如IP 更改等)。
4.5 新增节点
假如现有group1 中 有 节点A,B 。新增节点C。
5 版本差异
#版本 6.09 2022-09-14
使用 libfastCommon V1.60 和 libserverframe 1.1.19
使用原子计数器代替互斥锁
#版本 6.08 2022-06-21
使用 libfastcommon V1.56
注意:您必须将 libfastcommon 升级到 V1.56 或更高版本
#版本 6.07 2020-12-31
使用 libfastcommon V1.44
注意:您必须将 libfastcommon 升级到 V1.44 或更高版本
正确的拼写iovent到ioevent遵循libfastcommon。
#版本 6.06 2019-12-30
错误修复:fdfs_storaged无法正常退出
错误修复:初始化/内存集返回 IP 地址到 ASCII 0 对于 Java SDK
#版本 6.05 2019-12-25
fdfs_trackerd并fdfs_storaged打印正在使用的服务器版本。
您可以在没有参数的情况下执行fdfs_trackerd或fdfs_storaged
显示服务器版本
中继服务器支持定期压缩中继二进制日志,
Tracker.conf 中的配置项:trunk_compress_binlog_interval
和trunk_compress_binlog_time_base
中继二进制日志压缩支持事务
截断中继二进制日志时支持备份二进制日志文件,
Tracker.conf 中的配置项:trunk_binlog_max_backups
支持主干空间分配的对齐大小
Tracker.conf 中的配置项:trunk_alloc_alignment_size
支持合并空闲后备箱空间
Tracker.conf 中的配置项:trunk_free_space_merge
支持删除未使用的中继文件
Tracker.conf 中的配置项:delete_unused_trunk_files
fdfs_monitor.c:不要调用getHostnameByIp
注意:您必须将 libfastcommon 升级到 V1.43 或更高版本
#版本 6.04 2019-12-05
* storage_report_ip_changed忽略结果 EEXISTS
* 使用 libfastCommon v1.42 中的get_gzip_command_filename
* 支持压缩错误日志和访问日志
* 磁盘恢复支持多线程加速
* 错误修正:应该使用memset在函数中初始化pReader。
storage_reader_init,此错误是由v6.01引起的
注意:您必须将 libfastcommon 升级到 V1.42 或更高版本
#版本 6.03 2019-11-20
* 双 IP 支持两种不同类型的内部(内网)IP
* 存储服务器请求跟踪服务器更改其状态
到存储服务器发现时跟踪器领导者的跟踪器
这是状态不一致
* 修正:fdfs_monitor修复指定跟踪服务器的获取索引
*存储服务器写入data_init_flag并安全地标记文件
(写入临时文件然后重命名)
* 代码细化:结合g_fdfs_store_paths和g_path_space_list,
和范围结构 FDFSStorePathInfo
*检查商店路径的标记文件以防止混淆
* 新选择的跟踪器领导者不会通过网络通知自己
* 获取单存储路径二进制日志的更大network_timeout
磁盘恢复时
注意:跟踪器和存储服务器必须一起升级
#版本 6.02 2019-11-12
* get_file_info计算附加文件类型的CRC32
*磁盘恢复下载文件到本地临时文件,然后重命名
当本地文件存在时
* 支持为追加文件重新生成文件名
注意:重新生成的文件将是普通文件!
#版本 6.01 2019-10-25
*在需要时通过gzip压缩和解压缩二进制日志文件,
存储中的配置项:compress_binlog和compress_binlog_time
* 修正:write_to_pid_file前必须检查并创建数据路径
在fdfs_storaged.c
#版本 6.00 2019-10-16
*跟踪器和存储服务器支持双IP
1. 您可以在 storage.conf 和 client.conf 中配置双跟踪器 IP,
配置项目名称为“tracker_server”
2. 您可以在 storage_ids.conf 中配置双存储 IP
更多详细信息请参阅配置文件。
注意:您必须将 libfastcommon 升级到 V1.41 或更高版本
跟踪器和存储服务器必须一起升级
* 存储服务器从跟踪器服务器获取IP
* 存储服务器在加入时向跟踪服务器报告当前跟踪器 IP
* 存储服务器加入时跟踪器服务器检查跟踪器列表
* 使用 socketCreateExAuto 和 socketClientExAuto 导出的 libfastcommon
#版本 5.12 2018-06-07
* 代码优化适用于极少数情况
* 将打印格式OFF_PRINTF_FORMAT替换为 PRId64
* php_ext修复 php5.5 中的zend_object_store_get_object调用
* make.sh 使用 /usr/include/fastcommon/_os_define.h 中定义的宏
* 正确的 CRC32,您必须将 libfastcommon 升级到 V1.38 或更高版本
#版本 5.11 2017-05-26
* 修复错误:使用主干文件时file_offset不起作用
* 添加存储访问日志标头
* http.conf 添加参数 http.multi_range.enabed
#版本 5.10 2017-03-29
* 使用 fc_safe_read 代替读取,使用 fc_safe_write 代替写入
您必须将 libfastCommon 升级到 V1.35 或更高版本
* 修复 getFileContentEx 读取字节,
您必须将 libfastCommon 升级到 V1.36 或更高版本
* 不要将存储服务器信息同步到跟踪器领导者
* 当use_trunk_file为真时调整参数store_server
*当跟踪器响应ENOENT ENOENT时清除同步src ID
*fdfs_recv_header/fdfs_recv_response失败时记录更多信息
#版本 5.09 2016-12-29
* 修复错误:list_all_groups为这么多组扩展缓冲区自动
* 跟踪器添加参数:min_buff_size和max_buff_size
* PHP 扩展修复了 PHP 7 中的免费对象错误
#版本 5.08 2016-04-08
* 无论如何将库安装到 $(TARGET_PREFIX)/lib
* 用 PHP 7 编译的 php 扩展
* DIO 线程使用 blocked_queue 和 PHP 扩展使用 php7_ext_wrapper.h,
您必须将 libfastCommon 升级到 V1.25 或更高版本
* 删除普通/linux_stack_trace。[HC]
#版本 5.07 2015-09-13
* 计划任务添加“第二”字段
* make.sh 更改,则必须将 libfastcommon 升级到 V1.21 或更高版本
* 修复错误:storage_disk_recovery.c跳过第一个文件(二进制日志第一行)
* 修复错误:获取二进制日志后应关闭连接
* fdfs_storaged.c:提升daemon_init的地位
* 设置日志轮换时间格式
* 错误修复:必须检查store_path_index
#版本 5.06 2015-05-12
* 编译通过 mac OS 达尔文
* 在 subdir init.d 中更正脚本
* 检查存储中的项目thread_stack_size,您必须
将 libfastcommon 升级到 V1.14 或更高版本
#版本 5.05 2014-11-22
* tracker_mem.c 日志更多信息
* 删除无用的全局变量:g_network_tv
*存储可以从跟踪器服务器获取它group_name
#版本 5.04 2014-09-16
* 添加 fastdfs.spec 用于在 Linux 上构建 RPM
* 取决于 libfastcommon
* 在多跟踪器服务器的情况下,当收到更高的状态时,例如
在线/活动,存储状态为wait_sync或同步,
智能设备将存储状态调整为较新,存储重新加入
到跟踪器服务器
* fdfs_monitor支持删除空组
* 修复错误:极少数情况下会出现两个跟踪器领导者
*添加连接统计信息
* 删除旧的日志文件,添加参数:log_file_keep_days
#版本 5.03 2014-08-10
* 发生错误 EINTR 时网络发送和接收重试
*支持mac操作系统达尔文
*使用来自libfastcommon的最新记录器
* 按 liangry@ucweb.com 补丁
* 修复 bug 修复:v5.02 导致无法同步大文件
*使用来自libfastcommon的最新文件
* 将TRACKER_SYNC_STATUS_FILE_INTERVAL从 3600 更改为 300
* 套接字发送和接收忽略 erno EINTR
#版本 5.02 2014-07-20
*自述文件拼写错误
* 修复bug:无法处理同步截断文件异常
* 删除 tracker_global.c extern 关键字以tracker_global.h
* IOEVENT_ERROR时将日志级别从错误更改为调试
* PHP 回调应使用 INIT_ZVAL 来初始化 zval 变量
* 增加功能短2buff和buff2short
* 添加get_url_content_ex以支持调用方传递的缓冲区
*记录器可以设置旋转时间格式
*记录器可以记录标题行
* #include <stdbool.h> 使用 C99 布尔值
*记录器可以删除旧的旋转文件
* 修复错误:连接失败时连接池不应增加计数器
* logger.c 写完后不要调用 fsync
#版本 5.01 2014-02-02
* 主干二进制日志在主干初始化时被压缩
* 修复错误:当
中继服务器初始化完成
* 移动ioevent_loop。[HC] 和fast_task_queue。[hc] 从跟踪器/ 到普通/
* 哈希表支持锁
* 哈希塔尔贝支持新功能:hash_inc和hash_inc_ex
#版本 5.00 2013-12-23
* 丢弃 libevent,在 Linux 中使用 epoll,在 FreeBSD 中使用 kqueue,在 SunOS 中直接使用 port
*do_notify_leader_changed当目标是我自己时强制关闭连接
*修改安装文件和跟踪器/制作文件.in
#版本 4.08 2013-11-30
* 错误修复:FDFS_DOWNLOAD_SERVER_ROUND_ROBIN更改为FDFS_STORE_SERVER_ROUND_ROBIN
* dio_init使用 memset 初始化缓冲区
*禁用延迟设置(带有选项SO_LINGER的setsockopt)
* 将日志级别从错误更改为存储服务器上不存在文件时的警告
#版本 4.07 2013-06-02
* make.sh 通过 ldconfig 检查添加 -lpthread
* 支持多接受线程
* 跟踪器和存储服务器在接收无效包时关闭客户端连接
* 客户端/storage_client.c:带静音标志的file_exist
* 跟踪器和存储进程支持启动、停止和重新启动命令
* 跟踪器/tracker_proto.c fdfs_recv_header:日志调试更改为日志错误
#版本 4.06 2013-01-24
* fdfs_upload_file工具增强
* fdfs_download_file工具支持偏移量和下载大小
* 主干文件上传支持子路径正确旋转
* 添加功能:fdfs_http_get_file_extension
*仍然同步截断文件操作
#版本 4.05 2012-12-30
* 客户端/fdfs_upload_file.c可以指定存储IP端口和存储路径索引
* 添加连接池
* 客户端负载存储 ID 配置
* common/ini_file_reader.c 不调用 chdir
* 保持文件的 mtime 不变
*使用g_current_time代替通话时间功能
* 删除嵌入 HTTP 支持
#版本 4.04 2012-12-02
* 修复错误:存储守护程序初始化时获取存储服务器 ID
* 文件名中的存储 ID 使用全局变量
* 动态分配内存 8 字节对齐
* fast_task_queue支持内存池链
#版本 4.03 2012-11-18
* trunk_mgr/trunk_mem.c:记录错误并添加更多调试信息
* 存储服务器生成的文件 ID 可以包含存储服务器 ID
#版本 4.02 2012-10-30
*上传文件时验证file_ext_name和prefix_name
* 存储.conf 添加参数: file_sync_skip_invalid_record
* 同步文件失败时添加偏移调试信息
* 修复错误:同步文件时如果文件存在,也记录到二进制日志
*跟踪器和存储错误日志支持旋转
*支持按文件大小旋转日志
* 接收 HUP 信号时旋转日志
* fdfs_monitor支持设置中继服务器
* 错误修复:tracker_mem.c正确双互斥锁
#版本 4.01 2012-10-21
* trunk_mgr/trunk_mem.c:更严格的主干初始化标志检查
*用于检查文件重复的文件签名支持MD5
* 从文件同时支持符号链接和直接文件
* 跟踪器服务器日志中继服务器更改日志
#版本 4.00 2012-10-06
* 通过 ID 而不是 IP 地址识别存储服务器
* Tracker.conf:存储预留空间可以使用比例,例如10%
* 存储服务器支持访问日志
* 追加文件和中继文件在文件 ID 中也使用 RAND 编号
* 错误修复: test_upload.c: 字符 file_id[64] 更改为: 字符 file_id[128]
* 使用属性O_NOATIME设置管道读取 FD
* 错误修复:使用TSRMLS_CC更正 PHP 扩展call_user_function TSRMLS_DC
#版本 3.11 2012-08-04
* setsockopt 在 FreeBSD 中将linger.l_linger设置为微秒和秒
在其他方面
* 主干二进制日志阅读器跳过不正确的记录
* 修复错误:单盘恢复支持符号链接和中继文件
* 存储生成文件名增强
* ETIME 更改为 ETIMEDOUT for FreeBSD
* tracker_mem.c:负载存储服务器忽略空 IP 地址
#版本 3.10 2012-07-22
* 更优雅地检查和初始化主干文件
* 删除未使用的但设置变量
* 修复错误:当g_check_file_duplicate为 true 时返回正确的组名
* 错误修复:PHP 扩展call_user_function TSRMLS_CC替换为 TSRMLS_DC
* 跟踪器重新选择中继服务器的间隔大
* 使用 AVL 树进行无中继块检查重复
*中继文件同步无论如何都会覆盖目标文件
* 通用/avl_tree.c:删除时免费数据
* tracker.conf 添加参数:trunk_init_reload_from_binlog,当此标志
设置为 true,从中继二进制日志加载所有空闲的中继块
* 中继状态仅通过 trunk_mem.c 和 memcmp 结构 FDFSTrunkFullInfo 控制
避免内存对齐问题
*自动删除太旧的临时文件
#版本 3.09 2012-07-08
* make.sh 避免覆盖 /etc/fdfs/ 的配置文件
* common/logger.c:函数log_init可以多次调用
* php 扩展 logInfo 更改为 logDebug
* c 客户端 logInfo 更改为 logDebug
* 更正确地storage_dio.c日志信息
* 删除被占用的后备箱空间
* tracker.conf 添加参数:trunk_init_check_occupying,当此标志
设置为 true,不添加被占用的中继节点
* 获取本地 IP 地址的另一种方法
#版本 3.08 2012-05-27
* FAST_MAX_LOCAL_IP_ADDRS从 4 更改为 16
* 追加文件支持修改
* 追加文件支持截断
#版本 3.07 2012-05-13
* 跟踪器/tracker_mem.c:检查存储 IP 地址是否为空
* 删除直接 IO 支持
* 中继二进制日志同步优化
* PHP 扩展编译在 PHP 5.4.0 中传递
* 获取本地 IP 地址增强功能
* 中继服务器 选择必应日志文件大小为“最大”的存储服务器
* 中继服务器更改时正确同步中继二进制日志文件
#版本 3.06 2012-01-22
* 添加通用/avl_tree.h 和普通/avl_tree.c
*使用AVL树组织无中继块
* 当当前跟踪器成为领导者时,查找每个组的中继服务器
* 通用/sched_thread.c可以动态添加计划条目
* 支持提前创建主干文件
#版本 3.05 2011-12-20
* 删除编译警告
* 存储服务器的store_path_count可以大于组
* 错误修复:普通/fast_mblock.c malloc 字节不够
* make.sh 支持操作系统:HP-UX
#版本 3.04 2011-11-25
* 修复错误:重复文件只保存一个条目 在主干文件模式下确定
* 修复错误:与更多二进制日志文件正确同步
* fdfs_file_info从存储服务器查询文件信息
* 错误修复:PHP 扩展编译错误使用 GCC 4.6.1 作为:
变量“store_path_index”设置但未使用
* 修复错误:正确删除中继文件的元数据
* 错误修复:打开检查副本时附加文件正常
* 存储/trunk_mgr/trunk_shared。[hc]:trunk_file_stat_func不要
使用函数指针
* 修复错误:存储/trunk_mgr/trunk_shared.c base64_decode_auto
溢出 1 字节
* 修复错误:正确删除从文件
* 修复错误:删除调试信息
* MD5函数名称已更改以避免冲突
#版本 3.03 2011-10-16
* 同步链接文件时忽略现有链接
* http令牌检查支持持久令牌
*添加功能:storage_file_exist和storage_file_exist1
* PHP minfo 添加 fastdfs 版本信息
* make.sh 更改
* 客户端移动 libevent 依赖
#版本 3.02 2011-09-18
* 错误修复:tracker_mem_check_add_tracker_servers添加跟踪器服务器
正确
* PHP 客户端编译正常与 PHP 5.2.17
* 重新选择中继服务器确定
#版本 3.01 2011-07-31
* 错误修复:tracker_get_connection_ex和tracker_get_connection_r_ex
使用多个跟踪器服务器连接两次
* 错误修复:tracker_mem_check_add_tracker_servers条件不正确
* 所有日志错误添加源文件名和行
* PHP扩展支持上传文件回调
* PHP扩展支持下载文件回调
#版本 3.00 2011-06-19
*海量小文件优化
* 增加固定块内存池:通用/fast_mblock.c
* 错误修复:tracker_mem.c 不清除g_groups字段
* 错误修复:从文件和追加器文件下载正常
* 修复错误:跟踪器/存储按组/用户运行,设置文件所有者
* 跟踪器服务器支持领导者
* 客户端支持静态库
* client_func.h 添加fdfs_tracker_group_equals和的功能
fdfs_get_file_ext_name
* 错误修复:test/dfs_func_pc.c 编译正常
*存储服务器在上传文件时检查可用空间是否足够