我在两个 Windows 服务器上有 2 个 SQL Server 实例,即:
- D-MSSQL01-DE (v.2014)
- D-MSSQL02-DE\SQL2019 (v.2019)
并为 AG 提供单独的服务器:
- D-MSSQL02-DE (v.2014)
- D-MSSQL02-DE\SQL2019 (v.2019)
听众:
- D-AGSQL01-PP(v.2014 监听器)
- D-AGSQL04-PP(v.2019 监听器)
我在设置新的 AG 之后,它是 SQL Server 2019 上的侦听器,具有新的 IP:networkteam 分配的端口。现在,当我连接到这个新创建的侦听器时,不知何故在“始终处于高可用性”下,我看到了 2014 AG 实例!为什么这个连接到 SQL2014 而不是 2019?
您的 2014 和 2019 实例都在相同的硬件上运行——只是端口不同。
虽然您没有指定它们使用的端口,但 2014 实例是默认实例,因此它可能在默认端口 (1433) 上运行,而命名实例在其他端口上运行(谁知道......你d 必须检查 SQL Server 配置管理器)。当您连接到命名实例时,SQL 浏览器服务会帮助您解析名称/端口,或者您可以在连接字符串中指定端口。
听起来您的 2019 实例的 AG 侦听器也可能使用非默认端口(您必须检查 SSMS 中的侦听器配置......如果两个侦听器都在端口 1433 上,请继续阅读)。不幸的是,SQL 浏览器服务无法对 AG 侦听器名称发挥作用。
如果您查看相关文档,它会说明使用非默认侦听器端口意味着您需要在连接字符串中包含该端口:
您应该使用非默认端口吗?在你的情况下,是的。你必须。事实上,如果您在同一个端口上运行两个侦听器,那就是问题所在!文档继续:
在您的情况下,您在同一个集群节点上运行多个服务(SQL 2014 和 SQL 2019)。这会产生冲突,两个
sqlservr.exe
进程都试图在 1433 上侦听,从而导致端口冲突。在这种情况下,您需要更改其中一个侦听器以使用不同的端口,并在连接时指定该端口(例如,在端口 56789 上连接到 D-AGSQL04-PP,以格式指定服务器名称D-AGSQL04-PP,56789
)端口号1433似乎是同样的问题:
当您使用不带端口号的侦听器进行连接时,默认情况下它会尝试在默认端口1433上建立连接。由于侦听器未托管任何 SQL 服务,因此它必须将通信重定向到可用的主副本。当它到达端口号为1433的主副本时
考虑自定义端口在可用性实现中始终是更好的选择(在以下领域中),并且在一个 VM/SERVER 中有多个实例时始终避免端口冲突(使用相同的端口):