动态端口被设置为不同的端口

SQL*_*ver 2 sql-server network sql-server-2014

在我们的 SQL Server 实例之一(如果您确实需要知道,则为 12.0.5571.0)上,我们使用多个 IP 地址进行连接。

  • 127.0.0.1 - 动态端口设置为 0。没有设置静态端口
  • 172.16.0.5 - SQL Server 所在服务器的 IP 地址。动态端口设置为 0(自动生成)。未分配静态端口
  • 172.16.0.6 - SQL Server 实例的 IP 地址(这样团队只需要点击 IP 地址而不知道他们真正在哪个服务器上)。未分配动态端口。静态端口 1433

我一直在玩 puppet 并且一直在搞乱注册表设置

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp
Run Code Online (Sandbox Code Playgroud)

看看我是否可以使用 puppet 来自动配置 IP 地址和端口分配。我创建了一个名为“IP172016000006”的新注册表路径

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP172016000006
Run Code Online (Sandbox Code Playgroud)

我从中模板化

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP1
Run Code Online (Sandbox Code Playgroud)

但是现在每当我启动 SQL Server 实例时,127.0.0.1 和 172.16.0.5 的动态端口都不同。

比如我会停止SQL Server的实例,进入

  • “SQL Server 配置管理器”
    • 导航到实例的网络配置
      • tcp/ip
        • IP地址
          • 并为 IP 地址 127.0.0.1 和 172.16.0.5 设置“TCP 动态端口 = 0”。

重新启动 SQL Server 后,该实例将侦听 127.0.0.1:43340 和 172.16.0.5:43341(似乎总是比另一个端口多 1)

我已阅读有关 SQL Server Browser文档,发现 SQL Server Browser 将返回它找到的第一个端口。

我还阅读了用于为 SQL Server 设置静态端口的 BOL,它足够有趣,涵盖了如何设置动态端口。BOL 表示 SQL Server 将尝试连接到指定的端口,但如果连接失败,它将获得一个新端口。这在很长一段时间内是有意义的,但 SQL Server 始终具有不一致的动态端口分配。

我已经删除了有问题的注册表值,但 SQL Server 仍然无法将动态端口设置为相同。我已经重新启动了整个服务器。我已经多次将 TCP 动态端口设置为“0”。

如何再次获得一致的动态端口?

  • 视窗服务器 2012 R2
  • SQL Server 12.0.5571.0
  • 安装了 8 个 SQL Server 实例 - 其中 3 个是集群的(这是我们 DBA 的测试配置框;不要判断太苛刻)

Han*_*non 6

动态端口的要点是您不关心服务器运行在哪个端口上。 SQL Server Browser将客户端定向到动态选择的端口。

如果你不想要动态端口,只需在一开始就分配一个端口,那么它永远不会改变。