在 IIS + .NET 架構下,如何讓多台服務器訪問相同的上傳文件是常見挑戰。常見方案包括共享存儲(NFS、iSCSI、GFS2)或文件同步技術。本文詳細介紹基於 cwRsync 的定時同步方案,適用於 Windows 環境下的雙服務器架構。

前端負載均衡根據請求方法調度:POST 請求導向主服務器 APP1,其他請求按最少連接分發。用戶上傳始終落在 APP1,APP2 通過 cwRsync 每分鐘同步一次數據。考慮到內網千兆帶寬遠超用戶上傳速度,此方案可靠高效。
在 APP1(主服務器)安裝服務端,安裝過程中記錄生成的密碼(如圖所示),其餘保持默認。在 APP2 安裝客戶端,同樣全程默認。

編輯安裝目錄下的 rsyncd.conf(默認路徑 C:\Program Files (x86)\ICW),備份後修改關鍵參數:
use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
uid = 0
gid = 0
[bbsapp]
path = /cygdrive/d/APPSYSTEM/bbs/ # 對應 D:\APPSYSTEM\bbs
read only = false
ignore errors
transfer logging = yes
hosts allow = 192.168.18.0/255.255.255.0
auth users = SvcCWRSYNC
secrets file = rsync.password
在同目錄創建 rsync.password,內容為 SvcCWRSYNC:pw123456(冒號前為用戶名,後為安裝時設置的密碼)。完成後重啟 cwRsync 服務。

在客戶端安裝目錄 C:\Program Files (x86)\cwRsync 創建 rsync.password,僅寫入密碼 pw123456。關鍵步驟:文件所有者必須為 Administrator,權限設置為 600(僅管理員可讀寫),否則報錯 password file must be owned by root when running as root。
創建批處理文件,內容如下:
cd /d "C:\Program Files (x86)\cwRsync\bin"
rsync -avz --delete-after --ignore-errors --progress --password-file="/cygdrive/c/Program Files (x86)/cwRsync/rsync.password" SvcCWRSYNC@app1_IP::bbsapp /cygdrive/d/APPSYSTEM/bbs
通過 Windows 計劃任務設置每分鐘執行一次,實現自動化同步。
| 參數 | 說明 |
|---|---|
| -a, --archive | 歸檔模式,遞歸傳輸並保持所有文件屬性(等同 -rlptgoD) |
| -v, --verbose | 詳細輸出模式 |
| -z, --compress | 傳輸時壓縮數據 |
| --delete-after | 傳輸完成後刪除目標端多餘文件 |
| --ignore-errors | 即使出現 I/O 錯誤也繼續刪除操作 |
| --progress | 顯示傳輸進度 |
| --password-file | 指定密碼文件路徑 |
更多參數(如 -u 更新模式、-l 保留軟鏈接、-H 保留硬鏈接、--timeout 設置超時等)可根據業務需求靈活組合。
通過 cwRsync 實現 Windows 下的文件同步,配合負載均衡的寫請求固定策略,可低成本解決多服務器文件一致性問題。關鍵在於正確配置服務端認證、客戶端密碼權限及定時任務。生產環境建議監控同步日誌,異常時告警處理。