這一篇是從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
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/