從0開始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

這一篇是從0開始搭建SQL Server AlwaysOn 的第三篇,這一篇才真正開始搭建AlwaysOn,前兩篇是爲搭建AlwaysOn 作準備的html

 


步驟node

這一篇依然使用step by step的方式介紹怎麼搭建AlwaysOnsql

 

請先使用本地用戶Administrator登陸這兩個集羣節點並執行下面的操做,先不要用域用戶DCADMIN登陸shell

 

一、兩個集羣節點都需先安裝.NET Framework 3.5(在Windows Server 2012 R2中使用添加功能來安裝)。數據庫

 

二、各個集羣節點本地都要準備好相關軟件,在各個節點上獨立安裝SQL Server 2012(不能使用羣集方式安裝),保證各個節點中使用相同的安裝目錄結構和排序規則!服務器

 

 選擇全新SQL Server獨立安裝,不要選擇新的SQL Server故障轉移集羣安裝網絡

 

至於安裝過程,默認下一步下一步就能夠了,跟單機安裝SQL Server沒有區別,這裏就忽略安裝過程了tcp

注意:由於本人的安裝包已經自帶SP1補丁包,爲了後續避免踩坑,若是沒有安裝SP1或以上補丁包的,請先安裝sqlserver

 

 

注意:若是一開始使用域用戶DCADMIN來登陸集羣節點機器,並安裝SQL Server的時候會遇到一個坑,SQL Server安裝程序會鏈接故障轉移集羣,可是實際上單機安裝SQL Server根本不須要鏈接故障轉移集羣測試

本人排查了好久都找不到緣由,爲何SQL Server安裝程序會鏈接故障轉移集羣,下面是SQL Server安裝日誌

若是一開始就使用集羣節點本地用戶Administrator登陸來安裝SQL Server就不會踩到這個坑

 

 

三、註銷集羣節點計算機,而後使用域用戶DCADMIN登陸,而後設置SQL Server的啓動帳戶爲域用戶DCADMIN

打開服務管理器,先修改SQL代理的啓動帳戶爲域用戶DCADMIN,而後再修改SQL 引擎的啓動帳戶爲域用戶DCADMIN

 

點擊「位置」,修改查找位置,選中abc.com

點擊「高級」

點擊「當即查找」,選中DCADMIN

點擊「肯定」

 

輸入域用戶DCADMIN的密碼

 

重啓一下SQL代理服務

 重啓以後能夠看到登陸用戶爲DCADMIN@abc.com

 

一樣,SQL引擎服務也須要一樣的設置

 

這樣,SQL引擎服務和SQL代理服務都用域用戶DCADMIN啓動

另外一個集羣節點的SQL Server也須要作一樣的操做

 

注意:在集羣節點脫離域以後,SQL引擎服務和SQL代理服務都要用本地服務賬號來啓動,不能再用域用戶來啓動

 

 

四、將DCADMIN域用戶加入到兩個集羣節點的SQL Server登陸用戶中,服務器角色選擇sysadmin

先用sa登陸SQL Server

添加登陸用戶,跟SQL 服務添加啓動帳戶的步驟同樣,將DCADMIN域用戶添加爲登陸用戶

 

 給予sysadmin權限

兩個集羣節點均可以用DCADMIN域用戶來登陸SQL Server

 

 

 

五、回到SQL Server配置管理器,啓用AlwaysOn可用性組

注意:集羣節點必定要能進行通訊,若是集羣節點之間斷開通訊,那麼啓用AlwaysOn的時候會報錯

 

重啓SQL Server

若是AlwaysOn啓用成功,在服務器屬性裏能夠看到啓用HADR爲True

 

六、在其中一個集羣節點的SQL Server中驗證各節點的投票數 ,在其中一個集羣節點的SQL Server上執行
使用下面SQL語句

SELECT * FROM  sys.dm_hadr_cluster_members;

SELECT * FROM SYS.[dm_hadr_cluster]

 

七、再次確保各節點已經關閉防火牆,若是防火牆沒有關閉,那麼在建立可用性組的時候會彈出下面錯誤

沒法將數據庫「test」聯接到可用性副本「xxx」的可用性組「xx」

