Always On 可用性グループ内で可用性レプリカの参加が解除されている

適用対象 SQL Server

はじめに

  • ポリシー名: 可用性レプリカの接続状態
  • 問題: 可用性レプリカが切断されています
  • カテゴリ: クリティカル
  • ファセット: 可用性レプリカ

説明

このポリシーは、可用性レプリカ間の接続状態を確認します。 可用性レプリカの接続状態が DISCONNECTED の場合、ポリシーは異常な状態です。 それ以外の場合、ポリシーは正常な状態です。

考えられる原因

セカンダリ レプリカがプライマリ レプリカに接続されていません。 接続済みの状態は DISCONNECTED です。 この問題は、次のいずれかの理由で発生すると考えられます。

考えられる解決策

プライマリ レプリカおよびセカンダリ レプリカのインスタンスのデータベース ミラーリング エンドポイントの構成を確認し、対応していない構成を更新します。 また、ポートが競合していないかどうかも確認し、競合している場合はポート番号を変更します。

この問題に対して考えられる解決策を次に示します。

接続ポートが他のアプリケーションと競合状態にあります

次のコマンドを実行して、ポートの問題を診断します。

$server_name = "server_instance"  #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT type_desc, port FROM sys.tcp_endpoints WHERE type_desc = 'DATABASE_MIRRORING'; "

前のコマンドは、次のコマンドで使用する必要があるポート番号を返します。

$port = "5022"
Get-NetTCPConnection -LocalPort $port
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess | Select-Object Name, ProductVersion, Path, Id

暗号化の種類またはアルゴリズムが一致しません

両方のサーバーでこのコマンドを実行し、暗号化を比較し、どちらも同じであることを確認します。

$server_name = "server_instance"  #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc FROM sys.database_mirroring_endpoints"

接続エンドポイントが削除されたか、開始されていません

ミラーリング エンドポイントが終了して起動した場合は、次のコマンドを実行します。

$server_name = "server_instance"  #replace with your SQL Server instance
sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc FROM sys.database_mirroring_endpoints"

エンドポイントが接続に応答していないか、実行されていない可能性がある場合は、次のコマンドを実行します。

$server_name = "server_instance"  #use your SQL Server instance here
$server_name = "hadr_endpoint"    #replace with your endpoint name
sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = stopped"
sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = started"

警告

STATE = stopped を指定してコマンドを実行すると、エンドポイントが停止し、Always On のトラフィック フローが一時的に中断します。

ネットワークまたは接続の問題、またはファイアウォールでポートがブロックされています

Node1 から Node2Node2 から Node1 への両方向の接続をテストするには、次のコマンドを使用します。

$computer = "remote_node"      # replace with node name in your environment
$port = "5022"                 # replace with the port from your database_mirroring_endpoints
Test-NetConnection -ComputerName $computer -Port $port

アカウントは ドメイン ユーザーではなく、DC とリモート ノードに接続できません

サービス アカウントがリモート ノードに接続できるかどうかをテストするには、次の手順に従います。 この手順は、サービス アカウントでログインしていないと想定しています。

  1. [スタート] を選択して、[Windows PowerShell] のアイコンを右クリックします。

  2. [その他]>[別のユーザーとして実行]>[別のアカウントを使う] を選択します。

  3. サービス アカウント名とパスワードを入力します。

  4. Windows PowerShell を開いたら、次のコマンドを入力して、サービス アカウントでログインしたことを確認します。

    whoami
    
  5. その後、次の例のように、リモート ノードへの接続をテストできます。

    $computer = "remote_node" # replace with node name in your environment
    $port = "5022"            # replace with the port from your database_mirroring_endpoints
    Test-NetConnection -ComputerName $computer -Port $port