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