第三篇——第二部分——第四文 配置SQL Server鏡像——非域環境

原文: 第三篇——第二部分——第四文 配置SQL Server鏡像——非域環境

本文爲非域環境搭建鏡像演示,對於域環境搭建,可參照上文:http://blog.csdn.net/dba_huangzj/article/details/28904503 
原文出處:http://blog.csdn.net/dba_huangzj/article/details/27652857

前面已經演示了域環境下的鏡像搭建,本文將使用非域環境來搭建鏡像,一樣,先按照不帶見證服務器的高安全模式(同步)的方式搭建,而後 演示異步模式,最後會演示帶有見證服務器的高安全模式。sql

準備條件

服務器

服務器角色 機器名/實例名 版本 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服務器

 

第一步:檢查環境

 

因爲在非域環境內,因此須要作的檢查相對來講多不少,下面按照演示環境,逐個測試下面的條件:網絡

  1. Windows 帳號。
  2. 網絡是否能聯通,而且端口可用。
  3. 主體服務器和鏡像服務器的磁盤配置是否正確。
  4. SQL Server版本、補丁是否知足鏡像要求。
  5. SQL Server數據庫的恢復模式、兼容級別。
  6. SQL Server上是否有常規的備份做業,特別是日誌備份。
  7. 主體服務器和鏡像服務器的SQL Server可否互通。
  8. 主體服務器和鏡像服務器中是否有共享文件夾。

Windows帳號:

搭建鏡像中,涉及Windows帳號的主要是在共享文件夾中,非域環境下須要證書來搭建鏡像,另外對於小庫,通常使用備份還原的方式,也就是說,須要把主體數據庫上的備份文件傳輸到鏡像服務器上,這些都須要用到Windows帳號操做共享文件夾。本文爲了演示方便,使用了Administrator做爲Windows的帳號,做爲最佳實踐,建議真正搭建時使用專用的Windows帳號,而且保證有足夠的權限。異步

網絡是否聯通,而且端口可用:

非單機下的高可用都嚴重依賴網絡,網絡不通,一切都白搭。因此首先要確保網絡是能互訪的。下面測試一下本例中使用的主體服務器和鏡像服務器是否能互訪:性能

在RepA上ping RepB(本例IP地址192.168.1.3)測試

 image

在RepB上ping RepA(本例IP地址192.168.1.2)搜索引擎

 image

可見是能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')


本例結果以下:


image


接下來到鏡像服務器,也就是RepB上檢查是否存在這個盤符和目錄,若是不存在,要手動建立。下面是手動建立後的文件夾:


image


要注意,後續還原的時候,要檢查還原時文件路徑是否也指向相同的目錄。文件名也要一致。

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'


image


在本例中,演示庫爲簡單模式,因此用SSMS或者命令修改:

SSMS修改:


image


T-SQL修改:

USE [master] 
GO 
ALTER DATABASE [AdventureWorks2008R2] SET RECOVERY FULL WITH NO_WAIT 
GO


本人建議使用T-SQL修改,由於在服務器比較繁忙的時候,使用圖形化界面操做會很慢甚至超時。而且一個DBA應該會使用這些T-SQL命令。不然就太不專業了。

再次執行檢查腳本,可見恢復模式已經變回了Full:


image

SQL Server上是否有常規的備份做業,特別是日誌備份:

這一步就不作演示了,打開SQL Server Agent便可檢查,另外搭建鏡像的人應該具備會看是否有常規備份的能力。

主體服務器和鏡像服務器的SQL Server可否互通:

在前面的第二步中,主要是檢查OS的網絡,可是OS能連通不表明SQL Server能連通,因此有必要檢查SQL Server是否能互聯。方法很簡單,分別打開SSMS,而且輸入夥伴服務器的SQL Server IP/實例名。本例先使用SA來檢查:

在RepA上鍊接RepB:

image


在RepB上鍊接RepA:

image

 

主體服務器和鏡像服務器中是否有共享文件夾:

前面說過,對非域環境下,須要使用證書來搭建鏡像,另外須要對備份文件進行傳輸,這些都會使用到共享文件夾,固然能夠用別的方式實現,不過共享文件夾多是最爲簡單的方式。本例中,我將在主體服務器(RepA)上創建一個共享文件夾,以便RepB能訪問。不過若是條件容許,我更建議在有容錯能力的磁盤上(好比RAID、SAN等)建立共享文件夾,這樣即便主體服務器崩潰,也不至於影響鏡像服務器對共享文件夾的操做。

如今來簡單操做一下:

建立文件夾:

image


授予Everyone讀寫權限:

再次提醒,針對正式環境,強烈建議使用專用帳號,而且適當控制權限,好比對文件夾在搭建過程當中容許徹底控制,可是在正式運行時只容許「讀」操做等。


image

搭建成功:

image

檢查是否能訪問:

這一步能夠在RepB中,輸入UNC路徑,如本例的:\\RepA\ShareFolders


image

到目前爲止,準備工做已經完畢。下面開始第二步。

 

第二步:使用證書配置鏡像,並備份還原數據庫

