首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

FastDFS 上傳圖片網路不通問題排查:內外網 IP 綁定配置詳解

     編輯:Java 綜合教學

問題現象

架構:Nginx (雙網卡:公網 IP + 內網 IP) + Tomcat (僅內網 IP)
現象:Java 專案上傳圖片報錯 java.net.SocketException: Network is unreachable
排查:防火牆關閉、telnet 連通、FastDFS 22122 端口正常、配置檔內網 IP 正確

根因分析

Tracker/Storage 服務啟動時綁定 0.0.0.0 (所有網卡),但向 Tracker 註冊時回報的是**公網 IP**。Client (Tomcat 端) 從 Tracker 獲取 Storage 資訊時拿到公網 IP,嘗試直連公網 IP 上傳,但 Tomcat 無公網網卡導致網路不通。

解決方案:強制綁定內網 IP

1. tracker.conf 修改

# 原配置
bind_addr=0.0.0.0

# 修改為內網 IP
bind_addr=10.10.11.67

2. storage.conf 修改

# 綁定內網 IP
bind_addr=10.10.11.67

# 關鍵:tracker_server 必須指向內網 IP
tracker_server=10.10.11.67:22122

3. Client 端配置 (fdfs_client.conf)

tracker_server=10.10.11.67:22122

原理說明

  • bind_addr:服務監聽綁定的網卡 IP,限制只在內網介面提供服務
  • tracker_server:Storage 向 Tracker 註冊時上報的 IP,Client 從 Tracker 獲取 Storage 列表時取得此 IP
  • 統一內網 IP 後,全鏈路流量走內網,繞過公網路由與防火牆

驗證步驟

  1. 重啟 Tracker:service fdfs_trackerd restart
  2. 重啟 Storage:service fdfs_storaged restart
  3. 查看日誌確認綁定 IP:grep "bind_addr" /var/log/fdfs/trackerd.log
  4. Java 專案測試上傳,觀察網路連線走向

避坑總結

  1. 雙網卡環境下,**務必在 tracker.conf/storage.conf 明確指定 bind_addr 為內網 IP**
  2. tracker_server 參數決定 Client 連線目標 IP,必須與 bind_addr 一致
  3. Nginx 代理轉發時,upstream 同樣使用內網 IP
  4. 排查網路不通時,抓包確認實際連線目標 IP (tcpdump/Wireshark)

架構圖示

┌─────────────┐     內網      ┌─────────────┐     內網      ┌─────────────┐
│   Client    │ ───────────▶  │   Tracker   │ ───────────▶  │   Storage   │
│  (Tomcat)   │  10.10.11.x   │  (10.10.11.67)│  10.10.11.x   │  (10.10.11.67)│
└─────────────┘               └─────────────┘               └─────────────┘
      │                             │                             │
      │ 公網 IP (無連線)            │ 公網 IP (不綁定)            │ 公網 IP (不綁定)
      ▼                             ▼                             ▼
   無法連線                       忽略公網                       忽略公網

結語

FastDFS 雙網卡環境部署的核心在於:**統一內網 IP 綁定與註冊**。透過 bind_addr 限制服務監聽介面,配合 tracker_server 指定註冊回報 IP,確保 Client 獲取到的 Storage 地址可直連。此原理同樣適用於 Redis、Kafka、ZooKeeper 等分散式中介軟體的多網卡部署場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved