Synchronize 兩台 IIS7

使用了兩種不同的方法去 synchronize 兩台 IIS7,記錄下來供日後參考。

  1. 用 WebDeploy + Robocopy
  2. 用 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 便完成了。