顯示具有 備份備援 標籤的文章。 顯示所有文章
顯示具有 備份備援 標籤的文章。 顯示所有文章

2009年5月1日 星期五

Windows 2008 & SQL Server 2008以NLB及複寫功能達成HA

今天晚上Jason與公司即將畢業的同事辦歡送會,在會中與同部們的伙伴們討論到某個案子因硬體設備相當的缺乏
但是該單位又想達成HA架構,一來是可以讓公司人員有反應的時間,畢竟公司地處南方,要到各地比較不方便
加上高鐵減班直達高鐵成變成每站停的慢鐵,有沒有辦法可以透過即有的功能來達成HA的架構呢?

有幾個因素必須滿足,首先以Web base的專案來舉例,有兩台web及兩台db,但是沒有shared storage可供使用成為claster架構
假設透過loadbalance及複寫功能來達成呢?
LoadBalance的設定請看小弟的所寫的劣帖:Windows Server 2008怎麼設定網路負載(Network LoadBalance)

WEB 部份
●兩台web伺服器
●loadbalance架構(多重主機-設定為無模式;Active/Active)來達成80port的負載
●資料透過DFS達成File Replication

DB 部份
●兩台資料庫伺服器
●loadbalance架構(單一主機;Active/Standby)來達成1433port的負載
●資料庫的資料同步透過合併式複寫達成

明天來實作看看,如果可用的話,再把詳細的步驟與各位網友鄉民分享


完全HA的假想圖

2009/8/4 更新

經過上篇文章SQL Server 2008 複寫實作中將複寫環境建置起來之後,配合前幾個前寫的Windows Server 2008怎麼設定網路負載(Network LoadBalance)Netowork LoadBalance下ASP.NET工作階段的Session states如何處理?,測試環境之下把HA架構測試了一下,下面是我的實作步驟,供大家參考看看…

我們先從一個遠端使用者連入電腦後資訊流的過程來跟大家解釋及說明…
1.使用者輸入網址後,DNS解析後指向Web Load Balance IP。
2.此時Web接禺使用者發出的query時,將session states指向到SQL Server Network Load Balance IP中。
3.Session States透過合併式複寫將Session寫到ASPState資料庫。
4.Web server在將Session回存到資料庫後,讀取Web.config資料庫連結字串取出動態頁面的連接內容
5.讀出字串後,連接到SQL Server Network Load Balance IP,存取所需的資料庫
6.資料庫連結時透過Load Balance分配將資料庫的內容取出
7.經由Web程式整合後再由負責的Web將所需的資訊回覆予使用者。

在實作的部份小弟切割為下列順序:
1.設定web為80 port Load Balance架構
2.設定SQL為1433 port Load Balance架構
3.設定SQL的Session states轉存資料庫(ASPState)
4.設定SQL複寫功能,複寫ASPState及所需存取的資料庫。
5.設定WEB.CONFIG轉存Session連接資訊及manchineKey,若無使用view state則可不需處理ManchineKey問題。
6.開站!!測試,開壓力測試工具實際測試,WEB端流量還是有偏重一某一台,DB則都指向主機視別元最小的伺服器上。

以上希望大家參考一下…

2009年4月22日 星期三

透過批次檔及排程自動備援MS-SQL

對於常常應用MS-SQL的廣大鄕民們,對於目前沒有太多錢可運用的單位
MS-SQL備援方案有沒有更經濟一點的呢?這個問題應該帶給大家很大的困擾吧!
其實Jason也曾深深的被困擾過,下列是Jason後來應用的方法,看看能否給大家一些想法。

若要達熱備援(Hot Site)可以透過Cluster技術達成,但其成本之高,若客戶是政府單位,且必須採用中信標的話,其試算如下:


名稱

單價

數量

小計

OS

Windows server 2003 R2 Enterprise edition

NT$ 64,698

1

NT$64,698

Windows Server 用戶端存取授權 (User or Device CAL)

NT$769

5

NT$3,845

DB

Microsoft SQL Server 2005 Std edition

NT$ 24,169

1

NT$ 24,169

SQL Server 用戶端存取授權 (User or Device CAL)

NT$4,332

5

NT$21,660

小計

1組

NT$114,372
總計

2組

NT$228,774

光是個軟體授權費用就要將近11萬5千元,更別說硬體,若是要建置為Failover cluster
除了要一台SAN,兩片Disk Control Card還得要再買兩台中階伺服器
一台SAN至少要買到48萬元,一台伺服器至少買16萬5千元
光是硬體設備就將近85萬元+23萬的軟體授權,將將好快1百萬,老闆不殺了你我才不信,鬼才敢玩。

Failover示意圖

於是,Jason想了一個方法,透過批次檔設定兩台Server的自動工作排程來呼叫整個備份及備援的程序
首先我們先確認一下需求的環境:
1.至少要有一種方法可以傳遞備份檔(.bak) ps.本範例以網芳為例。
2.主要伺服器要能夠信任備援伺服器的服務要求
3.備份檔案名稱必須相同
4.有一組可做還原的SQL帳戶。

為符合上述要求,假設主要伺服器IP為192.168.1.3,備援伺服器IP為192.168.1.5,其程序如下:
1.每天晚間半夜3點整是主要伺服器將資料完整備份至指定的目錄中
2.備援伺服器於每天半夜3點半自動將主要伺服器的備份檔透過網芳將檔案拉取過來
3.將檔案取得後透過T-Script自動的將資料還原到備援伺服器

主要伺服器透過網路讓備份的檔案能直接取取,其路徑為:\\192.168.1.3\databasesync\db.bak
備援伺服器將備份的檔案抓取過來至本機的磁碟內,其路徑為:d:\databasesync\
首先請先於主要伺服器上設定備份工作,並且設定完整備份至指定的檔案名稱,並且使用覆蓋原檔的方式

接下來在備援伺服器中建立一個批次檔(.bat),其內容如下:

xcopy \\192.168.1.3\dabasesync\db.bak d:\databasesync\ /y /s
osql -S "備援伺服器電腦名稱" -U 可執行還原的帳號 -P "可執行還原的帳戶密碼” -i 還原T-Script的實體路徑.sql
exit

其中還原T-Script的檔案(.sql)內容如下:

USE master
GO
ALTER DATABASE 資料庫名稱 SET single_user WITH rollback immediate
GO
RESTORE DATABASE 資料庫名稱 FROM DISK='d:\databasesync\db.bak’ WITH RECOVERY
GO
ALTER DATABASE 資料庫名稱 SET multi_user
GO

接下來手動的執行主要伺服器的備份程序,及備援伺服器的排定工作即可測試。

批次檔運作示意圖

這個方法可以直接在批次檔中加入其它欲備援的資料庫T-script,只要你在主要伺服器上有完整備份出欲備援的資料庫,並且將還原的t-script另外新增即可。