2012年3月13日 星期二

SQL Server 分散式架構 - 點對點交易式複寫 + NLB

        在我之前的文章中 [SQL Server 負載平衡架構介紹(Load Balancing)],介紹了多種不同的負載平衡的方式,但其實在多種架構中,我個人比較喜歡的是透過複寫機制(Replication)來進行,複寫類型主要有下列三種,大家可以點選下列的說明進行參考,在這就不特別介紹。SQL Server的Load Balancing也是最多人問的一塊,所以在這邊介紹,而且之前的經驗上覺得得在專案的初期大家往往沒有一個好的架構開始進行,往往等到系統後期或上線後才進行調整,結果造成相當大的成本浪費,如設定的重新配置與程式碼的改寫,所以希望透過本章節可以讓大家多認識一個不錯的架構,再請大家多多參考。

複寫類型:

  • 快照式複寫考量
  • 交易式複寫考量
  • 合併式複寫考量

  • 在複寫的架構下,個人認為最佳的方式是可以多台同時進行讀寫,而且資料交換的時間又短(適交易量而定,但這是所有複寫類型中資料交換最快的一種),如下圖左邊的部份,但導入前需特別注意前端應用程式設計的部份,以免造成資料的衝突,最常見的是當資料表主鍵設計時,常常只利用流水號來進行,但是這樣的方式並不適合,容易造成資料寫入時的問題,尤其是當你表格為 Master/Detail 時,更容易有問題。在不改變架構的情況下,其實可以參考右邊的架構,也就是一台負責寫入,其他台的電腦負責讀取,這種情況下需要調整的程式就會非常的少,但是卻可以達到很大的效益,而且當你的交易越多或有效能上的問題時,就可以一直串連並分散交易,達到擴充的功能。

    在左邊的架構中前端的主機可以對A與B之間一台進行寫入的動作,之後資料庫端就會自動進行資料的同步,在本章中我們將介紹SQL Server 2005之後交易式複寫中擴充的一個新功能,點對點交易式複寫 (Peer-to-Peer Transactional Replication),讓A電腦與B電腦同時可以有讀寫的功能,另外透過NLB接收前端的需求,然後再平衡的分配給後端資料庫,進行達到 SQL Server - Load Balancing 的架構。




    配備說明:
    第一台
    電腦名稱:WIN-2008R2-1
    OS:Windows 2008R2 Enterprise
    DB:Windows 2008R2 Enterprise
    說明:第一個節點。

    第二台
    電腦名稱:WIN-2008R2-2
    OS:Windows 2008R2 Enterprise
    DB:Windows 2008R2 Enterprise
    說明:第二個節點

    設定流程:

    NLB (Network Load Balancing) 設定:
    關於NLB的設定,在請大家參考我之前的著作 [網路負載平衡 - Reporting Service 與 NLB 的結合],其中有介紹到NLB的部份,我就不在此特別說明,謝謝。

    點對點式複寫功能 (Peer-to-Peer Replication) 設定:
    1、設定第一台的發行集。
    1-1. 登入第一台電腦,並開啟SQL Server Management Studio
    1-2. 點選 [複寫] -> [本機發行集] -> [新增發行集]



    1-3. 選擇你要進行複寫的資料庫。

    1-4. 請選擇 [交易式發行集]。

    1-5. 選擇要進行複寫的資料表,可以全部選取。
    PS:這部份如果有效能上的考量時,你可以選擇特定的資料表進行複寫即可,由其在合併式複寫上,越多的表格更由於造成資料複寫上的延遲。

    1-6. 如果有需要特別設定篩選的資料時,請在此設定或請選擇下一步直接跳過即可。

    1-7. 由於我是透過手動同步各個節點的資料庫,所以在此處不設勾選。

    1-8. 設定複寫代理程式安全性,請記得最好使用網域帳號進行。

    1-9. 請勾選 [建立發行集],如果你想保留此次的設定,你可以勾選產生指令碼,日後直接套用即可。

    1-10. 請輸入發行集的名稱。


    1-11. 請再點選 [複寫] -> [本機發行集] -> [發行集名稱] -> [屬性]。

    1-12. 請將 [訂閱選項] -> [點對點複寫] -> [允許點對點訂閱] 設定成 [True],然後選確定。


    2、設定第二台主機的散發
    2-1. 登入第二台
    2-2. 點選 [複寫] -> [設定散發]


    2-3. 選擇第一項,也就是本身為散發者。

    2-4. 請設定第二台主機上的一個指定目錄進行分享,而且讓第一台也可以進行存取與寫入。

    2-5.  此步驟請依照預設值即可,如有需要再自行修改。

    2-6. 設定發行者與散發資料庫,並選擇下一步。

    2-7. 請勾選 [設定散發],如果你想保留此次的設定,你可以勾選產生指令碼,日後直接套用即可



    2-8 設定完成後,請將你設定複寫的資料庫進行完整備份,然後還原到第二台上,藉以確保第一台與第二台上的資料與Schema都相同。

    3、設定點對點式複寫功能 (Peer-to-Peer Replication)
    3-1. 登入第一台
    3-2. 選擇 [複寫] -> [本機發行集] -> [發生集名稱] -> [設定點對點拓撲]


    3-3. 選擇發行集。

    3-4. 在空白處點選滑鼠右鍵 -> [加入新的對等節點]。

    3-5. 登入你要加入的節點主機。


    3-6. 選擇加入的節點中的資料庫,請注意此處的識別碼必須都不相同。

    3-7. 加入後你就可以看而有一條雙箭頭的線將兩個節點連結。

    3-8. 設定記錄讀取器代理程式的安全性,這個部份也是請使用網域帳號進行設定。

    3-9. 如果每一個節點的安全性設定皆相同時,可以勾選下方的選項即可。

    3-10 跟上一個步驟相同。

    3-11. 由於在2-8的時候已經手動的初使化每一個資料庫了,所以請選擇第一個選項。



    3-12 最後在二台的 [本機發行集] 上你就可以都有相同的發行集名稱。


    關於複寫的進作情況,你可以透過 [複寫監視器] 進行確認,當然這個架構在使用上,需特別注意衝突的問題,通常都是前端程式設計的不小心所造成,而你可以從複寫監視器或SQL Server Error Logs中看出,但此架構並不會自動進行衝突的排除,所以必須手動排除,所以在系統上線前請多多測試與前端程式的部份,以免日後的衝突發生,造成資料的不正確。


    參考連結:
    SQL Server 的分散式資料複寫技術
    http://technet.microsoft.com/zh-tw/library/dd125513.aspx
    SQL Server Replication
    http://msdn.microsoft.com/en-us/library/ms151198.aspx
    Managing SQL Server 2005 Peer-to-Peer Replication
    http://technet.microsoft.com/en-us/magazine/2006.07.insidemsft.aspx
    Peer-to-Peer Transactional Replication
    http://technet.microsoft.com/en-us/library/ms151196.aspx
    How to: Configure Peer-to-Peer Transactional Replication (SQL Server Management Studio)
    http://technet.microsoft.com/en-us/library/ms152536.aspx
    使用複寫監視器監視複寫
    http://msdn.microsoft.com/zh-tw/library/ms151780.aspx


    關鍵字:Peer-to-Peer ReplicationNLBNetwork Load BalancingDistribution ArchitecturePeer-to-Peer Transactional Replication

    2012年3月8日 星期四

    SQL Server 2012 RTM 預覽與介紹

            等待已久的 SQL Server 2012 終於在3/6號已經釋出RTM版本,這次提供的功能相當的多,大家可以參考下列的連結進行了解,而這次微軟也請了大師級的講師(胡百敬)進行 SQL Server 2012 教學短片的介紹。對於想了解 Microsoft SQL Server 2012 的朋友們,可以趕快下載安裝,千萬不要錯過。


    新功能或增強功能

    教學短片:


    下列是這次官方主要推出的兩種版本:
    Microsoft SQL ServerR 2012 Evaluation官方下載:
    http://www.microsoft.com/downloads/zh-tw/details.aspx?FamilyID=a74d1b60-6566-4551-b581-03337853b82b
    Microsoft SQL ServerR 2012 Express官方下載:
    http://www.microsoft.com/downloads/zh-tw/details.aspx?FamilyID=c3a54822-f858-494a-9d74-b811e29179e7


    安裝流程:
    安裝流程大致上與我的上一篇 [SQL Server 2012 Release Candidate 0(RC0) 下載說明與安裝問題排除] 相同,這次我將幾個特點的部份截錄出來,再提供給大家參考。

    1、由於我是安裝在Windows 2008 R2 ,所以安裝前需要先行安裝 Service Pack 1,目前可以確定的是在 Windows 2003 的環境中已無法進行安裝,詳細的需求,可以參考 Hardware and Software Requirements for Installing SQL Server 2012 的說明。



    2、啟動 SQL Server 2012 的安裝後,您會發現第一個改變的地方,那就 Smart Update,這個主要是當日後有新的 Service Pack 或 Cumulative Update 推出時,此程序即會自動進行更新,不像以往遇到問題時還需要透過打包 (slipstream) 的方式進行。


    3、選擇 SQL Server 2012 的特徵功能。

    4、全部安裝時的硬碟需求。

    5、 SQL Server 2012 Management Studio 的啟動畫面。

    6、SQL Server 2012 的版本代號為 [11.2.2100.60]

    7、各元件版本代號



    相關文章:

    1. SQL Server 2012 Code Name(Denali) 新功能介紹與預覽
    2. SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – 分頁功能
    3. SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – Sequence
    4. SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – Code Snippet Manager
    5. SQL Server 2012(Code Name Denali) - 以列為主的新儲存方式(雲端儲存架構)
    6. SQL Server 2012(Code Name Denali) - FileTable介紹
    7. 微軟介紹雲端平台就緒的資訊 - TechEd 2011
    8. SQL Server 2012 (Code Name Denali) - HA 新功能 - AlwaysOn
    9. SQL Server 2012 新功能 - AlwaysOn安裝與設定
    10. SQL Server 2012 RTM 預覽與介紹


    參考連結:
    Microsoft SQL Server 2012 教學短片
    http://technet.microsoft.com/zh-tw/dd365152.aspx
    Hardware and Software Requirements for Installing SQL Server 2012
    http://msdn.microsoft.com/library/ms143506(v=SQL.110).aspx

    關鍵字:SQL Server 2012DenaliRTM

    2012年3月6日 星期二

    備份與還原觀念介紹與策略規畫

            資料庫的備份工作非常的重要,是每一位 DBA 首要工作,這也是許多的首次接任 DBA 面對的問題之一,反正不管是面對什麼不同的資料庫,反正就是先備份就對了,因為當問題發生時,只要還原你的備份即可,但是隨著資料庫越來越大的時候,備份的時間會越來越長,而且備份的過程中,因為有大量的 I/O ,所以反而造成資料庫的問題。

    SQL Server主要分成二種檔案類型,一個是資料檔 (MDF or NDF),而另一個是交易紀錄檔(LDF),我常遇到的一個情況,那就是資料檔可能不到1G,但是交易紀錄檔已經成長到10G左右,最後造成磁碟空間不足,這個也是因為備份之後沒有截斷交易紀錄檔的關係,解決方法,我們稍後再來說明。

    上述的問題主要都是在備份方式的選擇,所以現在我們來介紹如何規畫備份與還原計畫,而在介紹之前,我們先來說明一下資料庫的復原模式。復原模式簡單的說,就是當你的資料庫毀損時,你希望可以還原到特定的時間點藉以減少資料損失。

    完整備份是最好的備份方案,但是相對的在每次有 Insert、Update、Delete的時候,都需要進行交易紀錄檔的抄寫,所以也會影響到效能的部份,如果你有需要一次 Import 大量的資料時,你可以將復原模式先切換成 [大量記錄] ,如果就可以加快 Import 的交易速度,通常復原模式的選擇,取決與資料異動的頻率,如果某些資料庫上的資料很少異動,其實你就可以選擇簡單模式即可。

    復原
    模式
    描述 工作損失風險 復原至時間點
    簡單 無記錄備份。
    自動收回記錄空間,使空間需求保持在最低,實際消弭管理交易記錄空間的需求。
    最近一次備份之後所做的變更並未受到保護。如果發生損毀事件,則必須重做這些變更。 只能復原至備份結束時。
    完整 需要記錄備份。
    不因損失或損毀資料檔而失去任何工作。可復原至任意時間點(例如,應用程式或使用者錯誤前)。
    通常沒有。
    如果記錄結尾損毀,必須重做最近一次記錄備份後的變更。
    可以復原至特定時間點(假設您已完成至該時間點的備份)。
    大量記錄 需要記錄備份。
    完整復原模式的輔助,允許執行高效能的大量複製作業。針對大多數的大量作業使用最少記錄,以減少記錄空間的使用量。
    如果記錄損毀,或在最近一次記錄備份後進行過大量記錄作業的話,必須重做最近一次備份後的變更。否則不會損失任何工作。 可復原至任何備份結束時。不支援時間點復原。

    在來我們來介紹一下備份的種類,在SQL Server上總共提供五種備份方式(如下表),最常用的是前三種,請參考下列說明。
    備份類型描述
    完整整個資料庫的完整備份。
    差異這個備份僅包含每個檔案自最近資料庫備份後修改過的資料範圍。
    交易檔每個記錄備份都會涵蓋建立備份當時正在進行中的交易記錄部分,而且也包含上一次記錄備份未備份到的所有記錄。
    檔案 / 檔案群組這是一或多個檔案或檔案群組中所有資料的完整備份。
    差異檔案這是一或多個檔案的備份,其中包含自從每個檔案最近完整備份後變更過的資料範圍。


    再來另一個使用復原模式為完整時常遇的到問題,那就是交易檔(LDF)過大,常常造成磁碟空間不足的問題,因為交易檔本身只有當你進行交易檔備份的時候才會清除,其中的完整與差異都不會,為了證明這個情況,我作了以下的實驗。


    交易檔的連結,本身是透過 LSN 進行連結,如下圖所示。

    底下我總共作了13次的備份,分別為 差異 -> 紀錄 -> 完整 -> 差異 -> 紀錄 -> 差異 -> 紀錄 ->完整 -> 差異 -> 紀錄 -> 完整 -> 完整 -> 紀錄,說明如下:

    備份測試:
    1、交易檔 (LSN) 的啟始於你的第一個完整或差異備份。
    2、從第二次的交易檔備份到第五次的交易檔備份,中間雖然有一次完整與差異備份,但是都只是包含交易檔的部份,但並沒有截斷交易檔,所以這證明了只有交易檔備份可以截斷,以免記錄檔 (LDF) 不斷的成長。



    另一種方式,您也可以透過 DBCC Log(DBName) 的指令查詢目前記錄檔 (LDF) 的筆數,當您進行交易檔備份後,你就會發生回傳的筆數就會變少了。



    最後我們來看一下備份與復原模式的相關,請參考下圖說明。
    Recovery Model/ BackupCompleteDifferentialTransaction LogFile / Filegroup
    SimpleRequiredAllowedNot AllowedNot Allowed
    Bulk-LoggedRequiredAllowedRequiredAllowed
    FullRequiredAllowedRequiredAllowed


    備份策略範例:
    我們通常透過完整 + 差異 + 紀錄來規畫資料庫的備份策略,但是怎樣的方法才是最好的,其實沒有一定的公式,取決於備份時的時間、資料可能遺失時間長度、還原時的時間等因素,下列我透過 MSDN 上範例提供給大家參考,希望大家可以透過這個範例學習後,調整出最適合資料庫的備份策略。

    資料描述:
    Database /
    Parameter
    Sales/Customer
    Size
    3.5GB
    Usage
    Track customer orders and shipments
    Activity Pattern
    Most heavily used during weekdays. Customer orders are added during business hours. Reports are prepared at nights.
    Disaster Recovery Requirements
    High usage and visibility database. Critical to company operations. Require point-of-failure recovery. This system should be operational within 20-30 minutes if outage happens during working hours. No data loss is acceptable.

    首先將資料庫的復原模式設定為 Full,如此可以讓系統保持最大還原到特定時間點的可能性,並且保持每天 PM 10:00進行完整備份、AM 11:00與 PM 4:00進行差異備份,每10分鐘進行一次交易備份。

    在這樣的模式,最差的情況下,可以會損失約10分鐘的資料,但這種的情況非常的低,因為這是當你的LDF檔案完全不能讀的情況下才會發生,假設故障發生在星期一的AM 11:21 分,這時候在新的機器上,你就需要先還原星期天的完整備份,然後再還原星期一 AM 11:00的差異備份,最後再依序還原 AM 11:10、AM 11:20的交易備份,如果你想還原到特定的時間點,如 AM 11:16分,在進行最後一個交易備份時,配合 STOPAT 的備份參數即可。


    參考連結:
    SQL Server 2000 Backup and Restore
    http://technet.microsoft.com/en-us/library/cc966495.aspx#EBAA
    Designing a Backup and Restore Strategy
    http://msdn.microsoft.com/library/aa173660.aspx
    Analyzing Availability and Recovery Requirements
    http://msdn.microsoft.com/zh-tw/library/aa196617.aspx
    Planning for Disaster Recovery
    http://msdn.microsoft.com/zh-tw/library/aa196629.aspx
    記錄序號和還原計畫
    http://msdn.microsoft.com/zh-tw/library/ms190729.aspx
    backupset
    http://msdn.microsoft.com/en-us/library/ms186299.aspx
    備份概觀 (SQL Server)
    http://msdn.microsoft.com/zh-tw/library/ms175477.aspx
    復原模式概觀
    http://msdn.microsoft.com/zh-tw/library/ms189275.aspx
    如何:還原到某個時間點 (Transact-SQL)
    http://msdn.microsoft.com/zh-tw/library/ms179451.aspx

    關鍵字:SQL ServerBackupRestoreRecoveryRecovery Model備份還原復原模式