Always On 可用性グループ内で可用性レプリカの参加が解除されている
適用対象 SQL Server
はじめに
- ポリシー名: 可用性レプリカの接続状態
- 問題: 可用性レプリカが切断されています
- カテゴリ: クリティカル
- ファセット: 可用性レプリカ
説明
このポリシーは、可用性レプリカ間の接続状態を確認します。 可用性レプリカの接続状態が DISCONNECTED
の場合、ポリシーは異常な状態です。 それ以外の場合、ポリシーは正常な状態です。
考えられる原因
セカンダリ レプリカがプライマリ レプリカに接続されていません。 接続済みの状態は DISCONNECTED
です。 この問題は、次のいずれかの理由で発生すると考えられます。
- 接続ポートが他のアプリケーションと競合状態にあります。
- 暗号化の種類またはアルゴリズムが一致しません。
- 接続エンドポイントが削除されたか、開始されていません。
- ネットワークまたは接続の問題が発生しているか、ファイアウォールでポートがブロックされています。
- サービスまたはスタートアップ アカウントがドメイン ユーザーではなく、DC と、リモート ノードとポートに接続できません (例: 5022)。
考えられる解決策
プライマリ レプリカおよびセカンダリ レプリカのインスタンスのデータベース ミラーリング エンドポイントの構成を確認し、対応していない構成を更新します。 また、ポートが競合していないかどうかも確認し、競合している場合はポート番号を変更します。
この問題に対して考えられる解決策を次に示します。
接続ポートが他のアプリケーションと競合状態にあります
次のコマンドを実行して、ポートの問題を診断します。
$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
から Node2
、Node2
から 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 とリモート ノードに接続できません
サービス アカウントがリモート ノードに接続できるかどうかをテストするには、次の手順に従います。 この手順は、サービス アカウントでログインしていないと想定しています。
[スタート] を選択して、[Windows PowerShell] のアイコンを右クリックします。
[その他]>[別のユーザーとして実行]>[別のアカウントを使う] を選択します。
サービス アカウント名とパスワードを入力します。
Windows PowerShell を開いたら、次のコマンドを入力して、サービス アカウントでログインしたことを確認します。
whoami
その後、次の例のように、リモート ノードへの接続をテストできます。
$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