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