針對主副本的鏈接未處於活動狀態。沒法處理該命令(錯誤:35250)

 

 

 

八、咱們使用自行初始化數據庫的方式,因此這一步須要新建一個測試庫和測試表並插入一些測試數據(這些動做就不演示了),而後對數據庫作一個完整備份 和 日誌備份

而後把完整備份文件和日誌備份文件搬到WIN-5PMSDHUI0KQ機器上依次進行還原,完整備份-》還原完整備份-》日誌備份-》還原日誌備份
腳本

複製代碼
--在win-7107jjj2bcc上執行
CREATE DATABASE [test]

USE [test]
CREATE TABLE [test1]([id] INT,[name] VARCHAR(100))
INSERT INTO [test1] SELECT 1,'test'
複製代碼
複製代碼
--在win-7107jjj2bcc上執行
DECLARE @CurrentTime VARCHAR(50), @FileName VARCHAR(200)
SET @CurrentTime = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120 ),'-','_'),' ','_'),':','')

        
--(test 數據庫完整備份)
SET @FileName = 'c:\DBBackup\test_FullBackup_' + @CurrentTime+'.bak'
BACKUP DATABASE [test]
TO DISK=@FileName WITH FORMAT ,COMPRESSION


  --(test 數據庫日誌備份) 
SET @FileName = 'c:\DBBackup\test_logBackup_' + @CurrentTime+'.bak'
BACKUP log [test]
TO DISK=@FileName WITH FORMAT ,COMPRESSION
複製代碼
複製代碼
--在WIN-5PMSDHUI0KQ上執行

USE [master]
RESTORE DATABASE [test] FROM  DISK = N'C:\DBBackup\test_FullBackup_2015_07_30_093949.bak' WITH  FILE = 1, 
MOVE N'test' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\test.mdf', 
MOVE N'test_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\test_log.ldf', 
NOUNLOAD,NORECOVERY,  REPLACE,  STATS = 5

GO





--注意必定要用NORECOVERY來還原備份
USE [master]
RESTORE DATABASE [test] FROM  DISK = N'C:\DBBackup\test_logBackup_2015_07_30_105949.bak' WITH  FILE = 1, 
NOUNLOAD,NORECOVERY,  REPLACE,  STATS = 5

GO
複製代碼

 

自行初始化數據庫的好處是:若是咱們的輔助副本是跨機房的咱們均可以控制初始化的時間,也就是備份和還原的時間,不須要SQL Server來幫咱們備份還原數據庫

在WIN-5PMSDHUI0KQ上還原日誌備份以後的樣子

 

 

九、在「Alwayson高可用性」節點上右鍵選擇「新建可用性組嚮導

注意:加入到AlwaysOn可用性組的數據庫必須符合下面要求

(1)數據庫的恢復模式必須是「完整」恢復模式

(2)數據庫已進行了一次完整備份

(3)須要是用戶庫,系統庫不能加入可用性組

(4)數據庫能夠讀寫,只讀庫不能加入到可用性組

(5)數據庫處於多用戶模式

(6)數據庫沒有使用AUTO_CLOSE

(7)不屬於任何其餘的可用性組

(8)數據庫沒有配置數據庫鏡像

一個可用性組最大支持100個數據庫

 

十、點擊「下一步」,輸入一個從未使用過的高可用性組名稱 testAG

 

 

十一、點擊下一步,選擇要添加的數據庫

 

十二、點擊「下一步」,使用添加副原本將其餘節點添加到可用性組中,並選擇自動故障轉移節點和同步提交節點,由於咱們只有兩個節點

咱們將輔助副本設置爲可讀,可以自動故障轉移,同步提交模式

1三、點擊「端點」tab頁面設置端點

注意:端點URL使用IP的方式,不要用FQDN長名的方式,由於服務器一般會有兩個網卡,一個public網卡,一個private網卡,端點建議使用private網卡地址

這樣在端點直接傳送的數據就會經由private網卡來傳送,使用TCP://test.abc.com:5022 這種FQDN長名的方式是不能保證端點數據經過private網卡來傳送

SQL Server服務帳戶使用域用戶DCADMIN來進行身份驗證,避免使用證書的方式

 

