單點對多點傳輸大檔案時,來源端頻寬易成瓶頸。利用 tee + 名稱管道 (FIFO) + netcat + pigz (平行 gzip) 建立「傳輸鏈」,每節點同時接收、解壓、儲存並轉發下一節點,大幅提升分發效率。本文詳細拆解架構原理、指令組合、效能實測數據。
來源端 節點1 (末端) 節點2 節點3 (首端)
tar cv files | pigz | nc 節點3:1234 ← nc -l 1234 | pigz -d | tar xvf -
↑
tee myfifo
↓
nc 節點2:1234
每個中繼節點:nc -l 1234 | tee myfifo | pigz -d | tar xvf - 同時將壓縮資料流「分流」給下一節點 (經 FIFO) 並自行解壓儲存。
# 假設 IP 192.168.1.10,監聽 port 1234
nc -l 1234 | pigz -d | tar xvf -
# 節點2 (IP 192.168.1.20)
mkfifo myfifo
nc 192.168.1.10 1234 < myfifo | nc -l 1234 | tee myfifo | pigz -d | tar xvf -
# 節點1 (IP 192.168.1.30)
mkfifo myfifo
nc 192.168.1.20 1234 < myfifo | nc -l 1234 | tee myfifo | pigz -d | tar xvf -
關鍵:tee myfifo 將資料同時寫入 FIFO (供下游節點讀取) 與標準輸出 (接管道解壓儲存)。
tar cv large_directory | pigz | nc 192.168.1.30 1234
pigz:平行 gzip,多核心並行壓縮/解壓,比 gzip 快 3-8 倍netcat (nc):極簡 TCP 傳輸,無加密開銷,延遲極低tee + FIFO:單一資料流「一讀多用」,零拷貝分流tar:封存目錄結構、權限、屬性
pv (Pipe Viewer) 監控傳輸進度:tar cv ... | pigz | pv | nc ...ssh 隧道或使用 rsync 斷點續傳sha256sum| 適用 | 不適用 |
|---|---|
| 單一大檔案/目錄分發至多台同網段伺服器 | 小檔案大量分發 (rsync 更適合) |
| 部署相同應用版本至叢集節點 | 異構環境需不同檔案 |
| 離線/隔離網路環境批次佈署 | 需加密傳輸 (改用 ssh + tar) |
「傳輸鏈」模式將單點頻寬瓶頸轉化為管道流水線,配合 pigz 多核壓縮,是大檔案叢集分發的利器。掌握 nc + tee + FIFO + pigz 組合,能在無額外軟體依賴下實現高效分發。
Linux 禁用 Ping (ICMP) 回應提升伺服器安全性:暫時與永久兩種做法
Linux 終端使用 xdg-open 指令以預設圖形應用程式開啟檔案與目錄
解決 Ubuntu 在 VirtualBox 安裝後重啟異常的兩大方案
Linux 系統將 Sublime Text 固定到啟動器的完整教學
Linux 安裝使用 GitHub 完整指南:SSH 金鑰、Git 設定、專案推送與常見問題
Linux 檔案 I/O 系統程式設計完整指南:open/read/write/lseek/close 核心 API 深度解析