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
を使用してそれを削除し、うまくいきました。ショーン、ありがとう!
メッセージ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変換を適切に実行できない特殊文字があります。