AlwaysOn可用性グループの自動フェールオーバーが機能しない


10

AGセットアップで遊ぶ私はWSFCを起動し、DevClusterOnlineと呼ばれる1つの可用性グループの2つのノードで構成しています。両方のノード(DEV-AWEB5プライマリ、DEV-AWEB6セカンダリ)はWindows Server 2008 R2を実行しています。

AGの状態をチェックすると、次のようになります。

可用性グループの正常性の説明

以下のクエリを実行すると、この結果セットが返されます。 同期コミットと自動フェイルオーバーのセットアップ

select
    ar.replica_server_name,
    availability_group_name = ag.name,
    ar.availability_mode_desc,
    ar.failover_mode_desc
from sys.availability_replicas ar
inner join sys.availability_groups ag
on ar.group_id = ag.group_id
order by availability_group_name, replica_server_name;

DEV-AWEB5を切断すると、グループリスナー(DevListener)に接続できませんが、pingを実行すると、pingに応答します。レプリカ-DEV-AWEB6はRESOLVING状態になり、私のDBにアクセスできません。ただし、手動でManagement Studioに移動し、フェールオーバーをDEV-AWEB6に設定すると、再び起動して実行され、DevListenerがもう一度接続を受け入れます。

これらの事実がフェイルオーバーが実際に機能していることを確認していること、コミットを同期して自動フェイルオーバーを構成していることを考えると、セットアップで誤動作した場合はどうなるかわかりません。

DEV-AWEB5を切断すると、レプリカが接続を保持し、DevListenerも保持されることを期待しています。自動フェイルオーバーにより、AGリスナーに透過的に接続できると思います。エンドユーザーの観点から見ると、Webシステムを使用している場合、DBサーバーの1つがダウンしたことは気付かないはずです。

私はここで立ち往生しています、誰かが私が間違っていることを教えてくれますか?


1
クォーラムモデルはどのように見えますか?単純なノード過半数ですか?もしそうなら、それはあなたの問題かもしれません。technet.microsoft.com/en-us/library/cc731739.aspxから、そのクォーラムモデルは(クラスター内のノードの半分)-1の損失のみを持続できます。したがって、ノードマジョリティクォーラムを備えた2ノードクラスタがある場合、0ノード障害に耐えることができます。
Ben Thul 14

2
@BenThulクラスターがクォーラムを失うと、OPは手動でフェイルオーバーできなくなります。
トーマス・ストリンガー2014

回答:


6

DEV-AWEB5を切断すると

必要に応じて、「切断」を定義します。私の推測では、あなたは箱を上げたままSQL Serverをダウンさせたのでしょう。

グループリスナー(DevListener)に接続できませんが、pingを実行すると、pingに応答します

これは、リスナーが、表されている可用性グループのWSFCクラスターリソースグループ内の単なる仮想ネットワーク名(VNN)であるためです。DEV_AWEB5ノードは依然としてクラスターリソースグループを所有していますが、ほとんどの場合、障害状態にあるのはAGクラスターリソースです。VNNはまだオンラインである必要があります(予想される動作)。これは、そのリソースグループ(この場合はDEV-AWEB5)を所有しているノードを指しているだけです。実際、PowerShellリモーティングを有効にしていて、以下を実行した場合:

Invoke-Command -ComputerName "YourListenerName" -ScriptBlock { $env:computername }

同様に、DEV-AWEB5にRDPできる場合(機能やアクセシビリティなどがある場合)、リスナー名(mstsc /v:YourListenerName)を使用してRDPを実行できます。それは単なるVNNです。

その戻り値は、所有ノードのコンピューター名です。

すべての症状から、フェイルオーバーのしきい値に達したことは間違いありません。フェイルオーバーのしきい値は、指定した期間内にクラスターがリソースグループのフェイルオーバーを試行する回数を決定します。これらの値のデフォルトは、6時間の最大フェイルオーバーn-1nはノードの数)です。次のWSFC PowerShellコマンドで確認できます。

Get-ClusterGroup -Name "YourAgName" |
    Select-Object Name, FailoverThreshold, FailoverPeriod

これは設定を提供するだけです(もちろん、必要に応じて変更できます)。

これが当てはまることを証明する最良の方法は、クラスターログを生成する必要があることです(システムイベントログは、「障害が発生した」などの詳細のみを記録します)。

Get-ClusterLog -Node "YourClusterNode" -TimeSpan <amount_of_minutes_since_failure>

これはデフォルトで「C:\ Windows \ Cluster \ Reports」フォルダに入れられ、ファイルは「Cluster.log」と呼ばれます。

そのクラスターログを開くと、何が起こったのか、なぜ起こったのかを正確に示す、次の文字列を見つけることができるはずです。

グループ[YourClusterGroupName]、failoverCount [フェイルオーバーの数]、フェイルオーバーしきい値[フェイルオーバーしきい値]、nodeAvailCount [ノード使用可能カウント ] をフェイルオーバーしません。

上記のメッセージは、WSFCが発生しすぎたためにグループをフェイルオーバーしないことを通知するWSFCです(しきい値に達したため)。

なぜこれが起こるのですか?ノード間で頻繁に行き来するクラスターリソースのピンポン効果を防ぐためだけです。

これは、フェイルオーバーテストでこれらのしきい値に達することは一般的ですが、本番環境では、通常、調査する必要がある問題を示します。


2
あなたの助けをありがとう、私はあなたの指示に従いましたが、私はこれが問題ではないことをついに見つけました。AGを自動的にフェイルオーバーできなかったのは、WSFCの依存関係を正しく構成していなかったためです。結局のところ、MSSQLをクラスターリソース(汎用サービス)として追加し、AGリスナーと共にフェールオーバークラスターマネージャーに依存関係として追加する必要がありました。また、「再起動に失敗した場合は、このサービスまたはアプリケーションのすべてのリソースをフェイルオーバーする」チェックボックスをオンにする必要があります。きっとあなたは私がこれをすでにやったという印象を受けていたと思います。
Marcus

1

MSSQLを汎用サービスリソースとして追加することは、答えではありません。

これにより、クラスターマネージャーがSQL Serverサービスを管理するようになります。そうです、はい、自動的にフェールオーバーしますが、SQL Server構成マネージャーで、サービスが「手動」に設定され、クラスターマネージャーがこれでSQLサーバーサービスを制御できます。

Cluster Managerを非クラスター化アプリケーションの管理に任せています。

それは涙で終わります。

MSのドキュメントに従って、SQL Server可用性グループを正しく構成するための正しいアプローチ。

また、クラスターマネージャー>役割>フェイルオーバータブで定義されているフェイルオーバーパラメーターを超えていないことを確認してください。

これらの制限を超えている場合、クラスターはリソースをフェイルオーバーせず、アプリケーションイベントログにエラーが記録されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.