1四、「備份首選項」和「偵聽器」不須要設置,保持默認就行,可用性偵聽器咱們後面再添加,能夠直接點擊「下一步」

點擊「是」

 

1五、選擇初始數據同步,這裏選擇「僅聯接」模式

 

 

 1六、點擊「下一步」來驗證配置,對應偵聽器配置警告能夠忽略,後期來添加偵聽器

由於使用的是「僅聯接」數據庫初始化方式,驗證跳過像可用磁盤空間這樣的檢查

 

 

 

1七、點擊「下一步」來檢查並確認以前的配置信息,若無誤,點擊「完成」。另外,此處也可保存創建可用性組腳本,以便分步診斷故障之用。

 

 

 

1八、全部摘要均成功完成,顯示綠色對勾。若是出現黃色警告,則需進行進一步判斷是否成功。若出現紅色錯誤,表示AG建立不成功

注意:若是你們使用奇數集羣節點,而且仲裁配置使用的是節點多數,那麼在建立可用性組完畢的時候,WSFC仲裁投票配置會顯示警告

點擊警告連接會彈出下面的對話框,這個警告其實能夠不用理會

 

 

1九、查看服務器和數據庫的變化

主副本

數據庫變爲已同步

輔助副本

輔助副本這時候是可讀的,在主副本上對test1表作的更改都能同步到輔助副本上的test1表

 

再看一下故障轉移集羣管理器

可用性組變爲一個集羣角色

 

點擊顯示面板能夠顯示可用性面板

20、在建立可用性組後,在「可用性組偵聽器」上右鍵添加偵聽器來建立偵聽器,選擇靜態IP的網絡模式(儘可能不要選擇DHCP網絡模式),

輸入一個從未使用過的名稱(該名稱將被用來建立網絡名稱資源)和訪問端口

 

點擊肯定

 

建立成功

在域控的DNS管理器上會註冊一條A記錄

在AD裏的Computers容器裏會添加一個故障轉移集羣虛擬網絡名稱帳戶

 

在故障轉移集羣管理器裏的角色節點,能夠看到客戶端訪問名稱和IP地址,客戶端經過這個訪問名稱進行訪問數據庫

 

使用偵聽器名稱進行登陸SQL Server

 

固然也能夠用listener IP來鏈接SQL Server

 

 

在輔助副本添加登陸用戶,讓主副本上的登陸用戶也能夠讀取輔助副本數據
步驟1:查看主庫上該帳號的sid [test]爲庫名
SELECT * FROM [test]..sysusers
好比:dalogin 0x99AD266AFD26F841B3E49EF9633B0D4B

步驟2:在副本數據庫上建立對應帳號,其中 sid對應的值是主庫上所查到的sid的值
CREATE LOGIN [dalogin] WITH PASSWORD=N'xxxxxxx',
SID =0x99AD266AFD26F841B3E49EF9633B0D4B, DEFAULT_DATABASE=[test],
 CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

 

報表帳號設置
在主副本中,執行:
use 庫名
go
grant exec to 報表帳號鏈接所用的用戶 或grant exec on 存儲過程 to 報表帳號鏈接所用的用戶


可用性組的基本管理

注意:儘可能用SSMS的UI或TSQL語句來操做可用性組,不要用故障轉移集羣管理器來操做

 

故障轉移

首先使用 偵聽器名稱來登陸SQL Server,查看當前是在主副本是在哪一個機器

 

手動故障轉移

選中testAG這個可用性組,右鍵-》故障轉移

點擊「下一步」

點擊「下一步」

鏈接到 WIN-5PMSDHUIOKQ這臺輔助副本機器

點擊「完成」

開始進行故障轉移

再一次執行查詢

已經故障轉移到WIN-5PMSDHUIOKQ這臺機

查看一下testAG可用性組的屬性

 

執行下面SQL語句,將WIN-7107JJJ2BCC機器設置爲可讀副本

USE [master]
GO
ALTER AVAILABILITY GROUP [testAG]
MODIFY REPLICA ON N'WIN-7107JJJ2BCC' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL))
GO

 

