herrmanndominic
Goto Top

SQL Cluster Node Configuration

Hallo zusammen,

ich befinde mich gerade in einem PoC für ein SQL Cluster Projekt.
Wenn ich zu einem bestehenden Cluster einen neuen Node hinzufügen möchte, erhalte ich im SQL "Add a Failover Cluster Node" Wizzard folgende schöne Übersicht.

ClusterNode

Weiß Jemand, wie ich diese Liste per TSQL oder PowerShell abfragen kann?

Danke und Grüße
Dominic

Content-ID: 352573

Url: https://administrator.de/contentid/352573

Ausgedruckt am: 19.11.2024 um 08:11 Uhr

emeriks
emeriks 23.10.2017 um 15:49:32 Uhr
Goto Top
Hi,
also über TSQL wirst Du sie höchstwahrscheinlich nicht abfragen können.
Powershell geht über die normalen Powershell Cmdlets für Failovercluster.
https://technet.microsoft.com/de-de/library/hh847239(v=wps.630).aspx

E.
herrmanndominic
herrmanndominic 23.10.2017 um 16:18:48 Uhr
Goto Top
Hi,

danke für den Hinweis. Ja die Cluster Cmdlets hatte ich mir schon angeschaut, bin aber nicht auf die Schnelle zu dieser Überischt gekommen.
Mich wundert nur, dass wenn ich mit TSQL die Abfrage
SELECT * FROM sys.dm_os_cluster_nodes
In einer Instanz ausführe, dass ich dann alle 3 Clusternodes als output erhalte, obwohl in dieser Instanz nur max 2 Nodes Mitglied sein Können (FCL Standard Edition).

Irgendwie muss ja MS beim Aufruf des Wizzards auch einen Query absetzen, um diese Anzeige zu generieren.
Hätte ja sein können, dass jemand bereits diese Zeilen geschrieben hat.
Penny.Cilin
Penny.Cilin 24.10.2017 um 09:42:14 Uhr
Goto Top
Moin,

in Deinem Screenshot sehe ich aber 3 Cluster Network Names:
  • BLNSVSQLCL02
  • BLNSVSQLCL01
  • BLNSVSQLCL03
Und diese bekommt Du mit der Abfrage
SELECT * FROM sys.dm_os_cluster_nodes
ja auch zurück.
Was ja auch richtig ist.
  • 2 Nodes
  • 1 Clusternamen
Oder sehe ich etwas falsch?

Warum Nodenamen und Cluster Network Names teilweise identisch sind, erschließt sich mir nicht.
Ich würde normalerweise folgendes benennen:
  • BLNSVSQLCL01 (Clusternamen)
  • BLNSVSQLCLN01 (Node 1)
  • BLNSVSQLCLN02 (Node 2)
Damit es eindeutig unterscheidlbar ist.

Gruss Penny
herrmanndominic
herrmanndominic 24.10.2017 um 11:44:53 Uhr
Goto Top
Hallo,

in dem ScreenShot sind die 3 Cluster Network Names zu sehen.
Die SQL Abfrage liefert aber die Cluster Node Names zurück

Cluster: BLNSVSQLCL01
Node: BLNSVSQLCLN01

Die SQL Abfrage liefert mir also auch Nodenames zurück, die sich nicht in diesem SQL Cluster befinden.
Penny.Cilin
Penny.Cilin 24.10.2017 um 12:02:30 Uhr
Goto Top
Aber eine Instanz (Wxxx) muss anscheinend mal auf den Knoten BLNSVSQLCLN03 bzw. BLNSVSQLCLN02
aktiv gewesen sein, sonst würde es nicht im Screenshot dargestellt sein.

Gruss Penny
MadMax
MadMax 24.10.2017 um 13:01:42 Uhr
Goto Top
Hallo Dominic,

zwar kann ich Dir Deine Frage nicht direkt beantworten, aber einen Trick verraten, wie Du herausfindest, was MS macht: schmeiß einfach vor dem Aufruf Deiner Liste den Profiler an, im Zweifel auf allen drei Instanzen. Dann siehst Du es.

Gruß, Mad Max
herrmanndominic
herrmanndominic 27.10.2017 aktualisiert um 10:48:45 Uhr
Goto Top
Hallo zusammen,

ich habe zwar noch nicht ganz herausgefunden, wie ich alle Informationen dieses Wizzards abfrage, aber primär ging es mir um das Auslesen der ClusterInstanz, Nodes und Status.

Ich habe dafür mal folgendes Script gebastelt. Das reicht mir auch.

import-module failoverclusters
$Nodes = Get-Cluster | Get-ClusterNode
foreach ($Node in $Nodes) 
    {
        $SQLInstance = get-clusterresource -Cluster $Node -ErrorAction SilentlyContinue| 
                        where-object {$_.ResourceType -like "SQL Server"}|   
                        get-clusterparameter VirtualServerName,InstanceName | 
                        group-object ClusterObject | 
                        select-object @{Name = "SQLInstance";  
                        Expression = {[string]::join("\",($_.Group |   
                        select-object -expandproperty Value))}} 
    }
$SQLInstanceUnique = $SQLInstance | select SQLInstance -Unique


Foreach ($Instance in ($SQLInstanceUnique).SQLInstance)
    {
        $Query = "  
        SELECT CONVERT(sysname, SERVERPROPERTY('servername')) as Instance;  

        With ClusterActiveNode as 

        (
        SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS') as NodeName, Cast('Active' as varchar(10)) as Active  
        ),
        ClusterNodes as 

        (

        SELECT NodeName FROM sys.dm_os_cluster_nodes
        )

        Select b.nodename, isnull(active,'Passive') as NodeStatus from ClusterNodes as b left join ClusterActiveNode as a  
        on a.NodeName = b.nodename"  


Invoke-Sqlcmd -Query $Query -ServerInstance "$Instance" | select Instance,Nodename,NodeStatus   


}

Danke für eure Unterstützung!