2012年2月28日 星期二

報告服務(Sql Server Reporting Service, SSRS)的高可用性(High Availability, HA)

微軟的資料庫伺服器(Sql Server)提供了報告服務(Reporting Service),讓客戶可以很容易的產生有關資料庫狀態的報告,像是登入的列表或是某個事件發生的頻率等等。只要有相對應的記錄,都可以用查詢的方式,定期或是依照需求產生報告。有關報告服務的架構可以參考剖析SQL Server 2005中的報告服務架構

在提供這樣的服務的同時,系統的高可用性也必須涵蓋這部分。報告服務的高可用性可以分成三個方面來考慮,服務,報告服務資料庫,以及查詢資料庫。

服務的部分比較單純,為了提供高可用性,就多建立幾台報告服務伺服器即可。而查詢資料庫的部分則如同一般資料庫伺服器的高可用性,可以採用叢集(Cluster)或是鏡像(Mirroring)等方式。值得注意的是,由於報告服務的查詢字串有提供故障轉移(Failover Partner)的選項,所以如果採用鏡像的方式時,只需要將備份的伺服器網址填入該欄位,在故障發生時,報告服務就會自動查詢備份的資料庫伺服器,而不會造成服務的中斷。

最困難的部分在於報告服務資料庫的高可用性。由於在報告服務伺服器端僅能設定一台報告服務伺服器(至少在2008之前尚未提供,可以參考ReportServer (TempDB) Mirror capability),所以如果採用鏡像的方式,在主伺服器發生故障時,無法自動將設定更新到備份伺服器。

在這樣的狀況下,第一種選擇是直接將報告服務的資料庫切開,每組報告服務都有自己的資料庫,所以在某一台報告服務+資料庫的伺服器故障時,其他台仍然可以正常運作。但問題是這些資料庫之間沒有同步,所以必須對每個資料庫匯入相同的範本及資料源。同時,報告服務的歷史資料也會散落在各地。

第二種選擇是純粹的鏡像,將所有的報告服務設定相同的資料庫,如何設定可以參考How to: Configure a Report Server Scale-Out Deployment (Reporting Services Configuration)。此方法在主要資料庫伺服器故障時,需要手動將報告服務的伺服器設定到備份的伺服器。如果不希望手動,也可以透過代理服務(Agent Service),在故障發生時,用rsconfig設定報告服務的資料庫。此方法的細節可以參考Reporting Services Disaster Recovery

第三種是微軟官方的建議,就是使用叢集的方式,設定可以參考安裝 SQL Server 2008 容錯轉移叢集心得筆記。不過在叢集的資料庫伺服器上,無法同時安裝報告服務,也就是說,需要額外的數台伺服器來提供高可用性的報告服務。細節可以參考Planning a Deployment Topology

--
參考資料
SQL Server Reporting Services Disaster Recovery Case Study
How to: Configure SharePoint Integration on Multiple Servers