gMSA を使用する SQL Server フェールオーバー クラスター インスタンスの障害のトラブルシューティング

適用対象: WindowsのSQL Server

まとめ

この記事は、SQL Server サービス SQL Serverがグループ管理サービス アカウント (gMSA) で実行されている場合のフェールオーバー クラスター インスタンス (FCI) のセットアップ、追加ノード、スタートアップ、およびフェールオーバーエラーのトラブルシューティングに役立ちます。 可能なすべての所有者ノード、ノード固有の権限とスタートアップ パラメーター、不完全なセットアップ状態、およびクラスター リソースのエラーに対するマネージド パスワードの取得について説明します。

開始する前に、前提条件を確認し、「gMSA を使用したSQL Serverセットアップ、起動、認証エラーのトラブルシューティング」のクイック検証チェックリストを実行します。

Symptoms

  • アカウントの検証中に FCI セットアップが失敗する。
  • ノード追加操作は、一貫性のないサービス アカウント情報を報告します。
  • SQL Serverはコマンド ラインから開始しますが、クラスター経由では開始されません。
  • ノード固有のスタートアップ パラメーターまたは構成がないため、フェールオーバーは失敗します。

原因

FCI エラーには、パスワードの取得、不完全なセットアップ メタデータ、ノード固有のスタートアップ パラメーター、ノードによって異なる権限、ストレージ アクセス、またはクラスター サービスの正常性チェックが含まれる場合があります。 gMSA 固有の原因は、1 つ以上の所有者ノードがマネージド パスワードを取得する権限を持っていないため、インスタンスは一部のノードで動作し、他のノードでは失敗します。

フェールオーバー クラスター インスタンスのエラーを診断する

  1. 可能なすべての所有者ノードで クイック検証チェックリスト を実行し、結果を比較します。

    可能なすべての所有者ノードで次のコマンドを実行します。

    Test-ADServiceAccount -Identity 'SQLgMSA'
    sc.exe qmanagedaccount MSSQLSERVER
    Get-ClusterResource | Format-Table Name, ResourceType, State, OwnerGroup -AutoSize
    
  2. ノード間でサービス ID、マネージド アカウントの状態、有効な権限、およびスタートアップ パラメーターを比較します。

    予期される結果:Test-ADServiceAccount は可能なすべての所有者ノードで True を返し、サービス構成パラメーターとスタートアップ パラメーターは同じ FCI に対して一貫しています。

  3. セットアップ履歴で、キャンセルまたは不完全な追加ノード操作を確認します。

  4. 同じリソース遷移のSQL Serverエラー ログとクラスター ログを収集します。

    次のコマンドを実行して、クラスター ログを生成します。

    Get-ClusterLog -UseLocalTime -Destination C:\Temp
    

フェールオーバー クラスター インスタンスのエラーを解決する

診断手順の証拠に一致するソリューションを使用します。

可能なすべての所有者ノードがマネージド パスワードを取得することを承認する

可能なすべての所有者ノードがマネージド パスワードを取得し、各ノードへのフェールオーバーを再テストすることを承認します。 gMSA が個々のコンピューター アカウントを承認する場合、 Set-ADServiceAccount は完全な承認済みプリンシパル の一覧を置き換えます。 まず既存の値を確認し、引き続き承認対象である必要があるすべてのプリンシパルを含めてください。

# Review the gMSA configuration
Get-ADServiceAccount -Identity "SQLgMSA" `
    -Properties PrincipalsAllowedToRetrieveManagedPassword |
    Select-Object Name, PrincipalsAllowedToRetrieveManagedPassword

# If individual computer accounts are used, authorize each possible owner node
Set-ADServiceAccount -Identity "SQLgMSA" `
    -PrincipalsAllowedToRetrieveManagedPassword "NODE1$","NODE2$","NODE3$"

# Verify the gMSA from each possible owner node
Invoke-Command -ComputerName NODE1,NODE2,NODE3 {
    Test-ADServiceAccount -Identity "SQLgMSA"
}

セキュリティ グループが gMSA を承認する場合は、既存の gMSA プリンシパルを置き換える代わりに、使用可能な所有者ノードをそのグループに追加します。

Add-ADGroupMember -Identity "SQL-FCI-gMSA-Nodes" `
    -Members "NODE1$","NODE2$","NODE3$"

詳細については、以下の記事を参照してください。

ノード固有の権限、スタートアップ パラメーター、または不完全なセットアップ状態を修正する

確認されたノード固有の権限、スタートアップ パラメーター、または不完全なセットアップ状態を修正します。 各ノードで次のコマンドを実行し、結果を比較します。 <InstanceID>をインスタンス ID (MSSQL16.MSSQLSERVER など) に置き換えます。

# Verify the SQL Server service account on each node
Get-CimInstance Win32_Service -Filter "Name='MSSQLSERVER'" |
    Select-Object Name, StartName, State, StartMode

# Compare SQL Server startup parameters on each node
reg query "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceID>\MSSQLServer\Parameters"

# Check the SQL Server Windows service configuration
sc.exe qc MSSQLSERVER

レジストリを手動で編集する代わりに、SQL Server 構成マネージャーを使用してスタートアップ パラメーターの違いを修正します。 詳細については、以下の記事を参照してください。

クラスター リソースの障害がサービス アカウントに関連していない場合は、次のコマンドを使用して、クラスター化されたロール、クラスター リソース、およびクラスター ログを確認します。

# List clustered roles and their current owner/state
Get-ClusterGroup

# List cluster resources and their current state
Get-ClusterResource |
    Format-Table Name, ResourceType, State, OwnerGroup -AutoSize

# Identify SQL Server-related cluster resources
Get-ClusterResource |
    Where-Object { $_.ResourceType -like "*SQL*" } |
    Format-Table Name, ResourceType, State, OwnerGroup -AutoSize

# Generate cluster logs
New-Item -ItemType Directory -Path "C:\ClusterLogs" -Force
Get-ClusterLog -UseLocalTime -Destination "C:\ClusterLogs"

FailoverClusters PowerShell モジュールには、Get-ClusterGroup、Get-ClusterResource、およびGet-ClusterLogコマンドレットが用意されています。 これらのコマンドレットの詳細については、次の記事を参照してください。

SQL Server固有のエラーについては、次の記事を参照してください。

不足しているリソース固有のレジストリ キーを再作成する

不足しているリソース固有のレジストリ キーを再作成するには、「リソース固有のレジストリ キーを手動で再作成する」の手順に従います。 文書化されたレジストリの変更を行う前に、SQL Serverクラスター リソースを特定し、クラスター レジストリをバックアップします。

# Identify the SQL Server cluster resources
Get-ClusterResource |
    Where-Object { $_.ResourceType -like "*SQL*" } |
    Format-Table Name, ResourceType, State, OwnerGroup

# Back up the cluster registry before making documented registry changes
New-Item -ItemType Directory -Path "C:\Temp" -Force
reg export "HKLM\Cluster" "C:\Temp\ClusterRegistryBackup.reg" /y

Caution

関連のないインスタンス間でレジストリ値をコピーしないでください。 変更を加える前に、インスタンス ID、共有ストレージ パス、クラスター化されたロール、ノードを確認します。

診断データの収集

これらの手順を完了した後もエラーが解決しない場合は、同じリソース移行のクラスター ログを含め、考えられるすべての所有者ノードから診断データを収集します。 収集する gMSA 固有の証拠と標準的なSQL Server ログについては、gMSA トラブルシューティングの概要の診断データの収集に関するページを参照してください。 そのデータを使用して調査を続行するか、サポート ケースを開きます。