![MSSQL:在共享硬件上将开发和生产数据库分离为单独的实例?](https://linux22.com/image/547461/MSSQL%EF%BC%9A%E5%9C%A8%E5%85%B1%E4%BA%AB%E7%A1%AC%E4%BB%B6%E4%B8%8A%E5%B0%86%E5%BC%80%E5%8F%91%E5%92%8C%E7%94%9F%E4%BA%A7%E6%95%B0%E6%8D%AE%E5%BA%93%E5%88%86%E7%A6%BB%E4%B8%BA%E5%8D%95%E7%8B%AC%E7%9A%84%E5%AE%9E%E4%BE%8B%EF%BC%9F.png)
我有一个小型虚拟化环境,其中托管了一个带有数据库后端的小型内部网站。我目前已将我的网络服务器和数据库服务器分开,运行在同一硬件上的不同虚拟机上。
但是,我想知道是否有更好的策略是将开发/生产数据库服务器整合到同一个虚拟机上,但使用单独的实例?我使用 SQL 镜像来实现冗余,因此理论上我会将 SQL VM 从 4 个减少到 2 个。优点是需要管理的 VM 更少,资源分配更简单,并且可以保证开发和生产都处于相同的补丁/服务包级别。
这种方法有什么缺点?如果我在 Windows 服务器上安装默认的 MSSQL 实例,我是否可以再次运行安装程序来创建第二个(命名)实例并将其用于其他环境?最后,如果我将两个实例都分配给同一个 VM,是否可以将不同的实例放在不同的 IP 地址后面?
答案1
管理更少的虚拟机是减少服务器蔓延的绝佳激励!使用 MSSQL 实例将开发与生产环境分开非常容易。它通常就像您描述的一样简单 - 再次运行安装程序以创建第二个(命名)实例。
然后,您可以使用SQL Server Configuration Manager
将命名实例绑定到服务器上所需的任何 IP 地址。它位于SQL Server Network Configuration
>>下Protocols for <INSTANCE NAME>
。
这样做的缺点包括标准的性能问题,但如果流量较低,您几乎肯定不会遇到任何问题。
答案2
当然,您可以设置多个 MSSQL 实例并将它们绑定到单独的 IP。但是,如果是为了分离生产和开发环境,我建议不要这样做。
我更喜欢将开发和生产放在完全不同的物理服务器/虚拟机上,这样开发资源就不会消耗生产资源。开发机器上出现失控的进程/代码并不会消耗所有资源,导致机器瘫痪。这显然不利于生产。开发环境的停机时间不应影响生产。
显然,您的主机中仍然有一个共同点,因此任何错误仍然有可能导致一切崩溃。您本质上在 VM 级别拥有共享资源,但至少在 VM 内不会发生争用。
还有一种 [相当典型的] 情况是,生产操作系统安全性与开发安全性完全不同,而且它们是相互排斥的。在这种情况下,您又回到了不同的服务器。
编辑:
我理解影响很小,但你必须自己权衡。不过请记住,性能不佳的查询也会耗尽服务器的寿命。如果这对你的生产环境来说不是问题,那么使用多个实例就没问题了。你可能希望对 SQL 实例设置最大内存限制,这将有助于缓解这种情况。
答案3
一种更简单的方法是在同一个 SQL Server 实例中使用两个数据库;这就是我会做的,除非我有令人信服的理由需要两个不同的实例。
无论如何,是的,您可以很容易地在同一个(物理/虚拟)服务器上拥有两个实例;您只需再次运行安装程序并指定您想要安装一个命名实例。