fastdfs遇到的问题汇总

"博客内容涉及两个问题:1) FastDFS在上传文件时遇到Tracker服务请求调度Storage服务错误,原因是storage_sync_timestamp.dat文件格式不正确。解决方法是删除多余行,保持数据格式为'{group_name}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、上传文件时错误

错误原因:Tracker服务请求调度Storage服务时错误

Tracker错误日志:

file: tracker_mem.c, line: 1535, the format of the file "/data/fast_data/data/storage_sync_timestamp.dat" is invalid, group_name: group1, colums: 5 > 4

感兴趣的小伙伴可以看下源码的处理过程,上面的日志打印在源码tracker_mem.c文件中,函数名称:static int tracker_load_sync_timestamps(FDFSGroups *pGroups, const char *data_path)

github源码地址: fastdfs/tracker_mem.c at master · happyfish100/fastdfs · GitHub 

static int tracker_load_sync_timestamps(FDFSGroups *pGroups, const char *data_path)
{

	// ***前面的源码省略了

		if (cols > pGroup->count + 2)
		{// 走到这个if里面,就会得到上面的Tracker错误日志
			logError("file: "__FILE__", line: %d, " \
				"the format of the file \"%s/%s\" is invalid" \
				", group_name: %s, colums: %d > %d", \
				__LINE__, data_path, \
				STORAGE_SYNC_TIMESTAMP_FILENAME, \
				group_name, cols, pGroup->count + 2);
			result = errno != 0 ? errno : EINVAL;
			break;
		}

	// ***后面的源码省略了

	return result;
}

解决方案:

storage_sync_timestamp.dat文件中数据错误,出现了多行数据,保留一条有效的数据即可

数据格式:{group_name},{storage_ip},{0}

举个栗子:group1,172.19.0.3,0

数据解读:

{group_name}-节点分组的名称

{storage_id}-storage服务节点ip地址

{0}-数值0


2、源IP地址转换

错误场景描述:

本地连接远程fastdfs服务上传文件时,请求tracker调度器后返回的storage服务器ip地址却是远程fastdfs服务器的内部docker镜像ip

1)环境准备

将Tracker和Storage服务部署在同一台服务器(S1),docker容器创建内网IP(Tracker IP: 172.19.0.2;Storage IP: 172.19.0.3),在Storage服务配置文件storage.conf中,配置tracker_ip=172.19.0.2;进入storage docker容器,使用命令:fdfs_monitor storage.conf,此时节点172.19.0.3会处于ALIVE状态

2)异常步骤

在另一台服务器(S2)中搭建fast服务 ——> 配置tracker服务器ip ——> 上传文件;此时会报错,提示连接不到storage服务:172.19.0.3

解决方案:

通过iptables命令将tracker调度器获取到的storage服务IP地址(内网IP:172.19.0.3)改为公网IP(192.168.100.211)
linux指令: iptables -t nat -I POSTROUTING -p tcp -s 172.19.0.3 -j SNAT --to-source 192.168.100.211
指令解读:拦截所有数据包源IP地址是172.19.0.3的数据包,并将其源IP地址修改为192.168.100.211
关于指令iptables的各个参数的意义,参考文档:https://www.zsythink.net/archives/tag/iptables/

配置指令后,将storage服务重启一下,再次使用命令:fdfs_monitor storage.conf,此时节点172.19.0.3会处于OFFLINE状态,节点192.168.100.211会处于ALIVE状态;在服务器(S2)中再次上传文件,此时Tracker服务器调度到的Storage IP会是192.168.100.211

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值