在這一步中,咱們將作兩件事,第一件是使用證書來配置鏡像,第二件是備份還原數據庫。在非域環境下,必須使用證書來搭建鏡像,因此我把搭建證書放在第一步。有些資料上會把備份還原操做放在證書搭建以前,可是根據我的經驗,當磁盤IO、網絡性能不佳的時候,備份、傳輸、還原都會浪費大量的時間(我的操做過2個小時),而且期間服務器幾乎不能操做。這種時候,我會選擇先搭建好,再還原,而後立刻進行同步。

 

建立證書:

若是服務器使用Local System做爲SQL Server服務帳號,就須要使用證書受權。證書受權同時也能夠在你的服務器不能經過其餘服務器的帳號訪問對方服務器或者你不想受權給Windows登陸時使用。

使用證書搭建鏡像的步驟以下:

  1. 建立數據庫主密鑰(若是主密鑰不存在)。
  2. 在Master數據庫中建立證書並用主密鑰加密。
  3. 使用證書受權建立端點(endpoint)。
  4. 備份證書成爲證書文件。
  5. 在服務器上建立登陸帳號,用於提供其餘實例訪問。
  6. 在master庫中建立用戶,並映射到上一步的登陸帳號中。
  7. 把證書受權給這些用戶。
  8. 在端點上受權。
  9. 設置主體服務器的鏡像夥伴。
  10. 設置鏡像服務器的主體夥伴。
  11. 配置見證服務器。

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文件:


image


這裏有個建議,分別在RepA和RepB本地建立一個單獨的文件夾Certifications,而後用來存儲本服務器和夥伴服務器的證書,證書一直存放在共享文件夾並不合理。本例分別在本機的C盤上建立一個Certifications的文件夾並存放全部的證書,如圖:


image

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上進行初始化操做:

  1. 完整備份AdventureWork2008R2到共享文件夾C:\ShareFolders
  2. 複製備份文件到鏡像服務器(若是權限足夠,直接使用共享路徑來還原便可)
  3. 以Nonrecovery選項還原AdventureWork2008R2到鏡像服務器(RepB)
  4. 日誌備份AdventureWork2008R2,並一樣方式還原到RepB

Step 1:完整備份:

image


Step 2:在鏡像服務器(RepB)上還原數據庫,並使用Nonrecovery方式:

注意路徑和還原的文件名:

image


Step 3:備份及還原日誌:

一樣以Nonrecovery方式還原:

image

第三步:啓動鏡像

前面兩步主要是對鏡像的配置準備,下面開始正式啓動鏡像:

Step 1:右鍵主體服務器的主體數據庫,選擇【鏡像】

image


Step 2:選擇【配置鏡像】:這一步咱們主要是獲取主體服務器的網絡地址,看下圖的紅框部分

image

Step 3:在鏡像服務器(RepB)上執行下面腳本:

注意順序,先要在RepB上執行

ALTER DATABASE AdventureWorks2008R2 
    SET PARTNER = 'TCP://RepA:5022';
GO


Step 4:在主體服務器(RepA)執行下面腳本,把RepB添加成RepA的夥伴

ALTER DATABASE AdventureWorks2008R2 
    SET PARTNER = 'TCP://RepB:5022';
GO


 執行後,能夠看到RepA上的鏡像配置:
image 

Step 5:切換模式

Step 3~4中的搭建是使用高安全模式搭建,若是但願使用高性能模式(再次提醒,本例沒有使用見證服務器,因此不能使用自動故障轉移的高安全模式),可使用下面腳本在RepA上實現:

ALTER DATABASE AdventureWorks2008R2 
    SET PARTNER SAFETY OFF
GO


再次打開,可見運行模式已是高性能模式:


image

Step 6:驗證故障轉移

下面再用語句來試一下是否能故障轉移,先檢查兩個庫的狀態,這裏用個小技巧,使用 【註冊服務器】,如圖:


image


而後新建註冊:

image

image 

同理把RepB也加進去:

image 

而後打開一個查詢窗口,用於一次性查詢兩個服務器,前提是要有足夠的權限,本例用sa來鏈接:

image 

注意下圖的粉紅色的部分,若是出現(1/2)這種狀況,表示有一臺服務器不能鏈接成功:

image 

結果以下:咱們只關注一小部份內容:

image 

如今切換回RepA的查詢窗口,而後輸入:

ALTER DATABASE AdventureWorks2008R2 SET PARTNER FAILOVER;--在主體服務器上執行


而後到【註冊管理器】中再查詢,能夠看到如今RepB已是Principal,也就是主體服務器了:


image 

讀者能夠用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兩個帳戶:


image


而後在主體服務器上執行下面語句,加入見證服務器:

ALTER DATABASE AdventureWorks2008R2   SET WITNESS = 'TCP://win7:5022'


完畢以後,打開RepA的鏡像配置,能夠見到見證服務器已經加入:


image


咱們能夠測試一下,把RepA的SQL Server服務關閉,實現主體服務器的「故障」,看是否RepB能自動切換:

第一步,檢查RepB的狀態:

image


第二步,關閉RepA的服務:

image

第三步,刷新RepB的狀態:

image


可見已經切換過去,而且狀態爲Disconnected,注意,即便此時RepA再次聯機,也不會自動切換成爲主體服務器,須要手動切換,這部分讀者能夠自行測試。把RepA再次啓動以後,能夠對比鏡像的狀態,從Disconnected變成了Synchronized。


image


處處爲止,非域環境下的鏡像配置已經完畢。

相關文章
相關標籤/搜索