使用了兩種不同的方法去 synchronize 兩台 IIS7,記錄下來供日後參考。
- 用 WebDeploy + Robocopy
- 用 Appcmd + Robocopy (這個辦法比較好)
WebDeploy + Robocopy
首先在 source 啟動 WebDepSv:
net start webdepsv
然後在 destination 使用以下的 command 續一把 website 從 source sync 至 destination:
msdeploy -verb:sync -source:metakey=lm/w3svc/1,computername=Server1 -dest:metakey=lm/w3svc/1 > msdeploysync.log
其間還要預先 manually 把 source 的 ApplicationPools 在 destination 創建。
最後就是設定一個 batch file 把 source 裡的相關檔案用 Robocopy 抄至 destination,完成之後再用 Task Scheduler 定時執行這個 batch file 便可。
Robocopy 抄第一次需時比較耐,之後就祇會抄不同的部份,由於 Websites 的變化是很少的,所以日後執行 batch file 就快很多了。
這裡有個小枝節:我的 servers 是 64-bits,而 webdepsv 看來是 32-bits 的,所以在剛開始執行 msdeploy 時出現 error,後來改為選用 32-bits 的 msdeploy 就可以了。
Appcmd + Robocopy
首先在 destination 寫一個 batch file 用 Robocopy 把 source 跟 Websites 有關的檔案抄至 destination。
robocopy \sourceC$inetpubwwwroot C:inetpubwwwroot /Z /W:5 /MIR
然後在 source 利用 Appcmd 把 IIS 的 configuration files 做一個 backup,將這個 backup 抄至 destination 中,再用 Appcmd 把它 restore 進 destination。
AppCmd Add Backup "BackupName" %windir%system32inetsrvbackup 中可以找到 BackupName AppCmd Add Restore "BackupName"
最後就是在 destination 設定一個 Task Scheduler 定時執行這個 batch file 便完成了。