-------------------------------------------------------------------------------------------------------------
故障轉移羣集
雖然羣集的共享存儲是單點的,但是從存儲層面來看,是配置了存儲的冗餘的,所以也一定程度上實現了冗餘。
在羣集模式下,一個SQL羣集實例只在一個節點上是活躍的,即同一時刻每個SQL羣集實例的服務只在羣集中的一個節點上是處於運行的狀態 ,所以如果有多個數據庫,想把數據庫放在不同節點上,實現負載的分離,那麼需要爲每一個數據庫建立單獨的實例,在整個SQL Server實例級別提供高可用性的保護,這一點和alwayon不太相同(alwayson是數據庫級別的高可用);
有一些限制:1)對硬件資源的要求,依賴於特定的硬件資源條件,需要共享存儲 。(共享磁盤可以在存儲級別實現冗餘);2)數據庫文件只存一份(潛在的單點故障,但是在存儲級別還是有很多手段可以保證可用性,例如RAID技術、HBA卡冗餘)可以通過羣集服務器節點和網絡資源的冗餘規避服務器硬件、網絡、操作系統及SQL Server服務級別的單點故障 ;
羣集中windows網絡名稱和IP(這個和SQL server沒有太大關係)和SQL server網絡名稱不一樣(每裝一個SQL實例,就會有一個SQL網絡名稱);
Window 2008羣集支持四種仲裁機制。1、多數節點(不依賴共享磁盤,必須有一半或以上的節點互聯互通,適用於三個以上節點的羣集);2、節點和磁盤多數(除了每個節點具有投票權,仲裁磁盤也有一票,適用於偶數個節點的羣集);3、多數節點和文件共享(用共享文件夾代替共享磁盤,當多個節點不能構成多數的時候,看哪個節點可以訪問文件共享,這個節點就會多一票);4)非多數(仲裁磁盤)這個是看哪個節點擁有仲裁磁盤);
當SQL加入到羣集之後,SQL服務已經由羣集接管了;SQL服務作爲一種資源存在於羣集中,我們停止SQL服務的時候,不能使用服務管理器或配置管理器,而是在羣集中使服務資源“脫機”;SQL server服務資源在羣集中依賴一塊磁盤和SQL網絡名稱;
使用SQL安裝關盤的“維護”嚮導,可以刪除羣集的節點,對羣集節點進行正常的卸載;
爲SQL羣集升級補丁的時候,在SQL 2005平臺必須在活動節點安裝,然後自動更新到被動節點,時間較長,服務有中斷;而SQL 2008羣集則先陸續安裝被動節點,然後再打主動節點;
無論單機實例還是羣集實例都支持修改SQL的網絡名稱,但是不能改實例名稱;1)如果是單機實例:改完後要重啓機器,而且在SQL中要做一個額外的步驟,可以參考SQL 的聯機幫助文檔;SQL server的網絡名記錄在master庫的一張系統表中,所以修改完成後,要同步修改表;2)如果是羣集實例,直接在羣集管理器中進行修改,首先把羣集網絡名稱資源脫機,然後在屬性中修改就行了;
SQL Server故障轉移羣集建立在Windows故障轉移羣集之上;
多個羣集節點分別安裝SQL Server服務組件,但互相協同作爲一個整體對外提供同一個SQL實例的服務;
一旦實例的當前活動節點發生故障,其他節點上的羣集服務自動協商並選擇一個新的節點來接管該實例;
SQL羣集實例對外使用一個虛擬網絡名稱 (Virtual Network Name)提供服務,節點間的SQL服務故障轉移對客戶端是透明的 ;
-------------------------------------------------------------------------------------------------------------
數據庫鏡像
兩個實例,只能在兩個實例之間,不考慮見證的情況下,數據是隻有兩份;
數據庫級別的,以數據庫爲單位進行鏡像;
數據的傳輸是單向的,永遠只能在單點寫入;
在單個數據庫級別提供高可用性;
不依賴於任何特定的硬件資源條件;
既提供了服務器資源的冗餘,又提供了數據的冗餘
數據庫的故障轉移對客戶端不是完全透明的
主體和鏡像是兩個獨立的SQL服務實例,有不同的網絡標識
鏡像數據庫不能直接提供數據訪問(所有的讀寫請求只能在主數據庫上)
只有在同步模式下,才能使用圖形界面進行數據庫的切換,如果在異步模式下切換,需要使用SQL語句;
通過在兩個SQL Server實例間實時的進行數據變化的傳輸(利用事務日誌信息)來同時提供服務器資源和數據的冗餘保護
一旦主體實例 (Principal)上的數據庫發生故障,該數據庫可以自動或手動的方式切換到鏡像實例 (Mirror)上繼續提供服務
自動的故障切換需要通過安裝第三個見證實例 (Witness)來提供支持
當主體數據庫恢復工作後,將自動成爲新的鏡像數據庫並和當前的主體數據庫繼續進行數據的同步
數據的傳輸可以使用同步或異步的模式 1)同步模式:無數據損失的風險,但性能影響相對較大; 2)異步模式:有數據損失的風險,但對性能的影響很小 。區別在於:如果是同步模式,任何對事務提交的寫入動作,寫入完成後,並不是立刻確認提交成功,要等待對應的日誌在鏡像數據庫也寫入,並確認;異步模式是隻要主的寫入成功就算成功了,並不等待確認;所以如果是異步模式,可能會有數據丟失;
-------------------------------------------------------------------------------------------------------------
Alwayson
雖然還是加到一個羣集之中,但是實例屬於單機實例,真正故障切換的時候,實例是不會切換的,切換的只是數據庫;
每一個可用性組對外有一個網絡名稱;
alwayson的切換,取決於羣集的投票權設置;
一個AG監聽器對應了一個註冊到DNS的名稱和IP,正常情況連接
對數據庫鏡像功能的大幅提升,同時又結合了羣集的一些優勢
數據庫的故障轉移以可用性組爲單位進行管理,同一組中可包含多個數據庫
數據變化在主體實例和多個 (最多4個)從屬實例之間實施進行傳輸
可用性組在實例間的故障轉移可以自動或手動的進行,新的主體實例繼續自動向其他所有從屬實例進行數據同步
每個可用性組中的數據庫的對外服務使用一個虛擬網絡名稱,從而故障轉移的過程對於客戶端是透明的
從屬副本數據庫允許進行數據庫的只讀訪問操作
在單個或多個數據庫級別提供高可用性的保護
不依賴於任何特定的硬件資源條件
既提供了服務器資源的多副本冗餘,又提供了數據的多副本冗餘
數據庫的故障轉移對客戶端是完全透明的
數據的傳輸可以使用同步或異步的模式。同步模式:無數據損失的風險,但性能影響相對較大。異步模式:有數據損失的風險,但對性能的影響很小
從屬副本數據庫可以直接提供只讀的數據訪問操作,包括執行備份
-------------------------------------------------------------------------------------------------------------