數(shù)據(jù)庫(kù)鏡像(SQL Server Mirroring)從SQL Server 2005 SP2開(kāi)始引入,雖然從SQL Server 2008開(kāi)始被列為“將會(huì)被棄用”的功能奢啥,并在后續(xù)的版本中由 Always On 可用性組代替饵史。但是由于其有很多優(yōu)勢(shì)满钟,一直被廣泛使用至今胜榔。
“數(shù)據(jù)庫(kù)鏡像” 也是一種提高 SQL Server 數(shù)據(jù)庫(kù)的可用性的解決方案。 鏡像基于每個(gè)
數(shù)據(jù)庫(kù)
實(shí)現(xiàn)湃番,并且只適用于使用完整恢復(fù)模式的數(shù)據(jù)庫(kù)夭织。
概念
數(shù)據(jù)庫(kù)鏡像維護(hù)一個(gè)數(shù)據(jù)庫(kù)的兩個(gè)副本,這兩個(gè)副本必須駐留在不同的 SQL Server 數(shù)據(jù)庫(kù)引擎服務(wù)器實(shí)例上吠撮。 通常尊惰,這些服務(wù)器實(shí)例駐留在不同位置的計(jì)算機(jī)上。 啟動(dòng)數(shù)據(jù)庫(kù)上的數(shù)據(jù)庫(kù)鏡像操作時(shí)泥兰,在這些服務(wù)器實(shí)例之間形成一種關(guān)系弄屡,稱為“數(shù)據(jù)庫(kù)鏡像會(huì)話
” 。其中一個(gè)服務(wù)器實(shí)例(主體服務(wù)器
)提供數(shù)據(jù)庫(kù)服務(wù)給客戶端鞋诗。 另一個(gè)服務(wù)器實(shí)例則根據(jù)鏡像會(huì)話的配置和狀態(tài)膀捷,充當(dāng)熱備或溫備服務(wù)器(鏡像服務(wù)器
)。在“數(shù)據(jù)庫(kù)鏡像會(huì)話
”中削彬,主體服務(wù)器和鏡像服務(wù)器作為“伙伴
”進(jìn)行通信和協(xié)作全庸。 兩個(gè)伙伴在會(huì)話中扮演互補(bǔ)的角色:“主體角色
” 和“鏡像角色
” 。 在任何給定的時(shí)間融痛,一個(gè)伙伴僅可以扮演一個(gè)角色壶笼, 擁有主體角色的伙伴稱為“主體服務(wù)器
” ,其數(shù)據(jù)庫(kù)副本為當(dāng)前的主體數(shù)據(jù)庫(kù)雁刷。 擁有鏡像角色的伙伴稱為“鏡像服務(wù)器
” 拌消,其數(shù)據(jù)庫(kù)副本為當(dāng)前的鏡像數(shù)據(jù)庫(kù)。 如果數(shù)據(jù)庫(kù)鏡像部署在生產(chǎn)環(huán)境中安券,則主體數(shù)據(jù)庫(kù)即為“生產(chǎn)數(shù)據(jù)庫(kù)”墩崩。其中,還有另一類可選服務(wù)器“見(jiàn)證服務(wù)器
”用于監(jiān)控主體服務(wù)器和鏡像服務(wù)器侯勉,提供自動(dòng)故障轉(zhuǎn)移功能鹦筹。
運(yùn)行模式
數(shù)據(jù)庫(kù)鏡像會(huì)話以同步操作或異步操作運(yùn)行。 在異步操作下址貌,事務(wù)不需要等待鏡像服務(wù)器將日志寫(xiě)入磁盤便可提交铐拐,這樣可最大程度地提高性能。 在同步操作下练对,事務(wù)將在伙伴雙方處提交遍蟋,但會(huì)延長(zhǎng)事務(wù)滯后時(shí)間。
SQL Server支持兩種鏡像運(yùn)行模式螟凭。 一種是高安全性模式虚青,它支持同步操作。在該模式下螺男,當(dāng)會(huì)話開(kāi)始時(shí)棒厘,鏡像服務(wù)器將使鏡像數(shù)據(jù)庫(kù)盡快與主體數(shù)據(jù)庫(kù)同步纵穿。 一旦同步了數(shù)據(jù)庫(kù),事務(wù)將在伙伴雙方處提交奢人,這會(huì)延長(zhǎng)事務(wù)滯后時(shí)間谓媒。
高安全模式支持標(biāo)準(zhǔn)版和企業(yè)版,并且主體和鏡像服務(wù)器必須是相同版本何乎。見(jiàn)證服務(wù)器的作用是驗(yàn)證給定的伙伴服務(wù)器是否已啟動(dòng)并運(yùn)行句惯。 如果鏡像服務(wù)器與主體服務(wù)器斷開(kāi)連接,但見(jiàn)證服務(wù)器仍與主體服務(wù)器保持連接支救,則鏡像服務(wù)器無(wú)法啟動(dòng)故障轉(zhuǎn)移宗弯。此外,如果見(jiàn)證服務(wù)器宕機(jī)了搂妻,也僅僅是不能自動(dòng)Failover而已蒙保,不影響鏡像環(huán)境。
第二種是高性能模式欲主,以異步方式運(yùn)行邓厕。 鏡像服務(wù)器嘗試與主體服務(wù)器發(fā)送的日志記錄保持同步。 鏡像數(shù)據(jù)庫(kù)可能稍微滯后于主體數(shù)據(jù)庫(kù)扁瓢。 但是详恼,數(shù)據(jù)庫(kù)之間的時(shí)間間隔通常很小。 但是引几,如果主體服務(wù)器的工作負(fù)荷過(guò)高或鏡像服務(wù)器系統(tǒng)的負(fù)荷過(guò)高昧互,則時(shí)間間隔會(huì)增大。在高性能模式中伟桅,主體服務(wù)器向鏡像服務(wù)器發(fā)送日志記錄之后敞掘,會(huì)立即再向客戶端發(fā)送一條確認(rèn)消息。 它不會(huì)等待鏡像服務(wù)器的確認(rèn)楣铁。 這意味著事務(wù)不需要等待鏡像服務(wù)器將日志寫(xiě)入磁盤便可提交玖雁。 此異步操作允許主體服務(wù)器在事務(wù)滯后時(shí)間最小的條件下運(yùn)行,但可能會(huì)丟失某些數(shù)據(jù)盖腕。
所有數(shù)據(jù)庫(kù)鏡像會(huì)話都只支持一臺(tái)主體服務(wù)器和一臺(tái)鏡像服務(wù)器赫冬。不管使用何種模式,數(shù)據(jù)庫(kù)都必須配置為完整恢復(fù)模式溃列。
對(duì)比
運(yùn)行模式 | 同步模式 | 版本要求 | 數(shù)據(jù)丟失 | SAFETY選項(xiàng) | 性能影響 | 恢復(fù)速度 | 故障轉(zhuǎn)移 |
---|---|---|---|---|---|---|---|
高安全 | 同步 | 標(biāo)準(zhǔn)/企業(yè) | 零丟失 | FULL | 網(wǎng)絡(luò)可能影響性能 | 快 | 可自動(dòng) |
高性能 | 異步 | 企業(yè) | 有可能丟失數(shù)據(jù) | OFF | 影響較小 | 根據(jù)需要提交的事務(wù)量而定 | 不可自動(dòng) |
鏡像中的事務(wù)日志
數(shù)據(jù)庫(kù)鏡像涉及盡快將對(duì)主體數(shù)據(jù)庫(kù)執(zhí)行的每項(xiàng)插入劲厌、更新和刪除操作“重做 ”到鏡像數(shù)據(jù)庫(kù)中。 重做通過(guò)將活動(dòng)事務(wù)日志記錄的流發(fā)送到鏡像服務(wù)器來(lái)完成听隐,這會(huì)盡快將日志記錄按順序應(yīng)用到鏡像數(shù)據(jù)庫(kù)中补鼻。 與邏輯級(jí)別執(zhí)行的復(fù)制不同,數(shù)據(jù)庫(kù)鏡像在物理日志記錄級(jí)別執(zhí)行。 從 SQL Server 2008開(kāi)始辽幌,在事務(wù)日志記錄的流發(fā)送到鏡像服務(wù)器之前,主體服務(wù)器會(huì)先將其壓縮椿访。 在所有鏡像會(huì)話中都會(huì)進(jìn)行這種日志壓縮乌企。
數(shù)據(jù)庫(kù)所有者可以隨時(shí)暫停會(huì)話。 暫停會(huì)話時(shí)成玫,主體服務(wù)器不會(huì)向鏡像服務(wù)器發(fā)送任何新的日志記錄加酵。 所有這些記錄將保持活動(dòng)狀態(tài),并堆積在主體數(shù)據(jù)庫(kù)的事務(wù)日志中哭当。 只要數(shù)據(jù)庫(kù)鏡像會(huì)話保持暫停狀態(tài)猪腕,事務(wù)日志就不會(huì)被截?cái)?/strong>。 因此钦勘,如果數(shù)據(jù)庫(kù)鏡像會(huì)話暫停時(shí)間過(guò)長(zhǎng)陋葡,則可能會(huì)使該日志填滿。
小D筆記
鏡像彻采,通俗來(lái)講就是一面鏡子腐缤,是“數(shù)據(jù)”在災(zāi)備環(huán)境中的“成像”,具備以下特性:
- 一致性肛响,包括庫(kù)名岭粤、數(shù)據(jù)文件和日志文件的存放路徑都要與主體數(shù)據(jù)庫(kù)保持一致。
- 唯一性特笋,每個(gè)數(shù)據(jù)庫(kù)只能有一個(gè)鏡像副本剃浇。
- 看得到,卻“用不了”猎物,鏡像庫(kù)在沒(méi)有做任何處理時(shí)是不可訪問(wèn)的虎囚。數(shù)據(jù)庫(kù)的故障轉(zhuǎn)移對(duì)客戶端不是完全透明的,因?yàn)橹黧w和鏡像是兩個(gè)獨(dú)立的SQL服務(wù)實(shí)例蔫磨,有不同的網(wǎng)絡(luò)標(biāo)識(shí)溜宽。
- 其他成本,需要額外維護(hù)實(shí)例級(jí)的對(duì)象在主體和鏡像實(shí)例間的同步质帅,包括登錄賬戶适揉、作業(yè)、鏈接服務(wù)器等