哪些系統需要數據庫鏡像技術?
我們先來看看什麽是數據鏡像:現在幾乎所有的應用系統都是基於數據庫的,所以數據庫的負載比較大。在壹天24小時中,隨時都可能有數據要保存到數據庫或從數據庫中讀取。任何時候都會有用戶連接到我們的數據庫服務器,幾十個、幾百個甚至上千個用戶連接使用我們的數據庫,所以無論是計劃內停機還是計劃外故障都會造成壹定的損失。給我們的用戶或者企業帶來了很大的損失,尤其是隨著數據時代的到來,用戶對數據的使用提出了更高的要求,那麽作為壹個DBA,應該怎麽做才能把這種損失降到最低呢?正是因為這種需求,數據庫鏡像技術應運而生!數據庫鏡像的概念是在SQL SERVER2005中首次提出的。功能:基於軟件的高可用性解決方案。這是壹個完全基於軟件的高可用性解決方案。不需要增加硬件成本,即硬件成本低,故障轉移恢復快。最重要的亮點是快速故障切換恢復。3秒(對用戶或DBA特別有吸引力)數據量大的情況下壹般是10秒。在這種數據庫鏡像技術中,有壹個數據庫服務器,我們稱之為主數據庫。它負責用戶連接和數據處理。還有壹個從服務器,準確的說應該叫鏡像服務器,上面還有壹個數據庫,叫鏡像數據庫,用來存儲我們主數據庫的熱備份。也就是說,它雖然沒有連接到用戶的電腦上,但是可以對主服務器上的數據變化和更改進行熱備份。也就是說,如果用戶更新主數據庫中的內容,主數據庫會根據鏡像技術將更新發送到鏡像服務器,從而保證主服務器和從服務器之間的數據壹致。如果我們的主服務器或主數據庫由於某種原因不可用,例如,網絡中斷,系統故障等。,那麽客戶端會重定向到鏡像服務器,那麽客戶端仍然可以讀寫數據,他不會感覺到主數據庫服務已經宕機。因此,采用數據庫鏡像技術後,對於用戶來說,增強了這種可用性,縮短了恢復時間。那麽客戶仍然可以將數據寫入鏡像數據庫。讀取數據和更新相關事務是我們應用數據庫鏡像的過程。為了實現這個過程,必須涉及到幾個角色:數據庫鏡像中的服務器角色:這些角色剛剛被圖形引入,所以2005年有三個服務器角色,分別是:主體服務器:主體服務器接受用戶連接和事務請求,即正常情況下主體服務器提供服務;鏡像服務器:鏡像數據庫是主體數據庫的備份。所謂熱備份是指主體數據庫中的更改會立即反映到硬盤鏡像數據庫中。僅在故障轉移後接受用戶連接,請求見證服務器處理事務:監控服務器的狀態和連通性,實現自動故障轉移,也就是說見證服務器會壹直監控兩臺服務器的狀態和連通性。當主體服務器關閉或不可用時,見證服務器將立即啟用故障轉移,並將鏡像服務器切換到主體服務器。繼續為用戶提供服務器。這是數據庫鏡像中的三個服務器角色,但需要註意的是,這三個角色不是固定的,而是可以改變的:主體數據庫和鏡像數據庫是夥伴;主體和鏡像可以相互轉換。故障轉移後,夥伴角色會發生變化。當主體服務器正常時,所有用戶連接和數據更新都直接發送到主體服務器,只有主體服務器將數據備份到鏡像服務器,但當主體服務器不可用時,角色會發生變化。鏡像服務器成為主體服務器。那麽如果原來的主體服務器恢復正常呢?它將成為鏡像服務器。所以他們的角色完全變了。所以如果這個服務器又不可用。然後就是另壹個轉化的過程。那麽妳可能要問另壹個問題了:這三個角色怎麽知道哪個可用,哪個不可用?每個服務器實例通過PING交換消息來相互監視。PING的原理和DOS命令類似,但功能比DOS強大得多。DOS下的PING只是檢查網絡的連通性,這裏的PING是監控網絡的連通性,這是第壹步。還需要監控數據庫服務器實例的運行情況,服務器是否正常,這個服務器上的數據庫是否正常。總結壹下數據庫鏡像的工作流程:壹般情況下,配置數據庫鏡像後,用戶只能連接主體數據庫,此時鏡像數據庫不可用。用戶連接是沒有用的。當用戶只能使用主體服務器時,主體服務器壹方面將數據寫入自己的數據庫,另壹方面通過事務日誌發送到鏡像服務器,寫入鏡像服務器的數據庫。此時,主體服務器將進入等待狀態。等待鏡像服務器的確認,也就是鏡像服務器的數據成功寫入鏡像數據庫的時候,會給主數據庫發送壹條消息,說我現在已經更新完數據了,也就是鏡像服務器上已經進行了壹次重做過程。這是壹份確認書。主體服務器收到這個確認,就會回復客戶端,說剛才的數據更新操作已經完成,為什麽還能實現快速恢復機制?這主要離不開2005中的壹個機制,但是SQL 2005並不是非要等到回滾結束,重做後才能使用。至於撤銷的操作,妳在用戶使用過程中繼續撤銷,所以當主服務器的數據更新時,鏡像服務器會在最短的時間內更新,這樣如果主數據失效,鏡像服務器可以在最短的時間內接管主服務器。以下是數據庫鏡像的三種操作模式:高可用性:最常用。高級別的保護和高性能讓我們分別來看看這三種模式。當然,最重要的是高可用性,這是壹種廣泛使用的模式:服務器角色:委托人服務器鏡像服務器見證服務器應用場景:要求高可用性的場合,如股票交易、證券交易銀行等。要求實現自動故障轉移,保證數據的完整性:要求只要是用戶提交給服務器的數據,即使剛提交給主服務器就出現故障,也能保證數據不會丟失。故障轉移後的數據不會丟失,從而保證了數據庫的完整性。高級保護模式:從名字就可以看出,它的重點是對數據的保護。而不是實現可用性服務器的角色:主體服務器鏡像服務器應用場景:高數據完整性要求不需要自動故障轉移,這意味著主體數據庫的宕機是可以接受的,但是數據的丟失是不可接受的,所以這種情況下可以使用高級別的保護模式,因為沒有見證服務器,所以無法進行自動故障轉移。然後,如果主體服務器不可用,則只能手動完成故障轉移。因此,要求服務器的可用性很低。高性能模式:服務器角色:主體服務器鏡像服務器應用場景:當主體服務器和鏡像服務器相距較遠時,十幾公裏或兩個城市之間的通信鏈路存在明顯的延遲,對性能的要求高於對數據完整性的要求。原理是:當主體服務器接收到用戶的操作時,將事務傳輸到鏡像服務器。所以距離遠,所以有明顯的延遲,所以他不會等待鏡像服務器的確認,也就是說它不在乎這個數據是否寫到鏡像服務器,所以這種模式在於盡快響應用戶的請求,也就是對用戶的性能有更高的要求,高於數據的完整性。在這種模式下,會有數據丟失,也就是說,如果主服務器宕機,我們會把鏡像服務器作為主服務器,但是不能保證裏面的數據和主服務器上的數據壹致,因為可能會有丟失。先簡單介紹幾個概念:事務安全:完全主體和鏡像數據庫同步傳輸的模式。發送日誌後,主體等待確認鏡像和鏡像的日誌完全壹致。關閉主體並發送日誌後,不等待鏡像的確認,繼續處理後續操作。當主體服務器出現故障時,鏡像服務器上的壹些數據可能會丟失。在高可用性或高保護模式下需要仲裁。為了確定哪個服務器是主體服務器,仲裁的改變將導致故障轉移。如果主體服務器出現故障,仲裁將發生變化,鏡像服務器將被指定為主體服務器。仲裁壹般有幾種形式:我們來看看如何配置數據庫鏡像:這個應該是大家都很興奮的,因為我聽我講了很久了。我終於不用再受苦了。其實配置很簡單,註意幾步就行了。準備鏡像數據庫在鏡像服務器上準備鏡像數據庫創建數據庫鏡像端點在每臺服務器上配置鏡像端點配置安全性並啟動數據庫鏡像。我們具體來看壹下怎麽做。需要註意的是:SQL SERVER2005剛發布時默認關閉數據庫鏡像的服務,不支持。在SQL SERVER2005正式版剛剛發布的時候,人們認為數據庫鏡像的技術還不成熟,需要改進。所以如果妳用的是正式版,就不能用這個技術。然後需要下載SP1或以上的補丁。版本號sql server 2005版本9.00.1399 Sql server 2005(初始版本)9 . 00 . 2047 Sql server 2005 sp 1 9 . 00 . 3042 Sql server 2005 SP2我們在這裏直接打SP2的補丁:稍微準備壹下數據庫:條件很重要:主體數據庫必須是完全恢復模式。在主體數據庫上創建完整備份,並使用NORECOVER選項在鏡像服務器上恢復主體數據庫。繼續還原後續的日誌備份(NORECOVER) NORECOVER很重要的壹點是配置數據庫鏡像端點(ENDPOINT)實現鏡像會話的通信,也就是各個服務器的入口點,有點類似於端口號。但事實並非如此。也就是說,在您創建了這個端點之後,每個服務器都可以使用TCP協議在實例之間進行通信。每個鏡像端點監聽壹個唯壹的TCP端口號,通常每個人都使用端口5022。創建數據庫鏡像端點:您需要在每個實例上創建。只有管理員組的成員才有權限。設置終結點角色意味著有些是合作夥伴終結點,有些是見證終結點,因此必須指定它。默認情況下不能使用激活端點,因此請激活它。讓我們看壹下使用T-SQL語句創建端點創建端點db鏡像為TCP (listener _ port = 5022)。當然也可以使用其他端口,只要不是用於database _ mirroring(role = partner,Encryption = supported)go-創建壹個數據庫鏡像端點,角色是partner,通信過程是加密的。alter endpoint db mirroring state = started go-激活此端點並開始偵聽。創建見證服務器的端點:創建時激活端點。CREATE ENDPOINT db MIRRORING STATE = STARTED AS TCP(LISTENER _ PORT = 5022)For DATABASE _ MIRRORING(ROLE = WITNESS,ENCRYPTION=SUPPORTED)配置安全性:數據庫鏡像中的實例必須受信任。兩者都使用WINDOWS身份驗證或基於證書的身份驗證(不受信任的域)。為簡單起見,我們使用WINDOWS身份驗證。授予服務帳戶連接到端點的權限。我們在這裏都使用相同的用戶名和密碼,然後我們將在創建端點後啟動數據庫鏡像。註意順序很重要。指定鏡像數據庫的夥伴在鏡像服務器上運行。指定要在主體服務器上操作的主體數據庫夥伴。指定要在見證服務器上運行的見證服務器。指定事務安全性選項FULL或OFF。對應的語句有:alter database not wind set partner = n ' TCP:/server 1h:5022 '-execute alter database north wind set partner = n ' TCP:/server 2:5022 '-execute alter database noth wind set witness = n ' TCP:/server 3:5022 '-execute alter database noth wind set safety full on server 1(subject);-在SERVER1上執行高可用性(主題)。當然,您也可以使用SMSS來檢查數據庫鏡像完成後是否完成。有兩種方法:SMSS數據庫屬性-鏡像狀態T-SQL Select * from sys。數據庫鏡像select * from sys。數據庫鏡像見證。讓我們具體看看如何配置高可用性數據庫鏡像。我們可以通過使用T-SQL清楚地看到配置過程。我來介紹壹下我們使用的環境:SERVER1是主體服務器,SERVER2是鏡像服務器,SERVER3是見證服務器。首先,我們需要準備數據庫:壹個是備份主體數據庫,另壹個是在鏡像服務器上恢復它。所以在服務器1上:將數據庫northwind備份到磁盤=' c: \ nw.bak '在服務器2上:從磁盤還原數據庫north wind = ' c:\ NW。“BAK”用NORECOVERY創建壹個數據庫端點:1。在SERVER1上創建壹個數據庫鏡像端點,用於夥伴通信創建端點dbmirrep為TCP (listener _ port = 5022)用於database _ mirroring(role = partner,encryption = supported);可以通過圖形界面查看alter endpoint dbmirrep state = started。2.在SERVER2上創建壹個數據庫端點。它還用於夥伴通信,以創建端點dbmirrep作為database _ mirroring(role = partner,Encryption = supported)的TCP(listener _ port = 5022)alter endpoint dbmirrepstate = started 3。在服務器3上創建鏡像端點。用於見證通信為database _ mirroring(role = witness,Encryption = supported)創建端點dbmirrep as TCP(listener _ port = 5022)alter endpoint dbmirrep state = started 4。檢查端點配置Select * from sys。Database _ mirroring _ endpoints還可以通過圖形界面查看配置數據庫鏡像安全性:即,指定哪些用戶可以使用此端點。必須是管理員,壹般用戶不會讓他訪問。分別執行:在端點上授予connect::“dbmirrep”到“server1 \杜菲”在端點上授予connect::“dbmirrep”到“server2 \杜菲”在端點上授予connect::“dbmirrep”到“server3 \杜菲”最後壹個是啟動數據庫鏡像。註意:必須首先從鏡像服務在SERVER2上配置該序列,並且指定的夥伴終結點:alter database ite set partner = ' TCP://SERVER1:5022 '在server 1上。指定夥伴端點:alter database itet set partner = ' TCP://server 2:5022 '-查看數據庫-到目前為止,這就是我們前面介紹的高級保護模式。可以實現數據完整性,但無法實現高可用性。所以我們還得繼續,也就是說我們可以停止見證服務器,但是無法實現自動故障轉移:在SERVER1上,指定見證服務器端點:ALTER DATABASE itet Set witness = n ' TCP://server 3:5022 '設置數據庫鏡像事務的安全級別:ALTER DATABASE ITET SET SAFETY FULL實驗結束。但是壹定要註意細節。最後,我們來看看數據庫鏡像的角色切換:也就是如何實現自動故障轉移:僅針對高可用模式安全=全測試:禁用主服務器的網卡,檢查庫的狀態,然後啟用。這裏我們知道如何實現數據庫鏡像,那麽用戶如何使用呢?客戶端都連接到主服務器上工作。然後,如果主體服務器不可用,就會導致用戶連接失敗。它怎麽知道自動連接鏡像服務器?這裏壹般使用ADO技術,如ASP.NET或微軟借用的連接工具。這裏我們用WINDOWS的集群功能來測試:SERVER1和SERVER2配置成WINDOWS集群:實驗結束!本文來自“達菲”博客。