Linux 搭建 SQL Server 高可用完結篇
來自專欄有關SQL1 人贊了文章
接著上篇講高可用的實現。
上篇原文請看這裡: Linux 搭建 SQL Server 高可用服務
這篇主要講如何搭建 pacemaker 來保證 SQL Server 實例故障時效轉移。
8. Pacemaker 的安裝
在配置完畢 AG 的時候,一定要配置 Pacemaker.
以下六個步驟除了 pcs 第5步,其他都需要在集群中的每台節點上運行。
詳細構建與解說可以查看【參考文章】。
1. 大致需要安裝 2個軟體和 1 個工具:
- Pacemaker
- Corosync
- Pcsd
默認情況下,這三個軟體都在自帶的 repository 庫中配置好了,只要執行安裝即可:
yum install -y pacemaker,corosync,pcs
pcsd 是 pacemaker 的客戶端命令執行程序,任何的功能都需要 pcsd 來啟動和設置,pacemaker 是服務程序。當 pcsd, pacemaker 都配置好之後,使用命令 pcs 就可以用來和 pacemaker 交互了。所以 pcs 才是真正執行集群管理的程序軟體,只要在其中一台節點上運行 pcs, 命令即將被送到各個節點去運行。
從安裝的日誌分析, corosync 會在安裝 pacemaker 的時候一起安裝,因此不需要特別去單獨安裝。pcs 是需要獨立安裝的。
MSDN 文檔中規定,還需要安裝額外的兩個程序:
yum install -y fence-agents-all resource-agents
但 fency-agents-all 沒有找到安裝包,而 resource-agents 卻已經安裝完畢了。
2. 開啟防火牆埠
firewall-cmd --permanent --add-service=high-availabilityfirewall-cmd --reload
如果沒有 high availability 的配置,也可以指定埠:
TCP:ports 2224,3121,21064
UDP:port 5405
3. 設置用戶密碼
這個用戶非常重要,他是創建集群的賬戶,有了他的存在,集群才能運行起來,和 sql server 安裝用戶要區分開來,實際上這兩個用戶需要分開建。
passwd hacluster
為了方便這裡的用戶密碼和 sa 密碼一致!
- 開啟集群的重啟回線設置
當節點失效了,修復後需要重新回到集群,這叫做回線。此功能需要設置:
systemctl enable pcsd systemctl start pcsdsystemctl enable pacemaker
5. 建立集群
pcs cluster auth centos00 centos01 centos02 -u hacluster -p l****n****6.pcs cluster setup --name crmcluster centos00 centos1 centos02pcs cluster start --all pcs cluster enable --all
配置授權的程序運行過長,而且中間經常有錯誤,比如失聯,timeout等。嘗試著多聯幾遍,發現效果並不理想,始終有一台機器失聯。
所以嘗試著想單台計算機節點去授權:
[huangyun@centos00 ~]$ pcs cluster auth centos00Username: haclusterPassword: Please authenticate yourself to the local pcsdUsername: huangyunPassword: Port (default: 2224): Error: Access denied
換成 root.
小結下集群的主要步驟:
pcs 的程序只要在其中一台運行即可
5.1 開啟 pcs 程序:
systemctl enable pcsdsystemctl start pcsdsystemctl enable pacemaker** 每台節點都需要執行
5.2 授權節點
pcs cluster auth centos00 centos01 centos02 -u hacluster -p l****n****6.
更建議換成:
pcs cluster auth centos00 centos01 centos02
5.3 設置集群屬性: 集群名,節點名
pcs cluster setup --name crmcluster centos00 centos1 centos02[root@centos00 huangyun]# pcs cluster setup --name crmcluster centos00 centos01 centos02Destroying cluster on nodes: centos00, centos01, centos02...centos02: Stopping Cluster (pacemaker)...centos01: Stopping Cluster (pacemaker)...centos00: Stopping Cluster (pacemaker)...centos01: Successfully destroyed clustercentos02: Successfully destroyed clustercentos00: Successfully destroyed clusterSending pacemaker_remote authkey to centos00, centos01, centos02centos00: successful distribution of the file pacemaker_remote authkeycentos02: successful distribution of the file pacemaker_remote authkeycentos01: successful distribution of the file pacemaker_remote authkeySending cluster config files to the nodes...centos00: Succeededcentos01: Succeededcentos02: SucceededSynchronizing pcsd certificates on nodes centos00, centos01, centos02...centos00: Successcentos01: Successcentos02: SuccessRestarting pcsd on the nodes in order to reload the certificates...centos02: Successcentos00: Successcentos01: Success
5.4 開啟集群服務
pcs cluster start pcs cluster enable
6 安裝 sql server resource agent
yum install mssql-server-ha
7. 配置 fencing(STONITH)
fencing 的作用是讓失效的節點回線,一旦節點故障離線了,fencing 會引導節點重新回到集群。
STONITH: shoot the other node in the head
常規情況,fencing 特性是必須要在集群的節點中啟動的。但如果處於測試的目的,可以不啟動。可以嘗試著去啟動它,對於以後部署聖餐環境,是有好處的,相當於一次生產環境中部署的演練。在本文中為了方便快捷的部署,先將其關閉。
fencing 可以從兩方面進行集群資源的控制,一是節點本身,二是節點上提供的資源,比如硬碟,SQL 服務等。
針對節點本身一級的控制:
pcs property set stonith-enabled=false
問題:
1 集群管理器(Cluster Manager)為什麼不能集成 fencing 的功能?2 集群資源與集群管理器之間的互動,依靠什麼來介面?
3 fencing 的實現
8 集群「心跳」的設置
「心跳」(Heart Beat)的概念,在這裡是指集群節點之間互相通信,檢查健康狀態和集群屬性變更的機制。通過設置集群屬性 cluster-recheck-interval 來確定「心跳」 的時間間隔。
一旦集群中的某一個節點下線(不能互相通信),集群管理器可以嘗試著在一段時間(failure-timeout)後去重啟這台節點。如果在這段時間內節點又有反應(能與集群互相通信)了,那麼在接收到這個回線的信號之後,就取消重啟先前標記為下線的節點。
pcs property set cluster-recheck-interval=2min
不建議把 cluster-recheck-interval 設置的過短,比如 60s; 一般 failure-timeout 可以設置的短一些,60s, 而 cluster-recheck-interval 要設置的比 failure-timeout 長一些。
pcs resource update [crmag] meta failure-timeout=60s
9 為 Pacemaker 設置 SQL Server Login 賬戶
use master go CREATE LOGIN PaceMaker WITH PASSWORD=PMLoginPass123.ALTER SERVER ROLE sysadmin ADD MEMBER PaceMakerGO
在每一台集群實例上都執行上面的命令。
[root@centos00 secrets]# cat login.batecho PaceMaker >> ~/pacemaker-passwdecho PMLoginPass123. >> ~/pacemaker-passwdmv ~/pacemaker-passwd /var/opt/mssql/secrets/passwdchown root:root /var/opt/mssql/secrets/passwdchmod 400 /var/opt/mssql/secrets/passwd
在每一台集群節點上執行上述腳本
10 創建 AG (Availability Groups)集群資源
pcs resource create crmag_cluster ocf:mssql:ag ag_name=crmag meta failure-timeout=30s master notify=true
11 創建虛擬 IP 地址
pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=192.168.1.15
與我們的 SQL Server 實例所在節點的網段一致。
12 Add colocation constraint
pcs constraint colocation add virtualip crmag_cluster-master INFINITY with-rsc-role=master
INFINITY 一定是大寫,正確的寫法卻是:
pcs constraint colocation add virtualip crmag_cluster-master INFINITY with-rsc-role=Master
大小寫敏感!
13 排序約束
pcs constraint order promote crmag_cluster-master then start virtualip> Adding crmag_cluster-master virtualip (kind: Mandatory) (Options: first-action=promote then-action=start)
注意點:
集群資源管理器:
Cluster Resource Manager 比如 Pacemaker
主從庫架構配置:
SQL Server Standard 版本只能支持一主一從架構,除了高可用之外,並不支持只讀操作,而 Enterprize 版本則可以支持 9 個副本架構,至多 3 個主庫,8個從庫結構。
集群種類以及故障轉移模式:
Cluster Type 是 SQL Server 2017 來新進的特性,有 External 和 None 之分。
External 採用了 Pacemaker 配置。在這種配置下, FailOver 模式也必須是 External( 因此 Failover Mode 也是 SQL Server 2017 以來最新特性, 另外一種模式是 Automatic ).
None 就是不採用 Pacemaker 配置,即便伺服器上配置了 Pacemaker, 只要不在 SQL Server AG 中配置 None, 也不會使用 Pacemaker 服務。
從庫同步數量 :
required_synchronized_secondaries_to_commit:
AG 使用的配置中,最重要的一個便是它。它控制了與主庫強一致性同步的副本數。設置了正確的值,自動故障轉移才能順利執行。根據《Design Data-Intensive Applications》書中介紹,主庫的數據可以同步給多個從庫,以保證高可用性。在這裡,從庫的設置便是使用了這個配置,所以它的值可以是以下 3 個:
0 - 沒有設置必須同步的從庫,自然不能在主庫失效的情況下,自動切換從庫為主庫;
1 - 設置一個從庫與主庫保持同步,一旦主庫失效就可以自動切換負載到從庫上;
2 - 設置 2 個同步從庫,如同 1 一樣,可以自動切主從庫。
關於這個主題,可以參考這篇文章,細節談的更多:
Understand SQL Server resource agent for pacemakerhttps://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-ha?view=sql-server-2017#pacemakerNotifyAlways On Availability Groups on Linuxhttps://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-overview?view=sql-server-2017
隨著閱讀的深入,就像 Understand SQL Server resource agent for pacemaker 講的那樣,required_synchronized_secondaries_to_commit 指定的數值,並不僅僅是確切的同步副本數量,而是同步副本的數量 / 2 ,即如果集群的同步伺服器數量是 3,那麼required_synchronized_secondaries_to_commit 就被設置為 1。
這個設置在任何時間都有可能被修改,比如監控節點健康狀態時,發現有節點失效了,就要重新計算。3台節點組成的集群,如果其中一個 secondary 節點失效了,那麼就會重新計算和保存 required_synchronized_secondaries_to_commit 為1,即在從庫副本數據沒有更新完之前,主庫是不可被訪問的。 體現了副本對於可用性與數據保護的影響。
案例:
假如我們的集群是有 8 台節點組成的,其中 1 台是主庫, 2 台是同步從庫,剩下 5 台是副本節點。那麼主庫與同步從庫之間的數據,始終是保持一致的,那麼當其中一台從庫失效之後,那麼實際上只需要保持一台同步從庫同步數據即可,此時 required_synchronized_secondaries_to_commit 即被 Pacemaker Resource Agent 強制設置為 1了。
而當主庫失效的時候,必須要有同步庫(包括主庫和從庫)數量減去 required_synchronized_secondaries_to_commit 數量來決定,收到多少個從庫的回應,推選主庫是有效的。
這裡就要思考,如何指定 AG 架構是由 3台同步庫(1主2從)組成的?
集群管理器:
集群由一組計算機組成,它提供了高可用和高並發架構。在 SQL Server 中集群的作用是高可用,即所有的工作負載都是引導到一台主機上,如果這台主機失效了,再切換到另一台主機上;在 Oracle RAC 集群中,則是多台計算機共同分擔一部分工作負載,如果其中一台主機失效了,會自動切換到那台主機配對的從庫上,以此同時保證高可用與高並發。
所以為 SQL Server 搭建的集群,集群管理器負責的事情就是判斷失效以及之後的故障轉移切換。
擴展下,如何保證集群管理器本身的高可用性?
如果僅僅是配置讀寫分離,那麼可以不用依靠 集群管理器(Cluster Manager), 而僅僅配置 Read-Scale replica.
當然我們這裡討論的是對高可用環境搭建的流程,只讀擴展(Read-Scale Replicas) 並不在討論範圍內。3 個同步庫的搭建可以完成自動恢復節點,而不僅僅是自動故障時效轉移。
測試用例:
實現故障自動切換
每一步配置過後,增加測試配置正確與否的步驟
在最終配置完畢 Availability Groups 的時候,發現資料庫對象並不在 3 台集群節點之間同步,而且經常是 3 台節點上的 Availability Groups 中的資料庫都無法訪問了。
比如遇到新建的 CRMAG Availability Groups 一直對主庫進行解析:
The state of the local availability replica in availability group crmag has changed from NOT_AVAILABLE to RESOLVING_NORMAL. The state changed because the local instance of SQL Server is starting up. For more information, see the SQL Server error log or cluster log. If this is a Windows Server Failover Clustering (WSFC) availability group, you can also see the WSFC management console.
從 Log 中發現了有趣的事件,即參加了 availability group 的資料庫,並不是隨著 instance 的啟動而啟動了,必須由 availaibility group 啟動它。
2018-08-21 23:33:57.31 spid20s Skipping the default startup of database crm because the database belongs to an availability group (Group ID: 65536). The database will be started by the availability group. This is an informational message only. No user action is required.
將所有的 extened events 記錄的文件,都拿過來查查錯,發現:
Network error code 0x102 occurred while establishing a connection; the connection has been closed. This may have been caused by client or server login timeout expiration. Time spent during login: total 97036 ms, enqueued 0 ms, network writes 0 ms, network reads 0 ms, establishing SSL 97034 ms, network reads during SSL 96934 ms, network writes during SSL 0 ms, secure calls during SSL 100 ms, enqueued during SSL 0 ms, negotiating SSPI 0 ms, network reads during SSPI 0 ms, network writes during SSPI 0 ms, secure calls during SSPI 0 ms, enqueued during SSPI 0 ms, validating login 0 ms, including user-defined login processing 0 ms. [CLIENT: 192.168.1.6]
與 Windows 下安裝的異同:
- Microsoft Distributed Transaction Coordinator(DTC) 還不能支持 Linux 版本的 SQL Server 2017 ,因此需要分散式事務的集群部署,還是要架構在 Windows 平台上
- Linux 版本的 SQL Server 部署,使用的是 Pacemaker , 而不是 WSFC(windows server failover cluster). Pacemaker 不需要 Active Directory Domain Services(AD DS)
- 實現故障切換各有各自的方法
- 有些特定屬性 比如 required_synchronized_secondaries_to_commit 只能通過 Pacemaker 來實現,而在 Windows 上是通過 T-SQL 也能實現的
Docker for SQL Server
參考文章:
- MSDN 文檔: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-2017
- 雲和恩墨張樂奕的文章:https://blog.csdn.net/enmotech/article/details/80267170
- Docker for SQL Server: https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-2017
- SQL Server 鏡像下載: https://packages.microsoft.com/
- 介紹在 Centos 上安裝 SQL Server 的文章: https://www.rootusers.com/how-to-install-microsoft-sql-server-on-linux/
- How to Set up Nginx High Availability with Pacemaker and Corosync on CentOS7 : https://www.howtoforge.com/tutorial/how-to-set-up-nginx-high-availability-with-pacemaker-corosync-on-centos-7
- MSDN 官方文檔之 - Always On Availability Groups on Linux : https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-overview?view=sql-server-2017
- MSDN 官方文檔之 - An overview of High Availability and Disaster Recovery solutions available for SQL Server https://blogs.msdn.microsoft.com/sql_pfe_blog/2013/06/15/an-overview-of-high-availability-and-disaster-recovery-solutions-available-for-sql-server/
配置 AG 過程遇到的問題集合:
1 兩台建立在 台機上的 VM Ware 虛擬機,各自擁有一個 SQL Server 實例,且充當了集群中的從庫副本;一台建立在筆記本上的 VM Ware 虛擬機,則充當了集群中的主庫副本。在沒有安裝 pacemaker 的時候,主庫上建立的資料庫對象,總是不能實時的同步到2個從庫中去,且2個從庫的同步資料庫總是處理不可訪問的狀態
消息 976,級別 14,狀態 1,第 1 行The target database, crm, is participating in an availability group and is currently not accessible for queries. Either data movement is suspended or the availability replica is not enabled for read access. To allow read-only access to this and other databases in the availability group, enable read access to one or more secondary availability replicas in the group. For more information, see the ALTER AVAILABILITY GROUP statement in SQL Server Books Online.
2 使用台機上的 SSMS 可以無障礙的連接到從庫,但連接主庫總是掉線。而筆記本上的 SOS(Sql Operation Studio)連接3台都沒事。不禁猜想,是主庫的某一些設置,導致同步失效。
已成功與伺服器建立連接,但是在登錄過程中發生錯誤。 (provider: TCP Provider, error: 0 - 你的主機中的軟體中止了一個已建立的連接。) (.Net SqlClient Data Provider)
有關幫助信息,請單擊: http://go.microsoft.com/fwlink?ProdName=Microsoft SQL Server&EvtSrc=MSSQLServer&EvtID=10053&LinkId=20476
伺服器名稱: 192.168.1.10 錯誤號: 10053 嚴重性: 20 狀態: 0
程序位置:
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)在 System.Data.SqlClient.SqlConnection.Open()在 Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo ci, IServerType server)在 Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()
但也有可能是 SSMS 17 是比較新的版本,因此不是很穩定,第二次連接就連上了。
- 主庫伺服器啟動後,接著啟動從庫的伺服器,傳輸消息失敗
Aug 23 07:02:03 centos01 sqlservr[1272]: [HADR TRANSPORT] AR[8FA8354D-F40F-44EF-A648-722A0ED4F90F]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Session:[9DDF7B6B-312B-436F-97D1-6DA84DF0DBFF] CHadrTransportReplica State change from HadrSession_Configuring to HadrSession_Timeout - function [CHadrTransportReplica::TimeoutReplica]Aug 23 07:02:03 centos01 sqlservr[1272]: [HADR TRANSPORT] AR[8FA8354D-F40F-44EF-A648-722A0ED4F90F]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Setting Reconnect Delay to 30 sAug 23 07:02:33 centos01 sqlservr[1272]: CHadrTransportReplica::Reset called from function [CHadrTransportReplica::ReconnectTask], primary = 0, primaryConnector = 1Aug 23 07:02:33 centos01 sqlservr[1272]: CHadrSession State with session ID A1044F08-E3F0-479E-8C23-22FA543E03A4 change from HadrSessionConfig_WaitingSynAck to HadrSessionConfig_ConfigRequest - function [CHadrSession::Reset]Aug 23 07:02:33 centos01 sqlservr[1272]: [HADR TRANSPORT] AR[8FA8354D-F40F-44EF-A648-722A0ED4F90F]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Session:[1168DDB5-5C01-41D7-B411-81FE9A075B81] CHadrTransportReplica State change from HadrSession_Timeout to HadrSession_Configuring - function [CHadrTransportReplica::Reset_Deregistered]Aug 23 07:02:33 centos01 sqlservr[1272]: [HADR TRANSPORT] AR[8FA8354D-F40F-44EF-A648-722A0ED4F90F]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104], Seesion:[1168DDB5-5C01-41D7-B411-81FE9A075B81] Queue Timeout (10) from [CHadrTransportReplica::Reset_Deregistered]Aug 23 07:02:33 centos01 sqlservr[1272]: CHadrSession State with session ID 1168DDB5-5C01-41D7-B411-81FE9A075B81 change from HadrSessionConfig_ConfigRequest to HadrSessionConfig_WaitingSynAck - function [CHadrSession::GenerateConfigMessage]Aug 23 07:02:43 centos01 sqlservr[1272]: [HADR TRANSPORT] AR[8FA8354D-F40F-44EF-A648-722A0ED4F90F]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Session:[1168DDB5-5C01-41D7-B411-81FE9A075B81] Timeout Detected 10 sAug 23 07:02:43 centos01 sqlservr[1272]: [HADR TRANSPORT] AR[8FA8354D-F40F-44EF-A648-722A0ED4F90F]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Session:[1168DDB5-5C01-41D7-B411-81FE9A075B81] CHadrTransportReplica State change from HadrSession_Configuring to HadrSession_Timeout - function [CHadrTransportReplica::TimeoutReplica]Aug 23 07:02:43 centos01 sqlservr[1272]: [HADR TRANSPORT] AR[8FA8354D-F40F-44EF-A648-722A0ED4F90F]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Setting Reconnect Delay to 30 s
打開第二台從庫的時候,狀態又有所變化:
Aug 23 07:18:51 centos02 sqlservr[1307]: CHadrTransportReplica::Reset called from function [CHadrTransportReplica::ReconnectTask], primary = 0, primaryConnector = 1Aug 23 07:18:51 centos02 sqlservr[1307]: CHadrSession State with session ID 965706DC-2B3D-4E2D-82E0-CAB3ACEC9ED4 change from HadrSessionConfig_WaitingSynAck to HadrSessionConfig_ConfigRequest - function [CHadrSession::Reset]Aug 23 07:18:51 centos02 sqlservr[1307]: [HADR TRANSPORT] AR[D55252F0-9CBA-4D36-87B2-246248A0C846]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Session:[CDF4AEB9-41B8-42C6-B729-28E9378BB4D0] CHadrTransportReplica State change from HadrSession_Timeout to HadrSession_Configuring - function [CHadrTransportReplica::Reset_Deregistered]Aug 23 07:18:51 centos02 sqlservr[1307]: [HADR TRANSPORT] AR[D55252F0-9CBA-4D36-87B2-246248A0C846]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104], Seesion:[CDF4AEB9-41B8-42C6-B729-28E9378BB4D0] Queue Timeout (10) from [CHadrTransportReplica::Reset_Deregistered]Aug 23 07:18:51 centos02 sqlservr[1307]: CHadrSession State with session ID CDF4AEB9-41B8-42C6-B729-28E9378BB4D0 change from HadrSessionConfig_ConfigRequest to HadrSessionConfig_WaitingSynAck - function [CHadrSession::GenerateConfigMessage]Aug 23 07:18:53 centos02 sqlservr[1307]: [HADR TRANSPORT] AR[D55252F0-9CBA-4D36-87B2-246248A0C846]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Transport is not in a connected state, unable to send packetAug 23 07:18:57 centos02 sqlservr[1307]: [HADR TRANSPORT] AR[D55252F0-9CBA-4D36-87B2-246248A0C846]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Transport is not in a connected state, unable to send packetAug 23 07:19:01 centos02 sqlservr[1307]: [HADR TRANSPORT] AR[D55252F0-9CBA-4D36-87B2-246248A0C846]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Session:[CDF4AEB9-41B8-42C6-B729-28E9378BB4D0] Timeout Detected 10 sAug 23 07:19:01 centos02 sqlservr[1307]: [HADR TRANSPORT] AR[D55252F0-9CBA-4D36-87B2-246248A0C846]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Session:[CDF4AEB9-41B8-42C6-B729-28E9378BB4D0] CHadrTransportReplica State change from HadrSession_Configuring to HadrSession_Timeout - function [CHadrTransportReplica::TimeoutReplica]Aug 23 07:19:01 centos02 sqlservr[1307]: [HADR TRANSPORT] AR[D55252F0-9CBA-4D36-87B2-246248A0C846]->[071D8AF0-0B68-4AA9-9041-A06B28FC2104] Setting Reconnect Delay to 9 s
Transport is not in a connected state, unable to send packet
這似乎說明,這三台集群節點之間並不能互相通信。 又或者說明作為 Service Broker Endpoint 之間,沒有認證的通信授權。
推薦閱讀:
※除了重裝系統外,如何徹底乾淨的卸載SQL Server 2008?
TAG:MicrosoftSQLServer | SQL | 高可用 |