web-dev-qa-db-ja.com

SQL Server 2014で可用性グループにレプリカを作成、参加、または追加できませんでした

FCI以外のノードに2ノードのFCIとスタンドアロンSQL Serverをインストールしています。私はFCI、AG、およびDBレプリカの構成/インストールを自動化してきました。これは、これまでのすべてのテストで問題なく機能しました。

今日、実行すると以下のエラーが発生します。

_USE [master]
GO
CREATE AVAILABILITY GROUP [AGName]
WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY)
FOR 
REPLICA ON N'Node3\ReadOnly' WITH (ENDPOINT_URL = N'TCP://Node3-blah.blah.com:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 50, PRIMARY_ROLE(ALLOW_CONNECTIONS = ALL), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)),
    N'Primary/Primary' WITH (ENDPOINT_URL = N'TCP://primary.blah.com:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 50, PRIMARY_ROLE(ALLOW_CONNECTIONS = ALL), SECONDARY_ROLE(ALLOW_CONNECTIONS = NO));
GO
_

エラー:

メッセージ19405、レベル16、状態17、行3
ノード 'Node3'はレプリカ 'Node3\ReadOnly'と 'Primary/Primary'の両方の実行可能な所有者であるため、可用性グループ 'AGName'にレプリカを作成、参加、または追加できませんでした。 1つのレプリカがフェールオーバークラスターインスタンスである場合は、重複する可能性のある所有者からノードを削除して、再試行してください。

ノード3はFCIの一部ではありません。 SQL Serverのスタンドアロンインストールがあり、実行可能な所有者としてリストされていません。

Node 3にフェイルオーバーしようとした場合、FCIはそれが実行可能な所有者ではないことを通知します。

何が原因なのかわかりません。数日前にノード1と2の間でFCIを使用してフェイルオーバーを実行しました。今回はそれをテストするためにリスナーを削除しました。何かご意見は?

FCIを破棄して自動化して再作成することもできますが、これが本番環境で発生する場合に備えて、これを実行せずに解決しようとしました。 WSFCからノードを削除して再追加することもできるはずですが、それを行う必要がある運用チームにバグを与えたくありません。ただし、クラスター全体を破棄し、リリースする前にゼロから構築できるようにします。

編集。これはFCIノードからの出力です:

_select * from sys.dm_os_cluster_nodes

NodeName    status  status_description  is_current_owner
---------------------------------------------------------
SQNodeL001-LA   0   up  1
SQNodeL002-LA   0   up  0
SQLNode003-LA   0   up  0
_

スタンドアロンからの出力は空です。これはWSFCの一部ですが、FCIやAGにはまだ含まれていません。

Powershellの出力は、3つすべてが奇妙な所有者ノードになる可能性があることを示しています。

_ClusterObject                                               OwnerNodes
-------------                                               ----------
SQL Server (Instance)                                           {SQNodeL001-LA, SQNodeL002-LA, SQNodeL003-LA}
_

GUIからは、優先所有者として選択されたノード3はありません。マイナーな変更と名前の削除を許してください。最初のノード名はすべて小文字です。他の2つは大文字です。正確なデータを取得するには、Powershellでこれをすべて行う必要があるようですが、まだそのステップを自動化することができていません。次のスプリントになります。

編集2-解決済み:

SeanのPowerShellクエリのおかげで、GUIにはありませんが、PowerShellの所有者としてまだリストされていることがわかりました。私はget-clusterresource "sql server (instance)" | set-clusterownernode -Owners node1 node2を使用してそれを削除し、うまくいきました。ショーン、ありがとう!

enter image description here

1
Ali Razeghi

メッセージ19405、レベル16、状態17、行3ノード 'Node3'はレプリカ 'Node3\ReadOnly'と 'Primary/Primary'の両方の実行可能な所有者であるため、可用性グループ 'AGName'へのレプリカの作成、参加、または追加に失敗しました。 1つのレプリカがフェールオーバークラスターインスタンスである場合は、重複する可能性のある所有者からノードを削除して、再試行してください。

これは、私が目撃した2つの主な理由で発生します。

理由#1-リソース/グループがエラーのあるノードの所有権を持つように設定されています

さまざまな理由により、Windowsクラスタリングのリソースとリソースグループが常に同じ所有権を持つとは限りません。このエラーを診断する最善の方法は、最初にSQL Server(WindowsクラスタリングAPIを呼び出す)がクラスターノードをどのように認識しているのかを確認することです。

SELECT * FROM sys.dm_os_cluster_nodes

クラスターの内容がわかったら、Powershellを介して、クラスターがFCIの所有権であると考えているものを確認します。

Get-ClusterOwnerNode -Resource "SQLFCIInstanceName"

これにより、クラスターリソースを所有できるノードが返されます。たぶんweが実際にそこにあるべきではないことがわかっているノードのノード名が含まれるでしょう。

これを修正するには、次のpowershellコマンドを実行します。

Get-ClusterResource -Name "SQLFCIInstanceName" | Set-ClusterOwnerNode -Owners NodeName1,NodeName2

最初のpowershellコマンドを実行して所有権を確認し、再度AGにレプリカを追加してみてください。

理由#2-Node名前+言語!= Node名前

使用されている言語がUS_Englishでない場合、ノード名(相互に比較した場合)が必ずしも適切に比較されない可能性が高くなります。これにより、AGの外部にあるクラスターで他の多くの問題が発生します(発生します)。

これは、ノード名を取得し、それらを上位または下位に変換し、それらを自分自身と比較することでテストできます。常に機能するように聞こえますが、一部の言語には、UPPERおよびLOWER変換を適切に実行できない特殊文字があります。

4
Sean Gallardy