我在网上读了很多资料,包括 serverfault 上的经典答案。但是,我仍然找不到这个问题的答案What are common strategies for multiple database management in shared hosting?
。
到目前为止,我发现共享托管公司通常会为 SQL 数据库保留单独的服务器。好的。但我们很容易理解每个数据库的大小都会增长,并且所有数据库所需的空间迟早都会超过某台服务器的空间。
我想到的唯一解决方案是:客户下订单时指定数据库的大小(例如 50 MB)。例如,拥有 500 GB 服务器的托管公司知道可以拥有多少个数据库,因为客户会提前指定空间。但是,这种解决方案有一个非常严重的缺点:当客户数据库增长并且需要更多空间但当前服务器的大小超出时,支持人员必须停止客户数据库并将其移动到另一台服务器。此外,它还需要现场进行其他设置(最小 IP)。但是,根据合同,托管公司必须提供 24/365 的数据库工作。
答案1
设计一个具有 100% 正常运行时间 SLA 的 24/7/365 托管基础设施并非易事。
在服务器领域,存储通常与使用它的应用程序或数据库服务器分开管理。这称为 SAN 或存储区域网络。块级磁盘空间使用 iSCSI 或光纤通道等协议分配给需要它的服务器。当使用这样的 SAN 技术时,存储在服务器上显示为本地连接的硬盘,并且可以像物理连接的硬盘一样使用服务器文件系统工具进行格式化和访问。
如果您从 SAN 为数据库服务器分配了 500GB 的空间,而监控软件随后通知您已接近容量上限,您只需从 SAN 将该分配量从 500GB 增加到 600GB。服务器现在会认为它已连接了 600GB 硬盘,但其中只有 500GB 已格式化。您现在可以使用数据库服务器上操作系统提供的文件系统工具来扩展分区。
您可以使用现成的组件和开源技术来构建自己的 SAN,也可以购买专有设备并将其安装在服务器机房中。无论哪种方式,SAN 都将由某种磁盘阵列支持,该磁盘阵列在物理驱动器之上具有逻辑卷管理层。这将采用 RAID、ZFS、LVM 等形式...只要有空的驱动器托架,您就可以添加额外的硬盘驱动器并使用适当的管理工具来增加逻辑卷。这为您提供了更多空间,以后您可以将其分配给服务器。
当然,为了满足 100% 正常运行时间 SLA,您将需要一个 HA 集群或至少某种形式的复制,以及可以自动重定向流量的负载平衡器。
我不能谈论 Windows 世界,但您可能想从 Linux 的存储角度研究一些东西:iSCSI、CLVM、GFS2、DM-Multipath。