AlwaysOnをプライマリレプリカとセカンダリレプリカで異なるサブネットに設定しましたが、Registerallprovidersipを1に設定することを余儀なくされました。これにより、リスナーはDNSで0のIPアドレスしか持たなくなり、DNSレプリケーションに翻弄されます。リスナーのIPが更新されるまでに時間がかかるため、フェイルオーバーイベントが発生します。
同様の状況で誰かがフェイルオーバー時間を改善する方法を見つけましたか?
レコードの存続時間(TTL)を変更することに関連して、registerallprovidersip設定を変更する必要があります。
デフォルトのTTLを変更しないと、登録が長すぎます。残念ながら、まだ遅延はありますが、TTLを大幅に削減すると役立ちます。
理想的には、マルチサブネットフェイルオーバーを指定するためにクライアント接続を取得するために何ができるかを確認する必要があり、この回避策を実行する必要はありません。しかし、TTLが下げられているので、大丈夫です。私は複数のクライアントでそれを実行しましたが、すべてうまくいきます。それでも瞬間的には起こりません。
これらの設定が相互に連携して動作する詳細については、 here を参照してください。
私も同様の状況にあります。ここでは、私の会社が20分のグローバルポリシーを持っているDNSアップデートに翻弄されています。我々は持っています [HostRecordTTL] = 300 and [RegisterAllProvidersIP] = 0
レガシーアプリケーションのため。
以下のスクリプトは、すべてのプライマリレプリカ(フェイルオーバー後のプライマリ)のコマンドを生成します。
##### Author: Kin Shah ##############################################################
#run below tsql to update the cluster network name when the failover happens.
# In my company the global DNS cache updates every 20 mins ..
# This was used to re-register / force the Listener device register with the local DC
# registers the Network Name resources of the local cluster with a DNS server and does not interrupt cluster availability.
#CommandToRun_PowerShell column in the script output will provide the command to be run on the primary replica (the primary after failover) !
SELECT
'Get-ClusterResource ' +AGC.name+'_'+AGL.dns_name + ' | Update-ClusterNetworkNameResource' as CommandToRun_PowerShell-- this is the meat !!
, RCS.replica_server_name
, ARS.role_desc
, AGL.dns_name
FROM
sys.availability_groups_cluster AS AGC
INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS RCS
ON
RCS.group_id = AGC.group_id
INNER JOIN sys.dm_hadr_availability_replica_states AS ARS
ON
ARS.replica_id = RCS.replica_id
INNER JOIN sys.availability_group_listeners AS AGL
ON
AGL.group_id = ARS.group_id
WHERE
ARS.role_desc = 'PRIMARY'