当前位置:   article > 正文

关于fastdfs分布式文件服务器连接的异常问题_fastdfsclient 断开重连

fastdfsclient 断开重连

一、使用环境

  1. 阿里云轻量应用服务器
  2. Linux CentOS 7.3系统
  3. 本地使用idea开发,远程连接

二、描述

        连接时出现异常,具体如下:

  1. connect to server xxx(服务器对应公网IP):22122 fail
  2. java.net.SocketTimeoutException: connect timed out
  3. at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
  4. at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
  5. at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
  6. at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
  7. at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
  8. at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
  9. at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
  10. at java.net.Socket.connect(Socket.java:589)
  11. at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:46)
  12. at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:68)
  13. at org.csource.fastdfs.TrackerClient.getConnection(TrackerClient.java:57)
  14. at top.javahai.subtlechat.api.Tests.testUpload(Tests.java:67)
  15. at top.javahai.subtlechat.api.Tests.main(Tests.java:23)

这里有几个注意事项需要大致说下,由于我这边都是本地使用进行远程连接的,所以在部署安装fastdsf相关应用时,对应的IP需更改成对应的公网IP或域名。其次是相关端口需添加到阿里服务器的安全组规则内,如下所示:

接下来是关于解决问题的大致思路有以下几个:

  1. 确认Tracker 、Storage 的IP(如需远程是否与公网IP一致)、端口(是否已添加到防火墙)
  2. 确保nginx是否启动成功,启动成功有以下图:
  3.  确保nginx是否已添加fastdfs文件服务器所需依赖(fastdfs-nginx-module),添加启动后有如下提示,pid不固定
  4. 确保公网IP是否能够ping通或者是否一致,因为有些机器似乎IP会自动变化
  5. 确保服务器的防火墙已关闭(我的问题是因为防火墙的问题导致的) 

三、解决方法

关闭防火墙重新连接即可,连接成功后上传完成会返回上传文件路径。由于我是本地测试类调用,具体代码见下:

  1. public static void testUpload() {
  2. try {
  3. //初始化配置文件
  4. ClientGlobal.initByProperties("fastdfs-client.properties");
  5. //实例化TrackerClient对象
  6. TrackerClient tracker = new TrackerClient();
  7. //获取连接对象
  8. TrackerServer trackerServer = tracker.getConnection();
  9. //重置StorageServer对象
  10. StorageServer storageServer = null;
  11. //获取客户端连接
  12. StorageClient1 client = new StorageClient1(trackerServer, storageServer);
  13. NameValuePair nvp[] = null;
  14. //上传到文件系统并返回对应路径
  15. String fileId = client.upload_file1("M:\\image\\002.png", "png",
  16. nvp);
  17. System.out.println("上传返回消息:"+fileId);
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. }

对应配置文件如下:

  1. fastdfs.connect_timeout_in_seconds = 5
  2. fastdfs.network_timeout_in_seconds = 30
  3. fastdfs.charset = UTF-8
  4. fastdfs.http_anti_steal_token = false
  5. #服务器密钥,默认为“FastDFS1234567890”。可更改但必须保证服务端与客户端一致
  6. fastdfs.http_secret_key = FastDFS1234567890
  7. fastdfs.http_tracker_http_port = 80
  8. #服务器公网IP与端口
  9. fastdfs.tracker_servers = xxxx:22122
  10. fastdfs.connection_pool.enabled = true
  11. fastdfs.connection_pool.max_count_per_entry = 500
  12. fastdfs.connection_pool.max_idle_time = 3600
  13. fastdfs.connection_pool.max_wait_time_in_ms = 1000

连接上传成功效果如下:

  1. Disconnected from the target VM, address: '127.0.0.1:51744', transport: 'socket'
  2. 上传返回消息:group1/M00/00/00/L2PKeWDztcuAPdf8AAIohYtxWLY743.png

这边有个小插曲,就是关于防火墙的问题。因为不小心看错命令执行了暂时关闭防火墙声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】

推荐阅读
相关标签