簡要介紹:
鏡像高可用: 使用3臺數據庫服務器,分別為主數據庫,鏡像數據庫,見證數據庫.通過見證數據庫監控主備數據庫故障情況,自動進行故障轉移
主數據庫:提供對外訪問
鏡像數據庫:主數據庫的備機,支持故障轉移
見證數據庫:監控主 鏡像數據庫故障情況,自動進行故障轉移
程序如何判斷現在哪臺數據庫提供服務:(針對sqlserver jdbc驅動)
當驅動連接上主數據庫A時,會緩存A的partner數據庫B到本地.
當A發生故障時,會嘗試訪問B(在超時時間內會多次嘗試)
連上B時, 此時B將作為主數據庫,驅動將緩存B的partner數據庫A到本地(A B互為partner)
當第一次連接數據庫時,如果主數據庫連接失敗,由於尚未連上數據庫,所以本地沒有緩存partner數據庫 此時就會發生故障
為了避免4的情況 驅動程序支持我們在jdbcUrl中提供一個failoverPartner作為partner.
注意:當failoverPartner只在第一次連接數據庫時有作用,當連上數據庫後會緩存partner數據庫 並覆蓋failoverPartner
jdbc參考例子
高可用步驟:
(儘量在一個dns域名下 ,計算機名一定要不同!)
配置目標數據庫為完整恢復模式(屬性-選項-恢復模式-完整)
(3臺機子 包括連接客戶端)配置hosts,防火牆開啟端口出`入站
sqlserver配置管理器 開啟TCP/IP功能
數據庫方面-外圍應用服務器 開啟RemoteDacEnabled
主數據庫 完整備份 事務日誌備份
鏡像數據庫 還原 (RESTORE WITH NORECOVER)
創建證書 用於其他機子登陸 配置登陸賬戶
測試 手動故障轉移
=====創建證書 端點 導出證書=============
USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '!szkj1234567';
USE master
GO
CREATE CERTIFICATE Host_A_Cert
WITH Subject = 'Host_A Certificate',
Expiry_Date = '2099-1-1'; --過期日期
/*創建端點*/
IF NOT EXISTS ( SELECT 1
FROM sys.database_mirroring_endpoints )
BEGIN
CREATE ENDPOINT site 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
BACKUP CERTIFICATE Host_A_Cert
TO FILE = 'e:\Host_A_Cert.cer';
======導入證書=================
CREATE LOGIN Host_B_Login WITH PASSWORD = '!szkj1234567';
CREATE USER Host_B_User For Login Host_B_Login;
CREATE CERTIFICATE Host_B_Cert
AUTHORIZATION Host_B_User
FROM FILE = 'e:\Host_A_Cert.cer';
/*賦予connect權限*/
GRANT CONNECT ON ENDPOINT::site TO [Host_B_Login];
/*設置partner(鏡像必須處於正在還原狀態)*/
ALTER DATABASE test
SET PARTNER = 'TCP://WIN-75.airportsz.com:5022';
GO
======反向過程=================
/*
--刪除主密鑰
USE master;
DROP MASTER KEY
--刪除證書
USE master;
DROP CERTIFICATE HOST_A_cert
DROP CERTIFICATE HOST__cert
--刪除端點
drop endpoint site
---取消正在還原狀態
alter database db_name set partner off;
restore database db_name with recovery;
---刪除登陸賬戶 用戶 證書
drop certificate Host_B_Cert
drop login Host_B_Login
drop user Host_B_User
*/
USE master;
ALTER DATABASE test SET PARTNER RESUME; --恢復鏡像
ALTER DATABASE test SET PARTNER FAILOVER; --切換主備