在WSL2 Ubuntu中部署FastDFS服務的完整指南
- 📖 前言
- 🛠? 環境準備
- 1. 系統要求
- 2. Ubuntu應用
- 🚀 安裝服務
- 1. 更新系統
- 2. 安裝編譯依賴
- 3. 下載源碼
- 4. 編譯安裝
- 🔧 配置服務
- 1. 設置配置文件
- 2. 創建數據目錄
- 3. 配置Tracker服務
- 4. 配置Storage服務
- 5. 配置客戶端
- 🚦 啟動服務
- 1. 啟動Tracker
- 2. 啟動Storage
- 3. 驗證服務狀態
- ? 功能驗證
- 1. 新建并上傳測試文件
- 2. 查看存儲文件
- 3. 下載文件
- 🌐 外部調用
- 1. Tracker Server 的 IP 地址
- 2. Java客戶端配置
- 3. Java客戶端示例
- 📝 結語
📖 前言
最近,Huazie 在開發文件服務器項目【FleaFS】,使用到了 FastDFS 來作為底層文件管理服務。為了方便本地測試,便部署了 FastDFS 的服務。
由于筆者的系統是 Windows 11 家庭版,因此本篇教程指南將指導大家在 WSL2 Ubuntu 子系統中直接安裝和配置 FastDFS 服務,無需 Docker 或 虛擬機。
方案特點:
- ? 原生 Linux 環境部署
- ? 高性能低延遲
- 🔄 與 Windows 文件系統無縫互通
🛠? 環境準備
1. 系統要求
組件 | 要求 |
---|---|
Windows版本 | Windows 10 2004+ 或 Windows 11 |
WSL版本 | WSL2 |
內存 | 至少2GB空閑 |
磁盤空間 | 至少5GB可用空間 |
如果本地的WSL版本較低,可以查看【官方文檔】進行手動更新。
2. Ubuntu應用
進入 Micorsoft 應用市場,搜索 Ubuntu,選擇 20.04 LTS 以上的版本安裝即可。
安裝好了,本地系統可搜索Ubuntu應用【筆者本地安裝的是 Ubuntu 24.04.2 LTS 】
🚀 安裝服務
1. 更新系統
sudo apt update && sudo apt upgrade -y
2. 安裝編譯依賴
sudo apt install -y git gcc make perl libperl-dev
3. 下載源碼
上述系統更新和編譯依賴安裝好了之后,我們就需要先后輸入下面命令來克隆fastdfs相關的項目:
git clone https://github.com/happyfish100/libfastcommon.git
git clone https://github.com/happyfish100/libserverframe.git
git clone https://github.com/happyfish100/fastdfs.git
如果上述命令執行后,提示未找到命令,則通過 sudo apt install git
安裝即可。多數情況下,WSL 的 Ubuntu 環境會默認配備 Git、Vim 等常用工具,以便于快速使用。
4. 編譯安裝
# 安裝libfastcommon
cd libfastcommon
sudo ./make.sh && sudo ./make.sh install# 安裝libserverframe
cd libserverframe
sudo ./make.sh && sudo ./make.sh install# 安裝FastDFS
cd ../fastdfs
sudo ./make.sh && sudo ./make.sh install
🔧 配置服務
1. 設置配置文件
在上述的 fastdfs 目錄中執行如下命令,用來設置配置文件(主要是將fastdfs相關的模板配置文件復制到/etc/fdfs
中)。該腳本 不會覆蓋 現有的配置文件,請放心執行這個腳本。
sudo ./setup.sh /etc/fdfs
執行前:
執行后:
2. 創建數據目錄
sudo mkdir -p /data/fdfs/{client,tracker,storage,storage0}
sudo chmod -R 777 /data/fdfs
3. 配置Tracker服務
通過命令來編輯tracker.conf
,如下:
sudo nano /etc/fdfs/tracker.conf
nano
是 Linux 系統中一個簡單易用的 命令行文本編輯器,適合快速編輯文件(尤其是配置文件或腳本)。有關它的詳細使用請自行搜索,這里不再贅述。
需要修改的關鍵配置如下:
port=22122
base_path=/data/fdfs/tracker
現在我們需要獲取 Tracker 服務器的 IP 地址
本篇我們的示例 Tracker 服務器在 WSL 的 Ubuntu 中
在 WSL 的 Ubuntu 終端里,使用 ip addr
命令來獲取網絡接口信息。
其中 inet 后面的 IP 地址(如 172.22.204.57
)就是 WSL 的 Ubuntu 的實際被分配的 IP 地址,這個地址可作為 Tracker 服務器的 IP 地址。
4. 配置Storage服務
通過命令來編輯storage.conf
,如下:
sudo nano /etc/fdfs/storage.conf
需要修改的關鍵配置如下:
group_name=group1
port=23000
tracker_server=172.22.204.57:22122
base_path=/data/fdfs/storage
store_path0=/data/fdfs/storage0
其中,tracker_server 就配置 3 中的 IP地址,端口 22122
5. 配置客戶端
通過命令來編輯client.conf
,如下:
sudo nano /etc/fdfs/client.conf
需要修改的關鍵配置如下:
base_path=/data/fdfs/client
tracker_server=172.22.204.57:22122
tracker_server 同上修改即可。
🚦 啟動服務
1. 啟動Tracker
sudo fdfs_trackerd /etc/fdfs/tracker.conf restart
fdfs_trackerd
:啟動 FastDFS 的 Tracker Server(跟蹤服務器) ,負責管理文件存儲的元數據(如 Storage 節點的狀態、文件映射關系)和調度客戶端請求。
2. 啟動Storage
sudo fdfs_storaged /etc/fdfs/storage.conf restart
fdfs_storaged
:啟動 FastDFS 的 Storage Server(存儲服務器) ,負責實際文件的存儲、同步和訪問。
3. 驗證服務狀態
檢查進程
ps -ef | grep fdfs
查看端口監聽
sudo netstat -tunlp | grep -E '22122|23000'
? 功能驗證
1. 新建并上傳測試文件
新建測試文件
echo "Hello WSL FastDFS,Huazie" | sudo tee /data/fdfs/test.txt
FastDFS 的文件上傳命令需要使用 fdfs_upload_file
,如果不清楚具體使用,我們可以先通過如下命令查看:
fdfs_upload_file --help
上傳測試文件
sudo fdfs_upload_file /etc/fdfs/client.conf /data/fdfs/test.txt
上傳成功返回路徑:group1/M00/00/00/rBbMOWf5O7KAVMDWAAAAG3MLPyM018.txt
下面 Huazie 來將返回的路徑詳細分析下:
group1/M00/00/00/rBbMOWf5O7KAVMDWAAAAG3MLPyM018.txt
│ │ │ │ └── 文件名,基于文件內容哈希、時間戳等生成唯一標識
│ │ │ └── 二級子目錄(每級 256 個目錄,編號 00 到 FF)
│ │ └── 一級子目錄(每級 256 個目錄,編號 00 到 FF)
│ └── 存儲路徑標識符,對應配置文件中的 store_path0、store_path1 等
└── 文件所屬的存儲組(Group),支持多組擴展
2. 查看存儲文件
從配置服務小節的配置Storage服務中,我們可以看到存儲數據 store_path0
的配置路徑 /data/fdfs/storage0
,因此上述上傳文件,可以通過如下命令查看存儲路徑:
ls -rtl /data/fdfs/storage0/data/00/00
如上圖中標紅的文件就是本地我們上傳的文件,可以看到文件名也和上面返回的內容對應上了。
3. 下載文件
FastDFS 的文件下載命令需要使用 fdfs_download_file
,如果不清楚具體使用,我們可以先通過如下命令查看:
fdfs_download_file --help
sudo fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBbMOWf5O7KAVMDWAAAAG3MLPyM018.txt download.txt
cat download.txt
🌐 外部調用
1. Tracker Server 的 IP 地址
這里我們在上面配置 Tracker 服務時已經查看過,也可通過如下命令精確定位:
ip addr show eth0 | grep inet
2. Java客戶端配置
Huazie 這里就以 FleaFS 項目的配置【fdfs_client.conf】為例:
connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 9090
http.anti_steal_token = no
http.secret_key = FastDFS1234567890tracker_server = 172.22.204.57:22122
#tracker_server = 172.22.204.58:22122## Whether to open the connection pool, if not, create a new connection every time
connection_pool.enabled = true
## max_count_per_entry: max connection count per host:port , 0 is not limit
connection_pool.max_count_per_entry = 500
## connections whose the idle time exceeds this time will be closed, unit: second, default value is 3600
connection_pool.max_idle_time = 3600
## Maximum waiting time when the maximum number of connections is reached, unit: millisecond, default value is 1000
connection_pool.max_wait_time_in_ms = 1000
3. Java客戶端示例
這里可查看 FleaFS 項目的 FastDFS 客戶端測試類 FastDFSClientTest,該類演示了上傳,下載,刪除文件等功能,有需要的可以參考一下。
public class FastDFSClientTest {private static final Logger LOGGER = LoggerFactory.getLogger(FastDFSClientTest.class);@Testpublic void uploadFile() {InputStream inputStream = IOUtils.getInputStreamFromClassPath("file/綠色田園風光.jpg");String fileName = "綠色田園風光.jpg";String fileId = FastDFSClient.uploadFile(inputStream, fileName);LOGGER.debug("FILE_ID : {}", fileId);}@Testpublic void downloadFile() throws Exception {InputStream inputStream = FastDFSClient.downloadFile("group1/M00/00/00/rBbMOWfqU3CAH_cdAARILk7ifpI048.jpg");File file = new File("E:\\綠色.jpg");FileUtils.copyInputStreamToFile(inputStream, file);}@Testpublic void deleteFile() {FastDFSClient.deleteFile("group1/M00/00/00/rBbMOWfqU3CAH_cdAARILk7ifpI048.jpg");}}
📝 結語
通過本篇的指導,相信大家已經可以成功在本地系統的 WSL2 Ubuntu 應用中部署原生的 FastDFS 文件存儲服務。
如有其他問題,歡迎大家在評論區交流討論!
對 FastDFS 感興趣的朋友,也可以研究研究 FastDFS官方文檔 。