第三篇——第二部分——第四文 配置SQL Server镜像——非域环境
本文為非域環境搭建鏡像演示,對于域環境搭建,可參照上文:http://blog.csdn.net/dba_huangzj/article/details/28904503? 原文出處:http://blog.csdn.net/dba_huangzj/article/details/27652857
前面已經演示了域環境下的鏡像搭建,本文將使用非域環境來搭建鏡像,同樣,先按照不帶見證服務器的高安全模式(同步)的方式搭建,然后 演示異步模式,最后會演示帶有見證服務器的高安全模式。
準備條件
服務器
| 服務器角色 | 機器名/實例名 | 版本 | IP |
| 主體服務器 | RepA | Windows Server 2008R2 英文x64 | 192.168.1.2 |
| 鏡像服務器 | RepB | Windows Server 2008R2 英文x64 | 192.168.1.3 |
| 見證服務器 | Win7 | Win7 企業版 | 192.168.1.4 |
?
注:Rep是Replication(復制)的縮寫,RepA和RepB一開始是搭建來做復制演示,本文借用這3臺服務器。
SQL Server
均使用SQL Server 2008 R2 企業版 英文 X64
演示數據庫
AdventureWorks2008R2
?
第一步:檢查環境
?
由于在非域環境內,所以需要做的檢查相對來說多很多,下面按照演示環境,逐個測試下面的條件:
Windows賬號:
搭建鏡像中,涉及Windows賬號的主要是在共享文件夾中,非域環境下需要證書來搭建鏡像,另外對于小庫,一般使用備份還原的方式,也就是說,需要把主體數據庫上的備份文件傳輸到鏡像服務器上,這些都需要用到Windows賬號操作共享文件夾。本文為了演示方便,使用了Administrator作為Windows的賬號,作為最佳實踐,建議真正搭建時使用專用的Windows賬號,并且保證有足夠的權限。
網絡是否聯通,并且端口可用:
非單機下的高可用都嚴重依賴網絡,網絡不通,一切都白搭。所以首先要確保網絡是能互訪的。下面測試一下本例中使用的主體服務器和鏡像服務器是否能互訪:
在RepA上ping RepB(本例IP地址192.168.1.3)
?
在RepB上ping RepA(本例IP地址192.168.1.2)
?
可見是能ping通的,為了方便,本例已關閉防火墻,所以端口問題不需要檢查,如果在生產環境,就需要和網絡管理員確認端口是否已經開啟。檢查端口可以用Telnet命令。如果輸入Telnet后出現下面的錯誤:英文:‘telnet’ is not recognized as an internal or external command, operable program or batch file.
中文:'telnet' 不是內部或外部命令,也不是可運行的程序或批處理文件。
可以在“開始”→“控制面板”→“程序”,“在程序和功能”找到并點擊“打開或關閉Windows功能”進入Windows 功能設置對話框。找到并勾選“Telnet客戶端”和“Telnet服務器”,最后“確定”。依據版本不同,開啟方式也會不同,具體版本請自行查找搜索引擎的方案。
主體服務器和鏡像服務器的磁盤配置是否正確:
在正式環境中,往往不會只有一個磁盤,本例由于實體機的資源限制,所以只保留系統盤,即C盤做演示。下面先檢查主體服務器(RepA)上演示庫(AdventureWorks2008R2)的數據文件和日志文件所在的盤符和目錄:
USE master go SELECT physical_name--物理文件路徑 FROM sys.master_files WHERE database_id = DB_ID('AdventureWorks2008R2')
本例結果如下:
接下來到鏡像服務器,也就是RepB上檢查是否存在這個盤符和目錄,如果不存在,要手動創建。下面是手動創建后的文件夾:
要注意,后續還原的時候,要檢查還原時文件路徑是否也指向相同的目錄。文件名也要一致。
SQL Server版本、補丁是否滿足鏡像要求:
本例使用相同的安裝文件,且均為2008R2(OS和SQL),并且沒有聯網更新,所以基本上可以確保版本和補丁一致。如果是正式環境,需要考慮,雖然從2005 SP1開始就支持鏡像,但是真正完整支持鏡像功能的還是從2005 SP2開始,另外除了SQL Server版本之外,Windows 的版本、補丁也要檢查,雖然沒有很確切指定OS也必須完全一致,但是一致的版本會比較少異常。
SQL Server數據庫的恢復模式、兼容級別:
檢查恢復模式和兼容級別,可以使用下面的語句實現:
USE master go SELECT name [數據庫名] , recovery_model_desc [恢復模式] , CASE WHEN [compatibility_level] = 90 THEN '2005' WHEN [compatibility_level] = 100 THEN '2008' WHEN [compatibility_level] > 100 THEN '2008+' ELSE '2000 or lower version' END [兼容級別] FROM sys.databases WHERE name = 'AdventureWorks2008R2'
在本例中,演示庫為簡單模式,所以用SSMS或者命令修改:
SSMS修改:
T-SQL修改:
USE [master] GO ALTER DATABASE [AdventureWorks2008R2] SET RECOVERY FULL WITH NO_WAIT GO
本人建議使用T-SQL修改,因為在服務器比較繁忙的時候,使用圖形化界面操作會很慢甚至超時。并且一個DBA應該會使用這些T-SQL命令。否則就太不專業了。
再次執行檢查腳本,可見恢復模式已經變回了Full:
SQL Server上是否有常規的備份作業,特別是日志備份:
這一步就不做演示了,打開SQL Server Agent即可檢查,另外搭建鏡像的人應該具有會看是否有常規備份的能力。
主體服務器和鏡像服務器的SQL Server能否互通:
在前面的第二步中,主要是檢查OS的網絡,但是OS能連通不代表SQL Server能連通,所以有必要檢查SQL Server是否能互聯。方法很簡單,分別打開SSMS,并且輸入伙伴服務器的SQL Server IP/實例名。本例先使用SA來檢查:
在RepA上連接RepB:
在RepB上連接RepA:
?
主體服務器和鏡像服務器中是否有共享文件夾:
前面說過,對非域環境下,需要使用證書來搭建鏡像,另外需要對備份文件進行傳輸,這些都會使用到共享文件夾,當然可以用別的方式實現,不過共享文件夾可能是最為簡單的方式。本例中,我將在主體服務器(RepA)上建立一個共享文件夾,以便RepB能訪問。不過如果條件允許,我更建議在有容錯能力的磁盤上(比如RAID、SAN等)創建共享文件夾,這樣即使主體服務器崩潰,也不至于影響鏡像服務器對共享文件夾的操作。
現在來簡單操作一下:
創建文件夾:
授予Everyone讀寫權限:
再次提醒,針對正式環境,強烈建議使用專用賬號,并且適當控制權限,比如對文件夾在搭建過程中允許完全控制,但是在正式運行時只允許“讀”操作等。
搭建成功:
檢查是否能訪問:
這一步可以在RepB中,輸入UNC路徑,如本例的:\\RepA\ShareFolders
到目前為止,準備工作已經完畢。下面開始第二步。
?
第二步:使用證書配置鏡像,并備份還原數據庫
在這一步中,我們將做兩件事,第一件是使用證書來配置鏡像,第二件是備份還原數據庫。在非域環境下,必須使用證書來搭建鏡像,所以我把搭建證書放在第一步。有些資料上會把備份還原操作放在證書搭建之前,但是根據個人經驗,當磁盤IO、網絡性能不佳的時候,備份、傳輸、還原都會浪費大量的時間(個人操作過2個小時),并且期間服務器幾乎不能操作。這種時候,我會選擇先搭建好,再還原,然后馬上進行同步。
?
創建證書:
如果服務器使用Local System作為SQL Server服務賬號,就需要使用證書授權。證書授權同時也可以在你的服務器不能通過其他服務器的賬號訪問對方服務器或者你不想授權給Windows登錄時使用。
使用證書搭建鏡像的步驟如下:
Step 1:創建數據庫主密鑰
主密鑰的用處在這里是用于加密證書,當然主密鑰不僅僅只有這個作用。對數據庫主密鑰的密碼及存儲保護要小心,這是實力級別的對象,影響面非常廣。可以使用下面語句來創建:
USE master GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$w0rd';/* --刪除主密鑰 USE master; DROP MASTER KEY */
使用相同方式在鏡像服務器創建數據庫主密鑰。
Step 2:創建證書,并用主密鑰加密
創建證書時,默認在創建日期開始一年后過期,所以針對證書的創建,要注意其過期時間。下面是在“主體服務器”上創建HOST_A_cert證書的創建
USE master GO CREATE CERTIFICATE Host_A_Cert WITH Subject = 'Host_A Certificate', Expiry_Date = '2015-1-1'; --過期日期/* --刪除證書 USE master; DROP CERTIFICATE HOST_A_cert */
使用相同的方法在鏡像服務器上實現對HOST_B_cert證書的創建
Step 3:創建端點
可以使用下面的代碼在主體服務器中創建端點,并且指定使用5022,端口,端口在鏡像配置過程中不強制使用特定端口(被占用或者特定端口如1433除外)。
--使用Host_A_Cert證書創建端點 IF NOT EXISTS ( SELECT 1 FROM sys.database_mirroring_endpoints ) BEGIN CREATE ENDPOINT [DatabaseMirroring] STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE Host_A_Cert, ENCRYPTION = REQUIRED Algorithm AES, ROLE = ALL ); END
在鏡像服務器對證書名稍作修改,創建鏡像服務器的端點。
Step 4:備份證書
備份證書的目的是發送到別的服務器并導入證書,以便別的服務器能通過證書訪問這臺服務器(主體服務器)。
BACKUP CERTIFICATE Host_A_Cert TO FILE = 'C:\ShareFolders\Host_A_Cert.cer';?
同理,在鏡像服務器上重復一次,注意證書名和路徑。備份之后可以在目標文件夾上看到有一個cer文件:
這里有個建議,分別在RepA和RepB本地創建一個單獨的文件夾Certifications,然后用來存儲本服務器和伙伴服務器的證書,證書一直存放在共享文件夾并不合理。本例分別在本機的C盤上創建一個Certifications的文件夾并存放所有的證書,如圖:
Step 5:創建登錄賬號
針對每個服務器單獨創建一個服務器登錄賬號,這里只需要創建一個登錄給鏡像服務器即可:
CREATE LOGIN Host_B_Login WITH PASSWORD = 'Pa$$w0rd';
同理,在鏡像服務器上創建Host_A_Login給主體服務器。
Step 6:創建用戶,并映射到Step 5中創建的登錄賬號中
在主體服務器上運行:
CREATE USER Host_B_User For Login Host_B_Login;
同理在鏡像服務器也創建。
Step 7:使用證書授權用戶
創建一個新的證書,并使用從伙伴服務器中復制過來的證書導入,然后映射step 6中的賬號到這個新證書上。
CREATE CERTIFICATE Host_B_Cert AUTHORIZATION Host_B_User FROM FILE = 'C:\Certifications\Host_B_Cert.cer';
注意鏡像服務器上也同樣。
Step 8:把Step 5中的登錄賬號授權訪問端口
GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [Host_B_Login];鏡像服務器也一樣。
到此為止,配置鏡像的步驟已經完畢,后續會給出盡可能自動化的配置腳本。
備份還原數據庫:
這一步,把主體服務器(RepA)上的演示數據庫備份并還原到RepB上進行初始化操作:
Step 1:完整備份:
Step 2:在鏡像服務器(RepB)上還原數據庫,并使用Nonrecovery方式:
注意路徑和還原的文件名:
Step 3:備份及還原日志:
同樣以Nonrecovery方式還原:
第三步:啟動鏡像
前面兩步主要是對鏡像的配置準備,下面開始正式啟動鏡像:
Step 1:右鍵主體服務器的主體數據庫,選擇【鏡像】
Step 2:選擇【配置鏡像】:這一步我們主要是獲取主體服務器的網絡地址,看下圖的紅框部分
Step 3:在鏡像服務器(RepB)上執行下面腳本:
注意順序,先要在RepB上執行
ALTER DATABASE AdventureWorks2008R2 SET PARTNER = 'TCP://RepA:5022'; GOStep 4:在主體服務器(RepA)執行下面腳本,把RepB添加成RepA的伙伴
ALTER DATABASE AdventureWorks2008R2 SET PARTNER = 'TCP://RepB:5022'; GOStep 5:切換模式
Step 3~4中的搭建是使用高安全模式搭建,如果希望使用高性能模式(再次提醒,本例沒有使用見證服務器,所以不能使用自動故障轉移的高安全模式),可以使用下面腳本在RepA上實現:
ALTER DATABASE AdventureWorks2008R2 SET PARTNER SAFETY OFF GO再次打開,可見運行模式已經是高性能模式:
Step 6:驗證故障轉移
下面再用語句來試一下是否能故障轉移,先檢查兩個庫的狀態,這里用個小技巧,使用 【注冊服務器】,如圖:
然后新建注冊:
同理把RepB也加進去:
然后打開一個查詢窗口,用于一次性查詢兩個服務器,前提是要有足夠的權限,本例用sa來連接:
注意下圖的粉紅色的部分,如果出現(1/2)這種情況,表示有一臺服務器不能連接成功:
結果如下:我們只關注一小部分內容:
現在切換回RepA的查詢窗口,然后輸入:
ALTER DATABASE AdventureWorks2008R2 SET PARTNER FAILOVER;--在主體服務器上執行然后到【注冊管理器】中再查詢,可以看到現在RepB已經是Principal,也就是主體服務器了:
讀者可以用GUI界面操作,這里就不做過多演示。
帶有見證服務器的非域環境鏡像配置
下面演示如何把見證服務器加進鏡像環境中,首先,我們保持前面的配置,即搭建好主體和鏡像服務器,然后我們使用一個Win7的系統來做見證服務器,上面裝有SQL Server 2008 R2企業版,可以使用Express或者工作組版來做見證服務器。
Step 1:驗證三臺服務器的網絡互通,這里就不做累贅,讀者可以參考前面的方法檢查。
Step 2:根據前面的步驟,在見證服務器上創建主密鑰、證書等:
--創建主密鑰 USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$w0rd'; --演示所需,否則不要設置這么簡單的密碼 GO /* --刪除主密鑰 USE master; DROP MASTER KEY */ USE master; CREATE CERTIFICATE HOST_C_cert WITH SUBJECT = 'HOST_C certificate'--在Winess實例上創建證書,命名為HOST_C_cert,這個選項是描述證書 ,EXPIRY_DATE ='2015-6-5' ;--證書過期時間,可以適當設置長一點,具體按實際需要設置 GO /* --刪除證書 USE master; DROP CERTIFICATE HOST_C_cert */ CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORT=5022 --使用5022端口,這個端口可以改成未被使用的端口,但是鏡像過程中的所有合作者都應該使用相同的端口 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_C_cert --使用證書來授權端點 , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL --表示這個端點可以作為任何角色,包括主服務器、鏡像服務器、見證服務器。具體可看聯機叢書。 ); GO /* --刪除鏡像端點 IF EXISTS (SELECT * FROM sys.endpoints e WHERE e.name = N'Endpoint_Mirroring') DROP ENDPOINT [Endpoint_Mirroring] GO */ BACKUP CERTIFICATE HOST_C_cert TO FILE = 'C:\Certifications\HOST_C_cert.cer'; GO確保RepA、RepB、Win7這三臺機上都有主體、鏡像和見證所產生的3個證書。
?
在見證服務器上為主體、鏡像服務器創建以證書為驗證的賬號、用戶名及端點。
--在Witness實例上創建一個登錄名給Principal實例 USE master; CREATE LOGIN HOST_A_login WITH PASSWORD = 'Pa$$w0rd'; GO --創建一個用于給這個登錄名 CREATE USER HOST_A_user FOR LOGIN HOST_A_login; GO --讓該帳號使用證書授權 CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'C:\Certifications\HOST_A_cert.cer' GO --授予這個新賬號連接端點的權限 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO HOST_A_login; GO /* --刪除賬號 DROP LOGIN HOST_A_user */ --在Witness實例上創建一個登錄名給Mirror實例 USE master; CREATE LOGIN HOST_B_login WITH PASSWORD = 'Pa$$w0rd'; GO --創建一個用于給這個登錄名 CREATE USER HOST_B_user FOR LOGIN HOST_B_login; GO --讓該帳號使用證書授權 CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'C:\Certifications\HOST_B_cert.cer' GO --授予這個新賬號連接端點的權限 GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO HOST_B_login; GO /* --刪除賬號 DROP LOGIN HOST_B_user */分別在RepA和RepB中執行下面語句,為見證服務器創建連接端點的權限:
USE master; CREATE LOGIN HOST_C_login WITH PASSWORD = 'Pa$$w0rd'; GO --創建一個用于給這個登錄名 CREATE USER HOST_C_user FOR LOGIN HOST_C_login; GO --讓該帳號使用證書授權 CREATE CERTIFICATE HOST_C_cert AUTHORIZATION HOST_C_user FROM FILE = 'C:\Certifications\HOST_C_cert.cer' GO --授予這個新賬號連接端點的權限 GRANT CONNECT ON ENDPOINT::DatabaseMirroring TO HOST_C_login; GO在RepB中應該存在這兩個登錄,而在RepA中應該存在Host_B_Login和Host_C_Login兩個賬戶:
然后在主體服務器上執行下面語句,加入見證服務器:
ALTER DATABASE AdventureWorks2008R2 SET WITNESS = 'TCP://win7:5022'完畢之后,打開RepA的鏡像配置,可以見到見證服務器已經加入:
我們可以測試一下,把RepA的SQL Server服務關閉,實現主體服務器的“故障”,看是否RepB能自動切換:
第一步,檢查RepB的狀態:
第二步,關閉RepA的服務:
第三步,刷新RepB的狀態:
可見已經切換過去,并且狀態為Disconnected,注意,即使此時RepA再次聯機,也不會自動切換成為主體服務器,需要手動切換,這部分讀者可以自行測試。把RepA再次啟動之后,可以對比鏡像的狀態,從Disconnected變成了Synchronized。
到處為止,非域環境下的鏡像配置已經完畢。
總結
以上是生活随笔為你收集整理的第三篇——第二部分——第四文 配置SQL Server镜像——非域环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVS 快速入门指南
- 下一篇: 小项目之项目分析