執行下面SQL語句測試一下

在當前主副本執行

insert into test1 select 3, 'test3'

 

能夠看到數據已經同步過來WIN-7107JJJ2BCC機器,而且數據庫可讀

可讀輔助副本是隻讀的,若是要對它進行數據更改則會報錯

print 'servername: '+@@SERVERNAME 


insert into [test].[dbo].[test1] select 4, 'test4'

 

AlwaysOn相關視圖

複製代碼
--經過這兩個視圖能夠查詢AlwaysOn延遲
SELECT  b.replica_server_name ,
        a.*
FROM    sys.dm_hadr_database_replica_states a
        INNER JOIN sys.availability_replicas b ON a.replica_id = b.replica_id 

--可用性組所在Windows故障轉移集羣
SELECT * FROM sys.dm_hadr_cluster;
SELECT * FROM sys.dm_hadr_cluster_members ;
SELECT * FROM sys.dm_hadr_cluster_networks;
SELECT * FROM sys.dm_hadr_instance_node_map;
SELECT * FROM sys.dm_hadr_name_id_map

--可用性組
SELECT * FROM sys.availability_groups;
SELECT * FROM sys.availability_groups_cluster;
SELECT * FROM sys.dm_hadr_availability_group_states ;
SELECT * FROM sys.dm_hadr_automatic_seeding
SELECT * FROM sys.dm_hadr_physical_seeding_stats

--可用性副本
SELECT * FROM sys.availability_replicas;
SELECT * FROM sys.[availability_read_only_routing_lists]
SELECT * FROM sys.dm_hadr_availability_replica_cluster_nodes;
SELECT * FROM sys.[dm_hadr_availability_replica_cluster_states]
SELECT * FROM sys.[dm_hadr_availability_replica_states]

--可用性數據庫
SELECT * FROM sys.availability_databases_cluster;
SELECT * FROM sys.dm_hadr_database_replica_cluster_states;
SELECT * FROM sys.[dm_hadr_auto_page_repair]
SELECT * FROM sys.[dm_hadr_database_replica_states]

--可用性組listener
SELECT * FROM sys.availability_group_listener_ip_addresses;
SELECT * FROM sys.availability_group_listeners;
SELECT * FROM sys.dm_tcp_listener_states;



--添加只讀路由列表
ALTER AVAILABILITY GROUP [agtest2]
MODIFY REPLICA ON N'WIN-5PMSDHUI0KQ' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS= READ_ONLY));


ALTER AVAILABILITY GROUP [agtest2]
modify REPLICA ON N'WIN-5PMSDHUI0KQ' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://192.168.66.157:1433'))

ALTER AVAILABILITY GROUP [agtest2]
MODIFY REPLICA ON N'WIN-4AE61RVA6UV' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS= READ_ONLY));

ALTER AVAILABILITY GROUP [agtest2]
modify REPLICA ON N'WIN-4AE61RVA6UV' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://192.168.66.158:1433'))
複製代碼

 

 


總結

AlwaysOn搭建步驟就介紹到這裏,但願你們跟着我來體驗一下AlwaysOn的強大

 

一樣的,添加一個輔助副本的操做: 加域、加入故障轉移集羣、更改仲裁配置、添加輔助副本 

按照文章的來操做相信添加輔助副本也不難

 

還有一個就是遇到問題多看看SQL Server errorlog和WSFC的事件日誌

 

 

對於更多信息能夠參考《SQLSERVER2012實施與管理實戰指南》書本

地址: http://product.dangdang.com/1419881008.html

 

相關文章

http://www.cnblogs.com/stswordman/p/3821538.html

http://www.cnblogs.com/stswordman/p/3850570.html

http://www.cnblogs.com/stswordman/p/3936584.html

http://www.cnblogs.com/stswordman/p/3252549.html#3229105

http://blogs.msdn.com/b/psssql/archive/2012/09/07/how-it-works-sql-server-alwayson-lease-timeout.aspx

http://blogs.msdn.com/b/alwaysonpro/archive/2014/11/26/diagnose-unexpected-failover-or-availability-group-in-resolving-state.aspx

https://msdn.microsoft.com/zh-cn/library/ff878308%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396

