起因
前一阵子在 B 站上分享了自己如何搭建 fastdfs,在生产中碰到时间的坑,有位小伙伴就加了微信问了我一个问题,大概的意思就是我按照你视屏的方法搭建了一个 fastdfs,在内网上传和下载都是正常的,我在跳板机(不知道是什么,就认为是个路由器吧)上把 22122 和 8888 端口都映射出来了,能正常访问里面上传的资源,但是没办法上传,java 代码报错连接错误。
排查流程如下
以下流程都是因为本人基础概念不扎实照成的,到最后发现应该是立马就能反应出来的错误。具体排查过程如下:
1,让他在java 代码的这台机器上 telnet 跳板机 IP+端口,看看端口是否能正常访问,(结果正常,端口一切都可以访问)
2,然后为了排除不是他 java 代码的问题,我让他在 java 代码运行的那台机器上运行一个 fastdfs 的 tracker,主要是用容器里面发 fdfs_upload_file 命令去测试下到底是哪个地方有问题。
更改/etc/fdfs/client.conf 里面的tracker_server 的地址,然后用 fdfs_upload_file 去上传文件,发现返回如下错误,看到这个错误我就顿悟了,你顿悟了吗?
返回的这个地址是内网的 23000 端口,脑子里面想到 client 上传内容的流程图,原来问题出在这;
我们能正常的请求 tracker 的 22122 端口 ,就能获取到 storage 的 IP 地址和端口,问题就出在这里,这个地方返回的是内网的地址,我们在外网肯定没有办法正常请求,于是查阅资料好像没有办法获取 storage 的外网地址,既然服务端不行,那我们就只能从客户端下手了,让他在 java 代码里面做个替换,然后他测试下可以正常上传下载。
总结
这个问题花费了这么长时间排查,还是因为自己没有把 fastdfs 的上传下载流程深深地记在脑子,这次记录清晰啊。
大哥,具体是咋实现的呀,一直无法通过公网实现上传
开发可以处理,程序中做替换处理,我当时是这样的。如果你有更好的办法,可以说一下