ComputerNamePhysicalNetBIOS 和“目前主機伺服器”顯示不同的機器
我在兩個節點(比如名稱 X 和 Y)Windows 伺服器集群(Windows Server 2008 R2 Enterprise)上有一個 SQL Server 2008 R2 實例。
兩個節點上的伺服器管理器都將“X”顯示為“目前主機伺服器”。
但是,當我執行
ServerProperty('ComputerNamePhysicalNetBIOS')
它時,它返回'Y'
應該是目前活動節點。如果我 RDP 到 SQL 的 IP,它確實連接到 Y。
- 哪一個是正確的?
- 為什麼伺服器管理器將 X 顯示為活動節點?
此外,既不
ServerProperty('MachineName')
返回X
也不返回。Z 是兩台電腦的名稱。它代表什麼?Y``'Z'
根據 ComputerNamePhysicalNetBIOS 的 BOL(如上返回 Y):
如果 SQL Server 實例位於故障轉移群集中,並且您想要獲取故障轉移群集實例的名稱,請使用 MachineName 屬性。
那麼,為什麼它會返回 Z?
這些機器不是虛擬化的,它們是物理的。這是否意味著 Z 是集群的虛擬伺服器名稱?“目前主機伺服器”似乎是指“集群中的活動節點”(來自線上論壇)。我不完全確定兩個 FCI 和一個在每個節點上處於活動狀態是什麼意思。
Windows Server 故障轉移群集至少需要兩台電腦(虛擬機或物理機)。讓我們將這些稱為
Node01
和Node02
。Windows Server 故障轉移群集角色的安裝過程的一部分定義了群集的名稱。出於我們的目的,我們稱之為
MyCluster
.創建
MyCluster
完成後,您可以將 SQL Server 實例作為獨立的“集群資源組”添加到集群中。我們將我們的 SQL Server 集群實例稱為MyClusterSQL\INSTANCE
.因此,為了澄清,我們有:
╔════════════════════════╦═══════════════════════╗ ║項目║名稱║ ╠════════════════════════╬═══════════════════════╣ ║ 電腦 ║ Node01 和 Node02 ║ ║ 集群虛擬伺服器 ║ MyCluster ║ ║ SQL Server 實例 ║ MyClusterSQL\INSTANCE ║ ╚════════════════════════╩═══════════════════════╝
現在,如果您執行
SELECT SERVERPROPERTY('ComputerNamePhysicalNetbios')
它,它將返回Node01
或者Node02
取決於託管 SQL Server 實例的電腦。
SELECT SERVERPROPERTY('MachineName');
將返回MyClusterSQL
。SERVERPROPERTY的Microsoft Docs 對“MachineName”這樣說:執行伺服器實例的 Windows 電腦名稱。
對於群集實例,即在 Microsoft 群集服務上的虛擬伺服器上執行的 SQL Server 實例,它返回虛擬伺服器的名稱。
SELECT @@SERVERNAME;
將返回MyClusterSQL\INSTANCE
。伺服器管理器始終返回您連接到的電腦的名稱。在我們的例子中,這將是
Node01
或Node02
。如果 SQL Server 群集實例在 上執行Node02
,並且您使用遠端桌面連接到 MyClusterSQL 伺服器,伺服器管理器將顯示Node02
,即使您連接到MyClusterSQL
。
Z 應該是集群的虛擬伺服器名稱。我不使用伺服器管理器,所以我不知道“目前主機伺服器”是什麼意思,以及它是否應該代表 SQL Server 集群實例(不同於 Windows 集群)的活動節點。
如果您有兩個單獨的 FCI,並且每個節點上目前有一個處於活動狀態,您希望“目前主機伺服器”說什麼?伺服器管理器是分別代表每個 SQL Server 群集還是僅代表 Windows 群集?
我知道這些是物理機器——這是一個完全不同的概念。“虛擬伺服器名稱”是 SQL Server 故障轉移集群實例的外部名稱——它是 SSMS 和您的應用程序連接到 SQL Server 的方式,無論集群實例目前使用哪個物理節點。
我懷疑“目前主機伺服器”是完全不同的東西,它與Windows 集群有關,而不是與位於 Windows之上的SQL Server 故障轉移集群實例有關。
ComputerNamePhysicalNetBIOS
將為您提供目前活動節點的物理名稱,vsMachineName
將為您提供集群的虛擬名稱。