http://www.bubuko.com/infodetail-930336.html  建立了一個弱事件,但它位於錯誤對象上 下載補丁解決 (https://www.microsoft.com/en-us/download/details.aspx?id=36468)

http://blogs.msdn.com/b/alwaysonpro/archive/2013/10/30/errors-while-trying-to-create-an-availability-group-listener.aspx  19471錯誤

建立偵聽器錯誤19471,19476 問題
http://blogs.msdn.com/b/alwaysonpro/archive/2013/10/30/errors-while-trying-to-create-an-availability-group-listener.aspx
http://blogs.msdn.com/b/alwaysonpro/archive/2014/03/25/create-listener-fails-with-message-the-wsfc-cluster-could-not-bring-the-network-name-resource-online.aspx

 

若有不對的地方,歡迎你們拍磚o(∩_∩)o 

 

2015-11-13補充

 

兩個節點的AlwaysOn ,用共享文件夾作見證磁盤

當自動故障切換的時候,有時候出現,輔助副本正在解析的現象,以前覺得是仲裁丟失(WSFC與文件共享見證失去聯繫),致使WSFC掛掉,後來發現緣由是WSFC控制面板裏的角色屬性裏面的最大故障數的問題而致使的

推薦將指定時段內的最大故障數設置爲10 

 

  View Code

 


2015-12-9補充

卸載集羣

一、先逐個逐出節點

二、銷燬集羣,集羣最後一個節點不能逐出只能銷燬集羣,有兩種方法,1用命令  2在界面上右鍵-》銷燬集羣

方法一:集羣node(隨便一個集羣node)上執行下面命令,不能在DC上執行,由於DC沒有安裝故障轉移集羣,sqltestdemo1爲集羣名,方法一刪除得完全一點

Get-Cluster sqltestdemo1 | Remove-Cluster -Force -CleanupAD

方法二:集羣-》更多操做-》銷燬集羣

三、銷燬集羣后在每一個集羣上的powershell裏運行下面命令,以清除一些垃圾

Clear-ClusterNode

 

四、在域控的AD用戶和計算機界面裏面把集羣虛擬名稱刪除掉

 

五、從新啓用和禁用alwayson,在alwayson的各個節點上都要操做一遍

 

 

刪除可用性組

一、刪除輔助副本

USE [master]
GO
ALTER AVAILABILITY GROUP [HAGroup01]
REMOVE REPLICA ON N'SQLSVR2';
GO

 

二、刪除可用性數據庫

USE [master]
GO
ALTER AVAILABILITY GROUP [HAGroup01]
REMOVE DATABASE [SQLDB02];
GO

 

 

三、刪除偵聽器

USE [master]
GO
ALTER AVAILABILITY GROUP [HAGroup01]
REMOVE LISTENER N'SQLAG01';
GO

 


四、刪除可用性組

USE [master]
GO
DROP AVAILABILITY GROUP [HAGroup01];
GO

 

五、在域控的AD用戶和計算機界面裏面把偵聽器虛擬名稱刪除掉

 

alwayson注意問題

http://www.cnblogs.com/lyhabc/articles/5310781.html

 

 

關於AlwaysOn備份

msdn上和《SQL Server2012實施與管理實戰指南》上都沒有說道主副本所支持的備份類型

通過測試,主副本跟單實例的SQL Server同樣,完整備份、差別備份、日誌備份都支持

 

故障切換判斷條件

第一步
lookalive 5秒/次 telnet 1433端口 超時30秒
第二步
isalive    60秒/次 sp_server_diagnoist 超時60秒 超時後再執行3次以防誤判

從sql server2012開始使用sp_server_diagnoist比select @@servername判斷更準確
防止sqlserver壓力大致使的誤判 
《SQL Server2012實施和管理實戰指南》  P42 P50 P53

副本之間 10秒/次 相互ping,若是不通,好比輔助副本不通,會顯示爲disconnect

 

AlwaysOn注意問題:http://www.cnblogs.com/lyhabc/articles/5310781.html

關於仲裁:http://www.tech-coffee.net/understand-failover-cluster-quorum/

相關文章
相關標籤/搜索