我正在尝试在 SQL 2016 SP1 上创建分布式 AG,但不断收到以下错误。我已经在 VirtualBox(本地桌面)和实际的 VMWare 虚拟环境中尝试过,但每次都会遇到相同的错误。
AG 在两个 WFC 上都成功创建,但是当我尝试在“远程”AG 的主副本上“ALTER AVAILABILITY GROUP [Dist AG Name] JOIN”时,命令成功完成,但我立即在日志中收到此错误:
尝试建立与 ID 为 [FCAA4083-D6B8-1BAC-9E8C-6AECE34513E6] 的可用性副本“AG1”的连接时发生连接超时。存在网络或防火墙问题,或者为副本提供的端点地址不是主机服务器实例的数据库镜像端点。
在“本地”AG 的主副本上,我开始在日志中反复收到这些错误:
网络数据包有效负载中指定的长度与读取的字节数不匹配;连接已关闭。请联系客户端库的供应商。[客户:192.168.56.104]
这些是显示在事件查看器事件中的字节:
0000: AC 45 00 00 14 00 00 00 ¬E......
0008: 14 00 00 00 41 00 47 00 ....A.G.
0010: 31 00 53 00 45 00 52 00 1.S.E.R.
0018: 56 00 45 00 52 00 31 00 V.E.R.1.
0020: 5C 00 41 00 47 00 31 00 \.A.G.1.
0028: 49 00 4E 00 53 00 54 00 I.N.S.T.
0030: 31 00 00 00 00 00 00 00 1.......
在这两种环境中,我只处理一个子网和一个域。在故障排除期间,我还尝试从 VM 主机名、实例名称、AG 名称和侦听器名称中删除所有特殊字符。
想知道是否有人以前遇到过这种情况。我在 SP2 发行说明中没有看到任何表明它存在错误的内容,但如果有人认为值得,我愿意尝试升级 SP2。(不幸的是,我暂时无法升级我的产品环境,这就是为什么我还没有尝试过。)
如果有人愿意尝试重现或提供故障排除提示,我还可以发布完整的端点/AG/侦听器创建脚本。
谢谢!
好吧,我终于找到了问题,这是我自己的愚蠢错误。创建分布式可用性组时,对于 LISTENER_URL 子句,您必须指定侦听器 DNS 名称,但必须指定镜像端点端口。我正在指定侦听器 DNS 名称和侦听器端口。
例如,这是我的端点定义(注意端口 5022):
这是我的监听器定义(注意端口 1435):
这是定义分布式 AG 的正确方法(注意侦听器 DNS 名称但端点端口):
在这篇文章中突出显示的巨大紫色注释中非常清楚地解释了这一点,我以前不知何故完全忽略了这一点: https ://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-distributed -availability-groups?view=sql-server-2017