赞
踩
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 和高性能。
文件上传流程
文件下载流程
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
fastdfs:FastDFS_v3.02(2011-10-07)
下载地址:FastDFS - Browse Files at SourceForge.net
libevent库:libevent-2.0.14
下载地址:libevent
在访问量都不是很大情况下,将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
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
- # 每次开机时,手动打开 Tracker 服务
- /etc/init.d/fdfs_trackerd start
- # 打开 Storage 服务
- /etc/init.d/fdfs_storaged start
- # 启动 Nginx
- /usr/local/nginx/sbin/nginx
libfastcommon :1.0.38
FastDFS :5.11
fastdfs-ninx-module :1.16
Nginx : 1.15.1
yum -y install make cmake gcc gcc-c++ perl*
- 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
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
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
数据迁移是指旧的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服务。
数据恢复是指旧的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
如果新旧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地址调整过来。
将文件从旧的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 更改等)。
假如现有group1 中 有 节点A,B 。新增节点C。
- #版本 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 编译正常
- *存储服务器在上传文件时检查可用空间是否足够

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。